X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FHiddenColumns.java;h=48ebb7a0ff767d48b3496153f4a7945ea0eda871;hb=14bfc6fb57f123b815f08dbf5b35544abd33b3af;hp=a9cd4d730c6388ee202d3463d9ec6b9f32c4d272;hpb=5c1e80ada930876d477059fd92c68c898659efbf;p=jalview.git diff --git a/src/jalview/datamodel/HiddenColumns.java b/src/jalview/datamodel/HiddenColumns.java index a9cd4d7..48ebb7a 100644 --- a/src/jalview/datamodel/HiddenColumns.java +++ b/src/jalview/datamodel/HiddenColumns.java @@ -86,6 +86,27 @@ public class HiddenColumns */ private List 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 getBoundedStartIterator(int start, int end) + public Iterator 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 {