- synchronized (nonNestedFeatures)
- {
- /*
- * find the first stored feature which doesn't precede the new one
- */
- int insertPosition = binarySearch(nonNestedFeatures,
- SearchCriterion.byFeature(feature, startOrdering));
-
- /*
- * fail if we detect feature enclosure - of the new feature by
- * the one preceding it, or of the next feature by the new one
- */
- if (insertPosition > 0)
- {
- if (encloses(nonNestedFeatures.get(insertPosition - 1), feature))
- {
- return false;
- }
- }
- if (insertPosition < nonNestedFeatures.size())
- {
- if (encloses(feature, nonNestedFeatures.get(insertPosition)))
- {
- return false;
- }
- }
-
- /*
- * checks passed - add the feature
- */
- nonNestedFeatures.add(insertPosition, feature);
-
- return true;
- }
- }
-
- /**
- * Answers true if range1 properly encloses range2, else false
- *
- * @param range1
- * @param range2
- * @return
- */
- protected boolean encloses(ContiguousI range1, ContiguousI range2)
- {
- int begin1 = range1.getBegin();
- int begin2 = range2.getBegin();
- int end1 = range1.getEnd();
- int end2 = range2.getEnd();
- if (begin1 == begin2 && end1 > end2)