private void itemsArrayToCombinedBuffer(T[] itemsArray){
  final int extra=2;
  minValue_=itemsArray[0];
  maxValue_=itemsArray[1];
  System.arraycopy(itemsArray,extra,combinedBuffer_,0,baseBufferCount_);
  long bits=bitPattern_;
  if (bits > 0) {
    int index=extra + baseBufferCount_;
    for (int level=0; bits != 0L; level++, bits>>>=1) {
      if ((bits & 1L) > 0L) {
        System.arraycopy(itemsArray,index,combinedBuffer_,(2 + level) * k_,k_);
        index+=k_;
      }
    }
  }
}

private void itemsArrayToCombinedBuffer ( T [ ] itemsArray ) { final int extra = 2 ; minValue_ = itemsArray [ 0 ] ; maxValue_ = itemsArray [ 1 ] ; System . arraycopy ( itemsArray , extra , combinedBuffer_ , 0 , baseBufferCount_ ) ; long bits = bitPattern_ ; if ( bits > 0 ) { int index = extra + baseBufferCount_ ; for ( int level = 0 ; bits != 0L ; level ++ , bits >>>= 1 ) { if ( ( bits & 1L ) > 0L ) { System . arraycopy ( itemsArray , index , combinedBuffer_ , ( 2 + level ) * k_ , k_ ) ; index += k_ ; } } } }
loads the combined buffer , min and max from the given items array . the combined buffer is always in non - compact form and must be pre - allocated .
