*/
private List<int[]> hiddenColumns = new ArrayList<>();
+ private BitSet hiddenBitSet;
+
+ public BitSet getBitset()
+ {
+ if (hiddenBitSet == null)
+ {
+ hiddenBitSet = new BitSet();
+ for (int[] range : hiddenColumns)
+ {
+ hiddenBitSet.set(range[0], range[1] + 1);
+ }
+ }
+ return hiddenBitSet;
+ }
/**
* Constructor
*/
prevHiddenCount);
} finally
{
+ hiddenBitSet = null;
LOCK.writeLock().unlock();
}
}
insertRangeAtOverlap(i, start, end, region);
added = true;
}
+ hiddenBitSet = null;
return added;
}
}
numColumns += region[1] - oldend;
hiddenColumns.subList(i + 1, endi + 1).clear();
+ hiddenBitSet = null;
}
/**
} finally
{
+ hiddenBitSet = null;
LOCK.writeLock().unlock();
}
}
} finally
{
+ hiddenBitSet = null;
LOCK.writeLock().unlock();
}
}
}
} finally
{
+ hiddenBitSet = null;
LOCK.writeLock().unlock();
}
}
}
}
+ /**
+ * 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)
{
} finally
{
+ hiddenBitSet = null;
LOCK.readLock().unlock();
}
}
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)
cursor = new HiddenColumnsCursor(hiddenColumns);
} finally
{
+ hiddenBitSet = null;
LOCK.writeLock().unlock();
}
}
}
} finally
{
+ hiddenBitSet = null;
LOCK.writeLock().unlock();
}
}
{
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();
}
}