1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.millscript.office.spreadsheet.rows;
22
23 import org.millscript.commons.util.iterator.AbstractListIterator;
24 import org.millscript.office.spreadsheet.Cell;
25 import org.millscript.office.spreadsheet.Row;
26 import org.millscript.office.spreadsheet.rows.RowImpl;
27
28
29 /**
30 *
31 */
32 public class RowListIterator extends AbstractListIterator< Row > {
33
34 /**
35 * The backing data store for this worksheet, a two dimensional array,
36 * an array of array of cells. A null entry indicates the row is empty.
37 */
38 private Cell[][] rowData;
39
40 /**
41 *
42 */
43 public RowListIterator( final Cell[][] rows, final boolean share ) {
44 if ( rows == null || share ) {
45 this.rowData = rows;
46 } else {
47 this.rowData = new Cell[ rows.length ][];
48 System.arraycopy( rows, 0, this.rowData, 0, rows.length );
49 for ( int i = 0; i < rows.length; i++ ) {
50 this.rowData[ i ] = new Cell[ rows[ i ].length ];
51 System.arraycopy( rows[ i ], 0, this.rowData[ i ], 0, rows[ i ].length );
52 }
53 }
54 }
55
56 @Override
57 protected boolean outOfBounds() {
58 return this.rowData == null || super.position == 0 || super.position > this.rowData.length;
59 }
60
61 @Override
62 protected Row getValue() {
63 final Cell[] row = this.rowData[ super.position - 1 ];
64 if ( row == null ) {
65 return new RowImpl();
66 } else {
67 return new RowImpl( row, true );
68 }
69 }
70
71 public boolean hasNext() {
72 return this.rowData != null && super.position + 1 <= this.rowData.length;
73 }
74
75 }