private final void growBuffer(){
  final int columns=mColumns;
  int[] newvalues=ArrayUtils.newUnpaddedIntArray(GrowingArrayUtils.growSize(size()) * columns);
  int newsize=newvalues.length / columns;
  final int[] valuegap=mValueGap;
  final int rowgapstart=mRowGapStart;
  int after=mRows - (rowgapstart + mRowGapLength);
  if (mValues != null) {
    System.arraycopy(mValues,0,newvalues,0,columns * rowgapstart);
    System.arraycopy(mValues,(mRows - after) * columns,newvalues,(newsize - after) * columns,after * columns);
  }
  for (int i=0; i < columns; i++) {
    if (valuegap[i] >= rowgapstart) {
      valuegap[i]+=newsize - mRows;
      if (valuegap[i] < rowgapstart) {
        valuegap[i]=rowgapstart;
      }
    }
  }
  mRowGapLength+=newsize - mRows;
  mRows=newsize;
  mValues=newvalues;
}

private final void growBuffer ( ) { final int columns = mColumns ; int [ ] newvalues = ArrayUtils . newUnpaddedIntArray ( GrowingArrayUtils . growSize ( size ( ) ) * columns ) ; int newsize = newvalues . length / columns ; final int [ ] valuegap = mValueGap ; final int rowgapstart = mRowGapStart ; int after = mRows - ( rowgapstart + mRowGapLength ) ; if ( mValues != null ) { System . arraycopy ( mValues , 0 , newvalues , 0 , columns * rowgapstart ) ; System . arraycopy ( mValues , ( mRows - after ) * columns , newvalues , ( newsize - after ) * columns , after * columns ) ; } for ( int i = 0 ; i < columns ; i ++ ) { if ( valuegap [ i ] >= rowgapstart ) { valuegap [ i ] += newsize - mRows ; if ( valuegap [ i ] < rowgapstart ) { valuegap [ i ] = rowgapstart ; } } } mRowGapLength += newsize - mRows ; mRows = newsize ; mValues = newvalues ; }
grows the value and gap arrays to be large enough to store at least one more than the current number of rows .
