code: public void checkRowValue(int iCurrentRow)
      {
          if (m_iLastRecord != RECORD_UNKNOWN)
              return;     // No need to calc an eof if we have the real thing.
          m_iLargestValidRecord = Math.max(m_iLargestValidRecord, iCurrentRow);
          if (iCurrentRow < this.getRowCount(true) - 1)
              return;     // No need to recalc if less than the estimated EOF
          int iRoot = (int)(Math.pow(iCurrentRow, 1.0 / POWER)) + 1;
          this.setRowCount((int)(Math.pow(iRoot, POWER)) + 1);    // New estimated EOF
      }
docs: If you have not hit EOF yet, calc a theoretical EOF value.
  This "guesses" at an EOF value, and when the user hits the theoretical EOF, bumps it to a higher value.
  The value is increased logrithmically (ie., 0-3 ->4, 4-15 ->16, 16-63 ->64 depending on the POWER constant).
  @param iCurrentRow This row is a valid record, do I need to adjust my theoretical maximum?