1 package jalview.datamodel.features;
3 import java.util.ArrayList;
7 * Each node of the NCList tree consists of a range, and (optionally) the NCList
8 * of ranges it encloses
12 class NCNode<V extends ContiguousI>
15 * deep size (number of ranges included)
21 private NCList<V> subregions;
24 * Constructor given a list of ranges
28 NCNode(List<V> ranges)
34 * Constructor given a single range
40 List<V> ranges = new ArrayList<V>();
45 NCNode(V entry, NCList<V> newNCList)
48 subregions = newNCList;
49 // size = 1 + newNCList.size();
55 protected void build(List<V> ranges)
59 if (!ranges.isEmpty())
61 region = ranges.get(0);
63 if (ranges.size() > 1)
65 subregions = new NCList<V>(ranges.subList(1, ranges.size()));
71 return region.getBegin();
76 return region.getEnd();
80 * Formats the node as a bracketed list e.g.
83 * [1-100 [10-30 [10-20]], 15-30 [20-20]]
87 public String toString() {
88 StringBuilder sb = new StringBuilder(10 * size);
89 sb.append(region.getBegin()).append("-").append(region.getEnd());
90 if (subregions != null)
92 sb.append(" ").append(subregions.toString());
97 void prettyPrint(StringBuilder sb, int offset, int indent) {
98 for (int i = 0 ; i < offset ; i++) {
101 sb.append(region.getBegin()).append("-").append(region.getEnd());
102 if (subregions != null)
104 sb.append(System.lineSeparator());
105 subregions.prettyPrint(sb, offset + 2, indent);
109 * Add any ranges that overlap the from-to range to the result list
115 void addOverlaps(long from, long to, List<V> result)
117 if (region.getBegin() <= to && region.getEnd() >= from)
121 if (subregions != null)
123 subregions.findOverlaps(from, to, result);
128 * Add one range to this subrange
132 synchronized void add(V entry)
134 if (entry.getBegin() < region.getBegin() || entry.getEnd() > region.getEnd()) {
135 throw new IllegalArgumentException(String.format(
136 "adding improper subrange %d-%d to range %d-%d",
137 entry.getBegin(), entry.getEnd(), region.getBegin(),
140 if (subregions == null)
142 subregions = new NCList<V>(entry);
146 subregions.add(entry);
151 * Answers true if the data held satisfy the rules of construction of an
152 * NCList, else false.
158 if (subregions == null)
162 return subregions.isValid(getStart(), getEnd());