X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=statesystem%2Forg.eclipse.tracecompass.segmentstore.core%2Fsrc%2Forg%2Feclipse%2Ftracecompass%2Fsegmentstore%2Fcore%2FISegmentStore.java;h=132f08a9a68f3178e1b285fe6d4720cf9af94c2f;hb=def1d9d0cd83d812a3d19ef72860c188e1a830ba;hp=2e4be6a6594251bffd946911cbfe5bcc9b64f08e;hpb=472ea248a0bba4cee7ee055b4a4d676e1bf2dda1;p=deliverable%2Ftracecompass.git diff --git a/statesystem/org.eclipse.tracecompass.segmentstore.core/src/org/eclipse/tracecompass/segmentstore/core/ISegmentStore.java b/statesystem/org.eclipse.tracecompass.segmentstore.core/src/org/eclipse/tracecompass/segmentstore/core/ISegmentStore.java index 2e4be6a659..132f08a9a6 100644 --- a/statesystem/org.eclipse.tracecompass.segmentstore.core/src/org/eclipse/tracecompass/segmentstore/core/ISegmentStore.java +++ b/statesystem/org.eclipse.tracecompass.segmentstore.core/src/org/eclipse/tracecompass/segmentstore/core/ISegmentStore.java @@ -13,6 +13,14 @@ package org.eclipse.tracecompass.segmentstore.core; import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.jdt.annotation.NonNull; + +import com.google.common.collect.Lists; /** * Interface for segment-storing backends. @@ -25,6 +33,18 @@ import java.util.Collection; */ public interface ISegmentStore extends Collection { + /** + * Sorted Iterator + * + * @param order + * The desired order for the returned iterator + * @return An iterator over all the segments in the store in the desired order + * @since 1.1 + */ + default Iterable iterator(Comparator order){ + return getIntersectingElements(Long.MIN_VALUE, Long.MAX_VALUE, order); + } + /** * Retrieve all elements that inclusively cross the given position. * @@ -33,7 +53,25 @@ public interface ISegmentStore extends Collection { * tree's X axis represents time. * @return The intervals that cross this position */ - Iterable getIntersectingElements(long position); + default Iterable getIntersectingElements(long position){ + return getIntersectingElements(position, position); + } + + /** + * Retrieve all elements that inclusively cross the given position, sorted + * in the specified order. + * + * @param position + * The target position. This would represent a timestamp, if the + * tree's X axis represents time. + * @param order + * The desired order for the returned iterator + * @return The intervals that cross this position + * @since 1.1 + */ + default Iterable getIntersectingElements(long position, Comparator order) { + return getIntersectingElements(position, position, order); + } /** * Retrieve all elements that inclusively cross another segment. We define @@ -54,6 +92,31 @@ public interface ISegmentStore extends Collection { */ Iterable getIntersectingElements(long start, long end); + /** + * Retrieve all elements that inclusively cross another segment, sorted in + * the specified order. We define this target segment by its start and end + * positions. + * + * @param start + * The target start position + * @param end + * The target end position + * @param order + * The desired order for the returned iterator + * @return The intervals that cross this position + * @since 1.1 + */ + default Iterable getIntersectingElements(long start, long end, Comparator order){ + List list = Lists.newArrayList(getIntersectingElements(start, end)); + return new Iterable<@NonNull E>() { + @Override + public Iterator<@NonNull E> iterator() { + Collections.sort(list, order); + return list.iterator(); + } + }; + } + /** * Dispose the data structure and release any system resources associated * with it.