Clover icon

jalviewX

  1. Project Clover database Wed Oct 31 2018 15:13:58 GMT
  2. Package jalview.datamodel

File RangeElementsIterator.java

 

Coverage histogram

../../img/srcFileCovDistChart10.png
0% of files have more coverage

Code metrics

8
19
5
1
108
59
10
0.53
3.8
5
2

Classes

Class Line # Actions
RangeElementsIterator 34 19 10 1
0.9687596.9%
 

Contributing tests

This file is covered by 10 tests. .

Source view

1    /*
2    * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3    * Copyright (C) $$Year-Rel$$ The Jalview Authors
4    *
5    * This file is part of Jalview.
6    *
7    * Jalview is free software: you can redistribute it and/or
8    * modify it under the terms of the GNU General Public License
9    * as published by the Free Software Foundation, either version 3
10    * of the License, or (at your option) any later version.
11    *
12    * Jalview is distributed in the hope that it will be useful, but
13    * WITHOUT ANY WARRANTY; without even the implied warranty
14    * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15    * PURPOSE. See the GNU General Public License for more details.
16    *
17    * You should have received a copy of the GNU General Public License
18    * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19    * The Jalview Authors are detailed in the 'AUTHORS' file.
20    */
21    package jalview.datamodel;
22   
23    import java.util.Iterator;
24    import java.util.NoSuchElementException;
25   
26    /**
27    * Iterator over each element in a set of ranges i.e. if ranges is {[3,6],
28    * [12,15]} it will iterate over {3,4,5,6,12,13,14,15}. Uses a local copy of the
29    * set of ranges.
30    *
31    * @author kmourao
32    *
33    */
 
34    public class RangeElementsIterator implements Iterator<Integer>
35    {
36    private int last;
37   
38    private int current;
39   
40    private int next;
41   
42    private Iterator<int[]> rangeIterator;
43   
44    private int[] nextRange = null;
45   
 
46  10 toggle RangeElementsIterator(Iterator<int[]> it)
47    {
48  10 rangeIterator = it;
49  10 if (rangeIterator.hasNext())
50    {
51  10 nextRange = rangeIterator.next();
52  10 next = nextRange[0];
53  10 last = nextRange[1];
54    }
55    }
56   
 
57  64 toggle @Override
58    public boolean hasNext()
59    {
60  64 return rangeIterator.hasNext() || next <= last;
61    }
62   
 
63  30 toggle @Override
64    public Integer next()
65    {
66  30 if (!hasNext())
67    {
68  4 throw new NoSuchElementException();
69    }
70   
71  26 current = next;
72   
73    // recalculate next
74  26 next++;
75   
76    // if there are more ranges need to check if next is in a range
77  26 checkNextRange();
78  26 return current;
79    }
80   
81    /**
82    * Check how next position relates to next range, and update next position if
83    * necessary
84    */
 
85  26 toggle private void checkNextRange()
86    {
87  26 if (nextRange != null && next > nextRange[1])
88    {
89  9 if (rangeIterator.hasNext())
90    {
91  1 nextRange = rangeIterator.next();
92  1 next = nextRange[0];
93  1 last = nextRange[1];
94    }
95    else
96    {
97  8 nextRange = null;
98    }
99   
100    }
101    }
102   
 
103  1 toggle @Override
104    public void remove()
105    {
106  1 throw new UnsupportedOperationException();
107    }
108    }