}
/**
+ * Sort and group ranges into sublists where each sublist represents a region
+ * and its contained subregions
+ *
* @param ranges
*/
protected void build(List<T> ranges)
public NCList(T entry)
{
this();
- List<T> ranges = new ArrayList<T>();
- ranges.add(entry);
- build(ranges);
+ subranges.add(new NCNode<T>(entry));
+ size = 1;
}
public NCList()
final int j)
{
NCList<T> newNCList = new NCList<T>();
- newNCList.subranges.addAll(subranges.subList(i, j + 1));
+ newNCList.addNodes(subranges.subList(i, j + 1));
NCNode<T> newNode = new NCNode<T>(entry, newNCList);
for (int k = j; k >= i; k--)
{
subranges.add(i, newNode);
}
+ protected void addNodes(List<NCNode<T>> nodes)
+ {
+ for (NCNode<T> node : nodes)
+ {
+ subranges.add(node);
+ size += node.size();
+ }
+ }
+
/**
* Returns a (possibly empty) list of items whose extent overlaps the given
* range
*
* @return
*/
- public int getSize()
+ public int size()
{
return size;
}
subranges.remove(i);
if (subRegions != null)
{
- subranges.addAll(i, subRegions.subranges);
+ subranges.addAll(subRegions.subranges);
Collections.sort(subranges, intervalSorter);
}
size--;
if (subRegions != null && subRegions.delete(entry))
{
size--;
+ subrange.deleteSubRegionsIfEmpty();
return true;
}
}
* @param ncl
* @param features
*/
- void testDelete_pseudoRandom(NCList<SequenceFeature> ncl,
+ protected void testDelete_pseudoRandom(NCList<SequenceFeature> ncl,
List<SequenceFeature> features)
{
int deleted = 0;
while (!features.isEmpty())
{
- assertEquals(ncl.getSize(), features.size());
+ assertEquals(ncl.size(), features.size());
int toDelete = random.nextInt(features.size());
SequenceFeature entry = features.get(toDelete);
String lastDeleted = "'" + entry.toString() + "'";
i, sf.toString(), lastDeleted));
}
}
- assertEquals(ncl.getSize(), 0); // all gone
+ assertEquals(ncl.size(), 0); // all gone
}
/**
* @param ncl
* @param features
*/
- void testAdd_pseudoRandom(Integer scale, NCList<SequenceFeature> ncl,
+ protected void testAdd_pseudoRandom(Integer scale,
+ NCList<SequenceFeature> ncl,
List<SequenceFeature> features)
{
int count = 0;
*/
assertTrue(ncl.isValid(),
String.format("Failed for scale = %d, i=%d", scale, i));
- assertEquals(ncl.getSize(), count);
+ assertEquals(ncl.size(), count);
}
// System.out.println(ncl.prettyPrint());
}
assertSame(features.getEntries().get(1), sf1);
assertTrue(features.delete(sf1)); // first match only is deleted
assertTrue(features.contains(sf1));
- assertEquals(features.getSize(), 1);
+ assertEquals(features.size(), 1);
assertTrue(features.delete(sf1));
assertTrue(features.getEntries().isEmpty());
}