ss: Speed up TreeMapStore#add()
authorAlexandre Montplaisir <alexmonthy@voxpopuli.im>
Mon, 28 Sep 2015 21:27:31 +0000 (17:27 -0400)
committerAlexandre Montplaisir <alexmonthy@voxpopuli.im>
Mon, 28 Sep 2015 22:42:02 +0000 (18:42 -0400)
The add() does not need to call contains(), a O(n) operation, to check
if the element was already present. It can simply re-use the return
value of TreeMultimap.put().

Change-Id: Iab1971f6310163099906df0a1702d106e3640316
Signed-off-by: Alexandre Montplaisir <alexmonthy@voxpopuli.im>
Reviewed-on: https://git.eclipse.org/r/56904
Reviewed-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Tested-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Reviewed-by: Hudson CI
statesystem/org.eclipse.tracecompass.segmentstore.core.tests/src/org/eclipse/tracecompass/segmentstore/core/tests/treemap/TreeMapStoreTest.java
statesystem/org.eclipse.tracecompass.segmentstore.core/src/org/eclipse/tracecompass/segmentstore/core/treemap/TreeMapStore.java

index ecd7629fef423da2c8c62c4b2bf3bdbf67f766aa..41beea22eb94aee976efa92656b689ed2a76a79f 100644 (file)
@@ -129,7 +129,8 @@ public class TreeMapStoreTest {
     @Test
     public void testNoDuplicateElements() {
         for (ISegment segment : SEGMENTS) {
-            fSegmentStore.add(new BasicSegment(segment.getStart(), segment.getEnd()));
+            boolean ret = fSegmentStore.add(new BasicSegment(segment.getStart(), segment.getEnd()));
+            assertFalse(ret);
         }
         assertEquals(SEGMENTS.size(), fSegmentStore.size());
     }
index 1632d91c041f5a373b4b7a98ce6ad7fe687f2323..fa5b2b8616bc9f26181188df7d5b27f948c919c0 100644 (file)
@@ -117,20 +117,16 @@ public class TreeMapStore<E extends ISegment> implements ISegmentStore<E> {
 
         fLock.writeLock().lock();
         try {
-            /* We can take a read lock while holding the write lock. */
-            if (contains(val)) {
-                return false;
-            }
-
             if (fStartTimesIndex.put(Long.valueOf(val.getStart()), val)) {
                 fEndTimesIndex.put(Long.valueOf(val.getEnd()), val);
                 fSize++;
                 fLastSnapshot = null;
+                return true;
             }
+            return false;
         } finally {
             fLock.writeLock().unlock();
         }
-        return true;
     }
 
     @Override
This page took 0.02761 seconds and 5 git commands to generate.