X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2Ffeatures%2FFeatureStoreImpl.java;h=63ee678938ff819db3c21d2bffb79766f7a7a494;hb=b74cdec4b07000bee431a7cca86a948f44d3ffbe;hp=02394bb8275734de221eab070ee69148e041e719;hpb=8406f2ced29d2c04dbabaf1cde80b1a7fa8ce8ce;p=jalview.git diff --git a/src/jalview/datamodel/features/FeatureStoreImpl.java b/src/jalview/datamodel/features/FeatureStoreImpl.java index 02394bb..63ee678 100644 --- a/src/jalview/datamodel/features/FeatureStoreImpl.java +++ b/src/jalview/datamodel/features/FeatureStoreImpl.java @@ -25,9 +25,7 @@ import jalview.datamodel.SequenceFeature; import java.util.ArrayList; import java.util.List; -import intervalstore.api.IntervalStoreI; import intervalstore.impl.BinarySearcher; -import intervalstore.impl.IntervalStore; /** * A data store for a set of sequence features that supports efficient lookup of @@ -42,7 +40,12 @@ public class FeatureStoreImpl extends FeatureStore public FeatureStoreImpl() { - features = new IntervalStore<>(); + super(); + } + + public FeatureStoreImpl(int option) + { + super(option); } /** @@ -67,7 +70,7 @@ public class FeatureStoreImpl extends FeatureStore * insert into list sorted by start (first contact position): * binary search the sorted list to find the insertion point */ - int insertPosition = findFirstBeginStatic(contactFeatureStarts, + int insertPosition = findFirstBegin(contactFeatureStarts, feature.getBegin()); contactFeatureStarts.add(insertPosition, feature); @@ -75,7 +78,7 @@ public class FeatureStoreImpl extends FeatureStore * insert into list sorted by end (second contact position): * binary search the sorted list to find the insertion point */ - insertPosition = findFirstEndStatic(contactFeatureEnds, + insertPosition = findFirstEnd(contactFeatureEnds, feature.getEnd()); contactFeatureEnds.add(insertPosition, feature); @@ -87,9 +90,10 @@ public class FeatureStoreImpl extends FeatureStore * (creating the IntervalStore if necessary) */ @Override - protected synchronized void addNestedFeature(SequenceFeature feature) + protected synchronized boolean addPositionalFeature( + SequenceFeature feature) { - features.add(feature); + return features.add(feature); } /** @@ -134,7 +138,7 @@ public class FeatureStoreImpl extends FeatureStore * find the first contact feature (if any) * whose end point is not before the target range */ - int index = findFirstEndStatic(contactFeatureEnds, from); + int index = findFirstEnd(contactFeatureEnds, from); int n = contactFeatureEnds.size(); while (index < n) @@ -244,46 +248,27 @@ public class FeatureStoreImpl extends FeatureStore private void findOverlaps(long start, long end, List result) { - result.addAll(((IntervalStoreI) features) + result.addAll(features .findOverlaps(start, end)); } @Override protected int findFirstBegin(List list, long pos) { - return findFirstBeginStatic(list, pos); - } - - /** - * Possibly a bit faster using a static method. - * - * @param list - * @param pos - * @return - */ - private static int findFirstBeginStatic(List list, - long pos) - { - return BinarySearcher.findFirst(list, f -> f.getBegin() >= pos); + return BinarySearcher.findFirst(list, (int) pos, + BinarySearcher.fbegin); } @Override protected int findFirstEnd(List list, long pos) { - return findFirstEndStatic(list, pos); + return BinarySearcher.findFirst(list, (int) pos, BinarySearcher.fend); } - /** - * Possibly a bit faster using a static method. - * - * @param list - * @param pos - * @return - */ - private static int findFirstEndStatic(List list, - long pos) + @Override + protected boolean findAndRemoveNonContactFeature(SequenceFeature sf) { - return BinarySearcher.findFirst(list, f -> f.getEnd() >= pos); + return features.remove(sf); } }