protected boolean seekToRow(long currentRow) throws IOException {
    boolean seeked = false;

    // If this holds it means we checked if the row is null, and it was not,
    // and when we skipRows we don't want to skip this row.
    if (currentRow != previousPresentRow) {
      nextIsNull(currentRow);
    }

    if (valuePresent) {
      if (currentRow != previousRow + 1) {
        numNonNulls--;
        long rowInStripe = currentRow - rowBaseInStripe - 1;
        int rowIndexEntry = computeRowIndexEntry(currentRow);
        // if previous == rowIndexEntry * rowIndexStride - 1 even though they are in different
        // index strides seeking will only leaves us where we are.
        if ((previousRow != rowIndexEntry * rowIndexStride  - 1 &&
            rowIndexEntry != computeRowIndexEntry(previousRow)) || currentRow < previousRow) {
          if (present == null) {
            previousRowIndexEntry = rowIndexEntry;
            numNonNulls = countNonNulls(rowInStripe - (rowIndexEntry * rowIndexStride));
          }
          seek(rowIndexEntry, currentRow <= previousRow);
          skipRows(numNonNulls);
        } else {
           if (present == null) {
             // If present is null, it means there are no nulls in this column
             // so the number of nonNulls is the number of rows being skipped
             numNonNulls = currentRow - previousRow - 1;
           }
          skipRows(numNonNulls);
        }
        seeked = true;
      }

      numNonNulls = 0;
      previousRow = currentRow;
    }

    return seeked;
  }
protected boolean seekToRow ( long currentRow ) throws IOException { boolean seeked = false ; if ( currentRow != previousPresentRow ) { nextIsNull ( currentRow ) ; } if ( valuePresent ) { if ( currentRow != previousRow + 1 ) { numNonNulls -- ; long rowInStripe = currentRow - rowBaseInStripe - 1 ; int rowIndexEntry = computeRowIndexEntry ( currentRow ) ; if ( ( previousRow != rowIndexEntry * rowIndexStride - 1 && rowIndexEntry != computeRowIndexEntry ( previousRow ) ) || currentRow < previousRow ) { if ( present == null ) { previousRowIndexEntry = rowIndexEntry ; numNonNulls = countNonNulls ( rowInStripe - ( rowIndexEntry * rowIndexStride ) ) ; } seek ( rowIndexEntry , currentRow <= previousRow ) ; skipRows ( numNonNulls ) ; } else { if ( present == null ) { numNonNulls = currentRow - previousRow - 1 ; } skipRows ( numNonNulls ) ; } seeked = true ; } numNonNulls = 0 ; previousRow = currentRow ; } return seeked ; }
Adjusts all streams so that the next value returned corresponds to the value for currentRow,
suitable for calling from outside

@param currentRow
@return
@throws IOException