code: func (it *PackedReaderIterator) nextN(count int) (vs []int64, err error) {
  	assert(len(it.nextValues) >= 0)
  	assert(count > 0)
  
  	remaining := it.valueCount - it.position - 1
  	if remaining <= 0 {
  		return nil, errors.New("EOF")
  	}
  	if remaining < count {
  		count = remaining
  	}
  
  	if len(it.nextValues) == 0 {
  		remainingBlocks := it.format.ByteCount(int32(it.packedIntsVersion), int32(remaining), uint32(it._bitsPerValue))
  		blocksToRead := len(it.nextBlocks)
  		if remainingBlocks < int64(blocksToRead) {
  			blocksToRead = int(remainingBlocks)
  		}
  		err = it.in.ReadBytes(it.nextBlocks[0:blocksToRead])
  		if err != nil {
  			return nil, err
  		}
  		if blocksToRead < len(it.nextBlocks) {
  			for i := blocksToRead; i < len(it.nextBlocks); i++ {
  				it.nextBlocks[i] = 0
  			}
  		}
  
  		it.nextValues = it.nextValuesOrig // restore
  		it.bulkOperation.decodeByteToLong(it.nextBlocks, it.nextValues, it._iterations)
  	}
  
  	if len(it.nextValues) < count {
  		count = len(it.nextValues)
  	}
  	it.position += count
  	values := it.nextValues[0:count]
  	it.nextValues = it.nextValues[count:]
  	return values, nil
  }
docs: /*
  Go slice is used to mimic Lucene(Java)'s LongsRef and I have to keep the
  original slice to avoid re-allocation.
  */