JAL-3253 temporary branch SwingJS upgrade with testNG fixes Java 8
[jalview.git] / src / jalview / datamodel / HiddenColumns.java
index a9cd4d7..48ebb7a 100644 (file)
@@ -86,6 +86,27 @@ public class HiddenColumns
    */
   private List<int[]> hiddenColumns = new ArrayList<>();
 
+  private BitSet hiddenBitSet;
+
+  /**
+   * Returns a BitSet with a set bit for each hidden column (0, 1, ...). This is
+   * valid at the time of calling, but will not reflect any changes made
+   * afterwards.
+   * 
+   * @return
+   */
+  public BitSet getBitset()
+  {
+    if (hiddenBitSet == null)
+    {
+      hiddenBitSet = new BitSet();
+      for (int[] range : hiddenColumns)
+      {
+        hiddenBitSet.set(range[0], range[1] + 1);
+      }
+    }
+    return hiddenBitSet;
+  }
   /**
    * Constructor
    */
@@ -213,6 +234,7 @@ public class HiddenColumns
               prevHiddenCount);
     } finally
     {
+      hiddenBitSet = null;
       LOCK.writeLock().unlock();
     }
   }
@@ -264,6 +286,7 @@ public class HiddenColumns
       insertRangeAtOverlap(i, start, end, region);
       added = true;
     }
+    hiddenBitSet = null;
     return added;
   }
 
@@ -310,6 +333,7 @@ public class HiddenColumns
     }
     numColumns += region[1] - oldend;
     hiddenColumns.subList(i + 1, endi + 1).clear();
+    hiddenBitSet = null;
   }
 
   /**
@@ -330,6 +354,7 @@ public class HiddenColumns
 
     } finally
     {
+      hiddenBitSet = null;
       LOCK.writeLock().unlock();
     }
   }
@@ -356,6 +381,7 @@ public class HiddenColumns
 
     } finally
     {
+      hiddenBitSet = null;
       LOCK.writeLock().unlock();
     }
   }
@@ -399,6 +425,7 @@ public class HiddenColumns
       }
     } finally
     {
+      hiddenBitSet = null;
       LOCK.writeLock().unlock();
     }
   }
@@ -469,6 +496,10 @@ public class HiddenColumns
     }
   }
 
+  /**
+   * Answers true if obj is an instance of HiddenColumns, and holds the same
+   * array of start-end column ranges as this, else answers false
+   */
   @Override
   public boolean equals(Object obj)
   {
@@ -616,6 +647,7 @@ public class HiddenColumns
 
     } finally
     {
+      hiddenBitSet = null;
       LOCK.readLock().unlock();
     }
   }
@@ -794,7 +826,7 @@ public class HiddenColumns
       for (int firstSet = tohide
               .nextSetBit(start), lastSet = start; firstSet >= start
                       && lastSet <= end; firstSet = tohide
-                      .nextSetBit(lastSet))
+                              .nextSetBit(lastSet))
       {
         lastSet = tohide.nextClearBit(firstSet);
         if (lastSet <= end)
@@ -809,6 +841,7 @@ public class HiddenColumns
       cursor = new HiddenColumnsCursor(hiddenColumns);
     } finally
     {
+      hiddenBitSet = null;
       LOCK.writeLock().unlock();
     }
   }
@@ -890,6 +923,7 @@ public class HiddenColumns
       }
     } finally
     {
+      hiddenBitSet = null;
       LOCK.writeLock().unlock();
     }
   }
@@ -905,16 +939,12 @@ public class HiddenColumns
     {
       LOCK.writeLock().lock();
 
-      BitSet hiddenBitSet = new BitSet();
-      for (int[] range : hiddenColumns)
-      {
-        hiddenBitSet.set(range[0], range[1] + 1);
-      }
-      hiddenBitSet.andNot(updates);
+      getBitset().andNot(updates);
       hiddenColumns.clear();
       hideColumns(hiddenBitSet);
     } finally
     {
+      hiddenBitSet = null;
       LOCK.writeLock().unlock();
     }
   }
@@ -1045,7 +1075,7 @@ public class HiddenColumns
    * @param end
    *          position to end at (inclusive, visible column position)
    */
-  public Iterator<Integer> getBoundedStartIterator(int start, int end)
+  public Iterator<Integer> getStartRegionIterator(int start, int end)
   {
     try
     {
@@ -1084,7 +1114,7 @@ public class HiddenColumns
     try
     {
       LOCK.readLock().lock();
-      return new RangeElementsIterator(start, end,
+      return new RangeElementsIterator(
               new VisibleContigsIterator(start, end + 1, hiddenColumns));
     } finally
     {