private List<int[]> localHidden = new ArrayList<>();
- private int lasthiddenregion;
+ private int nexthiddenregion;
VisibleColsIterator(int firstcol, int lastcol, boolean useCopy)
{
last = lastcol;
current = firstcol;
next = firstcol;
- lasthiddenregion = -1;
+ nexthiddenregion = 0;
try
{
{
int i = 0;
for (i = 0; i < hiddenColumns.size()
- && (current < hiddenColumns.get(i)[0]); ++i)
+ && (current <= hiddenColumns.get(i)[0]); ++i)
{
if (current >= hiddenColumns.get(i)[0]
&& current <= hiddenColumns.get(i)[1])
// current is hidden, move to right
current = hiddenColumns.get(i)[1] + 1;
next = current;
+ nexthiddenregion = i + 1;
}
}
- lasthiddenregion = i - 1;
-
for (i = hiddenColumns.size() - 1; i >= 0
- && (last > hiddenColumns.get(i)[1]); --i)
+ && (last >= hiddenColumns.get(i)[1]); --i)
{
if (last >= hiddenColumns.get(i)[0]
&& last <= hiddenColumns.get(i)[1])
}
// make a local copy of the bit we need
- i = lasthiddenregion + 1;
+ i = nexthiddenregion;
while (i < hiddenColumns.size()
&& hiddenColumns.get(i)[0] <= last)
{
localHidden.add(region);
i++;
}
- lasthiddenregion = -1;
}
} finally
{
}
current = next;
if ((localHidden != null)
- && (lasthiddenregion + 1 < localHidden.size()))
+ && (nexthiddenregion < localHidden.size()))
{
// still some more hidden regions
- if (next + 1 < localHidden.get(lasthiddenregion + 1)[0])
+ if (next + 1 < localHidden.get(nexthiddenregion)[0])
{
// next+1 is still before the next hidden region
next++;
}
- else if ((next + 1 >= localHidden.get(lasthiddenregion + 1)[0])
- && (next + 1 <= localHidden.get(lasthiddenregion + 1)[1]))
+ else if ((next + 1 >= localHidden.get(nexthiddenregion)[0])
+ && (next + 1 <= localHidden.get(nexthiddenregion)[1]))
{
// next + 1 is in the next hidden region
- next = localHidden.get(lasthiddenregion + 1)[1] + 1;
- lasthiddenregion++;
+ next = localHidden.get(nexthiddenregion)[1] + 1;
+ nexthiddenregion++;
}
}
else
int blockEnd = end;
int hiddenSoFar = 0;
int visSoFar = 0;
- int maxVisible = end - start;
endsAtHidden = false;
// iterate until a region begins within (start,end]
i++;
}
- if (visSoFar < maxVisible)
+ if (visSoFar < end - start)
{
- blockEnd = blockStart + maxVisible - visSoFar;
+ blockEnd = blockStart + end - start - visSoFar;
int[] contig = new int[] { blockStart, blockEnd };
vcontigs.add(contig);