1 package jalview.datamodel;
3 import java.util.ArrayList;
4 import java.util.Iterator;
8 * An iterator which iterates over hidden column regions in a range. Works with
9 * a copy of the hidden columns collection. Intended to be used by callers
10 * OUTSIDE of HiddenColumns.
12 public class BoundedHiddenColsIterator implements Iterator<int[]>
14 // start position to iterate from
17 // end position to iterate to
20 // current index in hiddenColumns
21 private int currentPosition = 0;
23 // current column in hiddenColumns
24 private int[] currentRegion;
26 // local copy or reference to hiddenColumns
27 private List<int[]> localHidden;
30 * Unbounded constructor
32 BoundedHiddenColsIterator(List<int[]> hiddenColumns)
34 if (hiddenColumns != null)
36 int last = hiddenColumns.get(hiddenColumns.size() - 1)[1];
37 init(0, last, hiddenColumns);
41 init(0, 0, hiddenColumns);
46 * Construct an iterator over hiddenColums bounded at [lowerBound,upperBound]
49 * lower bound to iterate from
51 * upper bound to iterate to
53 BoundedHiddenColsIterator(int lowerBound, int upperBound,
54 List<int[]> hiddenColumns)
56 init(lowerBound, upperBound, hiddenColumns);
60 * Construct an iterator over hiddenColums bounded at [lowerBound,upperBound]
63 * lower bound to iterate from
65 * upper bound to iterate to
67 private void init(int lowerBound, int upperBound,
68 List<int[]> hiddenColumns)
73 if (hiddenColumns != null)
75 localHidden = new ArrayList<>();
77 // iterate until a region overlaps with [start,end]
79 while ((i < hiddenColumns.size())
80 && (hiddenColumns.get(i)[1] < start))
85 // iterate from start to end, adding each hidden region. Positions are
86 // absolute, and all regions which *overlap* [start,end] are added.
87 while (i < hiddenColumns.size() && (hiddenColumns.get(i)[0] <= end))
89 int[] rh = hiddenColumns.get(i);
90 int[] cp = new int[2];
91 System.arraycopy(rh, 0, cp, 0, rh.length);
99 public boolean hasNext()
101 return (localHidden != null) && (currentPosition < localHidden.size());
107 currentRegion = localHidden.get(currentPosition);
109 return currentRegion;