JAL-2759 Fix errant RangeElementsIterator (unit tests were failing)
authorkiramt <k.mourao@dundee.ac.uk>
Mon, 5 Feb 2018 14:41:46 +0000 (14:41 +0000)
committerkiramt <k.mourao@dundee.ac.uk>
Mon, 5 Feb 2018 14:41:46 +0000 (14:41 +0000)
src/jalview/datamodel/HiddenColumns.java
src/jalview/datamodel/RangeElementsIterator.java

index 8f6ecd6..a7e93da 100644 (file)
@@ -1084,7 +1084,7 @@ public class HiddenColumns
     try
     {
       LOCK.readLock().lock();
-      return new RangeElementsIterator(start, end,
+      return new RangeElementsIterator(
               new VisibleContigsIterator(start, end + 1, hiddenColumns));
     } finally
     {
index ca6c4f7..85272f2 100644 (file)
@@ -23,29 +23,27 @@ public class RangeElementsIterator implements Iterator<Integer>
 
   private int[] nextRange = null;
 
-  RangeElementsIterator(int from, int to, Iterator<int[]> it)
+  RangeElementsIterator(Iterator<int[]> it)
   {
-    last = to;
-    current = from;
-    next = from;
     rangeIterator = it;
     if (rangeIterator.hasNext())
     {
       nextRange = rangeIterator.next();
+      next = nextRange[0];
+      last = nextRange[1];
     }
-    checkNextRange();
   }
 
   @Override
   public boolean hasNext()
   {
-    return next <= last;
+    return rangeIterator.hasNext() || next <= last;
   }
 
   @Override
   public Integer next()
   {
-    if (next > last)
+    if (!hasNext())
     {
       throw new NoSuchElementException();
     }
@@ -66,12 +64,13 @@ public class RangeElementsIterator implements Iterator<Integer>
    */
   private void checkNextRange()
   {
-    if (nextRange != null && next >= nextRange[0])
+    if (nextRange != null && next > nextRange[1])
     {
-      next = nextRange[1] + 1;
       if (rangeIterator.hasNext())
       {
         nextRange = rangeIterator.next();
+        next = nextRange[0];
+        last = nextRange[1];
       }
       else
       {