protected void seek ( int rowIndexEntry , boolean backwards ) throws IOException { if ( backwards || rowIndexEntry != computeRowIndexEntry ( previousRow ) ) { // initialize the previousPositionProvider previousRowIndexEntry = rowIndexEntry ; // if the present stream exists and we are seeking backwards or to a new row Index entry // the present stream needs to seek if ( present != null && ( backwards || rowIndexEntry != computeRowIndexEntry ( previousPresentRow ) ) ) { present . seek ( rowIndexEntry ) ; // Update previousPresentRow because the state is now as if that were the case previousPresentRow = rowBaseInStripe + rowIndexEntry * rowIndexStride - 1 ; } seek ( rowIndexEntry ) ; // Update previousRow because the state is now as if that were the case previousRow = rowBaseInStripe + rowIndexEntry * rowIndexStride - 1 ; } }
Adjust all streams to the beginning of the row index entry specified backwards means that a previous value is being read and forces the index entry to be restarted otherwise has no effect if we re already in the current index entry