JAL-3397 impl.IntervalStore and nonc.IntervalStore unified api
[jalview.git] / src / intervalstore / nonc / IntervalStore0.java
index 389439f..1050ee0 100644 (file)
@@ -67,6 +67,7 @@ import intervalstore.api.IntervalStoreI;
 public class IntervalStore0<T extends IntervalI>
         extends AbstractCollection<T> implements IntervalStoreI<T>
 {
+  private static int NOT_CONTAINED = Integer.MIN_VALUE;
 
   /**
    * Search for the last interval that starts before or at the specified from/to
@@ -230,8 +231,8 @@ public class IntervalStore0<T extends IntervalI>
     }
     DO_PRESORT = presort;
     icompare = (comparator != null ? comparator
-            : bigendian ? IntervalI.COMPARATOR_BIGENDIAN
-                    : IntervalI.COMPARATOR_LITTLEENDIAN);
+            : bigendian ? IntervalI.COMPARE_BEGIN_ASC_END_DESC
+                    : IntervalI.COMPARE_BEGIN_ASC_END_ASC);
     this.bigendian = bigendian;
 
     if (DO_PRESORT && intervalCount > 1)
@@ -250,7 +251,7 @@ public class IntervalStore0<T extends IntervalI>
   @Override
   public boolean add(T interval)
   {
-    return add(interval, true);
+    return add(interval, false);
   }
 
   /**
@@ -373,7 +374,7 @@ public class IntervalStore0<T extends IntervalI>
       int pt0 = pt;
       while (--pt >= 0 && offsets[pt] == 0)
       {
-        ;
+        
       }
       if (pt < 0)
       {
@@ -445,7 +446,7 @@ public class IntervalStore0<T extends IntervalI>
       case 0:
         IntervalI iv = intervals[mid];
         if ((bsIgnore == null || !bsIgnore.get(mid))
-                && iv.equalsInterval(interval))
+                && sameInterval(interval, iv))
         {
           return mid;
           // found one; just scan up and down now, first checking the range, but
@@ -459,7 +460,7 @@ public class IntervalStore0<T extends IntervalI>
             break;
           }
           if ((bsIgnore == null || !bsIgnore.get(i))
-                  && iv.equalsInterval(interval))
+                  && sameInterval(interval, iv))
           {
             return i;
           }
@@ -471,7 +472,7 @@ public class IntervalStore0<T extends IntervalI>
             return -1 - ++i;
           }
           if ((bsIgnore == null || !bsIgnore.get(i))
-                  && iv.equalsInterval(interval))
+                  && sameInterval(interval, iv))
           {
             return i;
           }
@@ -482,33 +483,13 @@ public class IntervalStore0<T extends IntervalI>
     return -1 - start;
   }
 
-  // private int binaryInsertionSearch(long from, long to)
-  // {
-  // int matched = intervalCount;
-  // int end = matched - 1;
-  // int start = matched;
-  // if (end < 0 || from > intervals[end].getEnd()
-  // || from < intervals[start = 0].getBegin())
-  // return start;
-  // while (start <= end)
-  // {
-  // int mid = (start + end) >>> 1;
-  // switch (compareRange(intervals[mid], from, to))
-  // {
-  // case 0:
-  // return mid;
-  // case 1:
-  // matched = mid;
-  // end = mid - 1;
-  // continue;
-  // case -1:
-  // start = mid + 1;
-  // continue;
-  // }
-  //
-  // }
-  // return matched;
-  // }
+  boolean sameInterval(IntervalI i1, IntervalI i2)
+  {
+    /*
+     * do the quick test of begin/end first for speed
+     */
+    return i1.equalsInterval(i2) && i1.equals(i2);
+  }
 
   @Override
   public void clear()
@@ -668,17 +649,6 @@ public class IntervalStore0<T extends IntervalI>
     return result;
   }
 
-  @Override
-  public IntervalI get(int i)
-  {
-    if (i < 0 || i >= intervalCount + added)
-    {
-      return null;
-    }
-    ensureFinalized();
-    return intervals[i];
-  }
-
   private int getContainedBy(int index, int begin)
   {
     while (index >= 0)
@@ -692,7 +662,7 @@ public class IntervalStore0<T extends IntervalI>
       }
       index -= Math.abs(offsets[index]);
     }
-    return IntervalI.NOT_CONTAINED;
+    return NOT_CONTAINED;
   }
 
   @Override
@@ -708,7 +678,7 @@ public class IntervalStore0<T extends IntervalI>
     for (int i = 0; i < intervalCount; i++)
     {
       IntervalI element = intervals[i];
-      if (offsets[i] == IntervalI.NOT_CONTAINED)
+      if (offsets[i] == NOT_CONTAINED)
       {
         root = element;
       }
@@ -728,28 +698,6 @@ public class IntervalStore0<T extends IntervalI>
     return maxDepth;
   }
 
-  @Override
-  public int getWidth()
-  {
-    ensureFinalized();
-    int w = 0;
-    for (int i = offsets.length; --i >= 0;)
-    {
-      if (offsets[i] > 0)
-      {
-        w++;
-      }
-    }
-    return w;
-  }
-
-  @Override
-  public boolean isValid()
-  {
-    ensureFinalized();
-    return true;
-  }
-
   /**
    * Answers an iterator over the intervals in the store, with no particular
    * ordering guaranteed. The iterator does not support the optional
@@ -792,7 +740,7 @@ public class IntervalStore0<T extends IntervalI>
       return;
     }
     maxEnd = intervals[0].getEnd();
-    offsets[0] = IntervalI.NOT_CONTAINED;
+    offsets[0] = NOT_CONTAINED;
     if (intervalCount == 1)
     {
       return;
@@ -806,7 +754,7 @@ public class IntervalStore0<T extends IntervalI>
       // System.out.println(sf + " is contained by "
       // + (index < 0 ? null : starts[index]));
 
-      offsets[i] = (index < 0 ? IntervalI.NOT_CONTAINED
+      offsets[i] = (index < 0 ? NOT_CONTAINED
               : isMonotonic ? index - i : i - index);
       isMonotonic = (sf.getEnd() > maxEnd);
       if (isMonotonic)
@@ -888,7 +836,7 @@ public class IntervalStore0<T extends IntervalI>
         case -1:
           break;
         case 0:
-          if (iv.equalsInterval(interval))
+          if (sameInterval(interval, iv))
           {
             return pt;
           }
@@ -903,9 +851,9 @@ public class IntervalStore0<T extends IntervalI>
     else
     {
       int i = intervalCount;
-      while (--i >= 0 && !intervals[i].equalsInterval(interval))
+      while (--i >= 0 && !sameInterval(intervals[i], interval))
       {
-        ;
+        
       }
       return i;
     }
@@ -984,15 +932,6 @@ public class IntervalStore0<T extends IntervalI>
   }
 
   @Override
-  public boolean revalidate()
-  {
-    isTainted = true;
-    isSorted = false;
-    ensureFinalized();
-    return true;
-  }
-
-  @Override
   public int size()
   {
     return intervalCount + added - deleted;
@@ -1045,11 +984,4 @@ public class IntervalStore0<T extends IntervalI>
   {
     return prettyPrint();
   }
-
-  @Override
-  public boolean canCheckForDuplicates()
-  {
-    return true;
-  }
-
 }