1 package jalview.datamodel;
3 import java.util.ArrayList;
4 import java.util.Iterator;
8 * An iterator which iterates over visible start positions of hidden column
11 public class StartRegionIterator implements Iterator<Integer>
13 // start position to iterate from
16 // end position to iterate to
19 // current index in hiddenColumns
20 private int currentPosition = 0;
22 // local copy or reference to hiddenColumns
23 private List<Integer> positions = null;
26 * Construct an iterator over hiddenColums bounded at [lowerBound,upperBound]
29 * lower bound to iterate from
31 * upper bound to iterate to
33 * whether to make a local copy of hiddenColumns for iteration (set
34 * to true if calling from outwith the HiddenColumns class)
36 StartRegionIterator(int lowerBound, int upperBound,
37 List<int[]> hiddenColumns)
39 this(null, lowerBound, upperBound, hiddenColumns);
43 * Construct an iterator over hiddenColums bounded at [lowerBound,upperBound]
46 * a hidden cursor position to start from - may be null
48 * lower bound to iterate from - will be ignored if pos != null
50 * upper bound to iterate to
51 * @param hiddenColumns
52 * the hidden columns collection to use
54 StartRegionIterator(HiddenCursorPosition pos, int lowerBound,
55 int upperBound, List<int[]> hiddenColumns)
60 if (hiddenColumns != null)
62 positions = new ArrayList<>(hiddenColumns.size());
64 // navigate to start, keeping count of hidden columns
70 // use the cursor position provided
71 i = pos.getRegionIndex();
72 hiddenSoFar = pos.getHiddenSoFar();
77 while ((i < hiddenColumns.size())
78 && (hiddenColumns.get(i)[0] < start + hiddenSoFar))
80 int[] region = hiddenColumns.get(i);
81 hiddenSoFar += region[1] - region[0] + 1;
86 // iterate from start to end, adding start positions of each
87 // hidden region. Positions are visible columns count, not absolute
88 while (i < hiddenColumns.size()
89 && (hiddenColumns.get(i)[0] <= end + hiddenSoFar))
91 int[] region = hiddenColumns.get(i);
92 positions.add(region[0] - hiddenSoFar);
93 hiddenSoFar += region[1] - region[0] + 1;
99 positions = new ArrayList<>();
105 public boolean hasNext()
107 return (currentPosition < positions.size());
111 * Get next hidden region start position
113 * @return the start position in *visible* coordinates
116 public Integer next()
118 int result = positions.get(currentPosition);