package jalview.datamodel.features;
+import jalview.datamodel.ContiguousI;
+
import java.util.ArrayList;
import java.util.List;
*
* @param <V>
*/
-class NCNode<V extends ContiguousI>
+class NCNode<V extends ContiguousI> implements ContiguousI
{
/*
* deep size (number of ranges included)
*/
NCNode(V range)
{
- List<V> ranges = new ArrayList<V>();
+ List<V> ranges = new ArrayList<>();
ranges.add(range);
build(ranges);
}
{
region = entry;
subregions = newNCList;
- size = 1 + newNCList.getSize();
+ size = 1 + newNCList.size();
}
/**
}
}
- int getStart()
+ @Override
+ public int getBegin()
{
return region.getBegin();
}
- int getEnd()
+ @Override
+ public int getEnd()
{
return region.getEnd();
}
{
subregions.add(entry);
}
+ size++;
}
/**
*/
boolean isValid()
{
+ /*
+ * we don't handle reverse ranges
+ */
+ if (region != null && region.getBegin() > region.getEnd())
+ {
+ return false;
+ }
if (subregions == null)
{
return true;
}
- return subregions.isValid(getStart(), getEnd());
+ return subregions.isValid(getBegin(), getEnd());
}
/**
{
return subregions;
}
+
+ /**
+ * Nulls the subregion reference if it is empty (after a delete entry
+ * operation)
+ */
+ void deleteSubRegionsIfEmpty()
+ {
+ if (subregions != null && subregions.size() == 0)
+ {
+ subregions = null;
+ }
+ }
+
+ /**
+ * Answers the (deep) size of this node i.e. the number of ranges it models
+ *
+ * @return
+ */
+ int size()
+ {
+ return size;
+ }
}