X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FHiddenColumns.java;h=9722c0a1b12a7bab5685a5e488583f97af91cf74;hb=5e8ec77d921ff2d604811e5e4ba7e9211b0f48de;hp=da0b8546cb0efcd24fa1efa3937b4416ad5b07f8;hpb=0af3213cac54f10113b6fa2cbfb4523dae61b5b7;p=jalview.git diff --git a/src/jalview/datamodel/HiddenColumns.java b/src/jalview/datamodel/HiddenColumns.java index da0b854..9722c0a 100644 --- a/src/jalview/datamodel/HiddenColumns.java +++ b/src/jalview/datamodel/HiddenColumns.java @@ -6,11 +6,12 @@ import jalview.util.ShiftList; import java.util.ArrayList; import java.util.BitSet; import java.util.Collections; +import java.util.Iterator; import java.util.List; import java.util.Vector; import java.util.concurrent.locks.ReentrantReadWriteLock; -public class HiddenColumns +public class HiddenColumns implements Iterable { private static final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); @@ -567,18 +568,7 @@ public class HiddenColumns { if (copy.hiddenColumns != null) { - hiddenColumns = new Vector<>(copy.hiddenColumns.size()); - for (int i = 0, j = copy.hiddenColumns.size(); i < j; i++) - { - int[] rh, cp; - rh = copy.hiddenColumns.elementAt(i); - if (rh != null) - { - cp = new int[rh.length]; - System.arraycopy(rh, 0, cp, 0, rh.length); - hiddenColumns.addElement(cp); - } - } + hiddenColumns = copy.copyHiddenRegions(); } } } @@ -588,6 +578,64 @@ public class HiddenColumns } } + private Vector copyHiddenRegions() + { + Vector copy = new Vector<>(hiddenColumns.size()); + for (int i = 0, j = hiddenColumns.size(); i < j; i++) + { + int[] rh, cp; + rh = hiddenColumns.elementAt(i); + if (rh != null) + { + cp = new int[rh.length]; + System.arraycopy(rh, 0, cp, 0, rh.length); + copy.addElement(cp); + } + } + return copy; + } + + private ArrayList copyHiddenRegionsToArrayList() + { + ArrayList copy = new ArrayList<>(hiddenColumns.size()); + for (int i = 0, j = hiddenColumns.size(); i < j; i++) + { + int[] rh, cp; + rh = hiddenColumns.elementAt(i); + if (rh != null) + { + cp = new int[rh.length]; + System.arraycopy(rh, 0, cp, 0, rh.length); + copy.add(cp); + } + } + return copy; + } + + public void getHiddenColumnsCopy(Vector copy) + { + try + { + lock.readLock().lock(); + copy = copyHiddenRegions(); + } finally + { + lock.readLock().unlock(); + } + } + + public void getHiddenColumnsCopy(ArrayList copy) + { + try + { + lock.readLock().lock(); + copy = copyHiddenRegionsToArrayList(); + } finally + { + lock.readLock().unlock(); + } + } + /** * propagate shift in alignment columns to column selection * @@ -1539,4 +1587,14 @@ public class HiddenColumns } } + @Override + public Iterator iterator() + { + if (hiddenColumns == null) + { + return Collections. emptyList().iterator(); + } + return hiddenColumns.iterator(); + } + }