@Override public void initBlock() { nodLenBuffer.offset = nodLenBuffer.length = 0; nodBuffer.offset = nodBuffer.length = 0; termFreqBuffer.offset = termFreqBuffer.length = 0; this.resetCurrentNode(); nodLenReadPending = true; nodReadPending = true; termFreqReadPending = true; nodLenCompressedBufferLength = 0; nodCompressedBufferLength = 0; termFreqCompressedBufferLength = 0; }
/** Create a random Json document with random values */ public String getRandomJson(int nbNodes) { // init sb.setLength(0); sb.append("{"); states.clear(); states.add(OBJECT_ATT); images.clear(); nodes.clear(); incr.clear(); datatypes.clear(); types.clear(); curNodePath.length = 1; curNodePath.offset = 0; Arrays.fill(curNodePath.ints, -1); shouldFail = false; nestedObjs = 0; // <= so that when nbNodes == 1, the json is still valid /* * the generated json might be uncomplete, if states is not empty, and * the maximum number of nodes has been reached. */ for (final int i = 0; i <= nbNodes && !states.empty(); nbNodes++) { sb.append(this.getWhitespace()).append(this.getNextNode()).append(this.getWhitespace()); } shouldFail = shouldFail ? true : !states.empty(); return sb.toString(); }
/** * Decode delta of the node. * * <p>If a new doc has been read (currentNode.length == 0), then update currentNode offset and * length. Otherwise, perform delta decoding. * * <p>Perform delta decoding while current node id and previous node id are equals. */ private final void deltaDecoding() { final int[] nodBufferInts = nodBuffer.ints; // increment length by one final int nodLength = nodLenBuffer.ints[nodLenBuffer.offset++] + 1; final int nodOffset = nodBuffer.offset; final int nodEnd = nodOffset + nodLength; final int currentNodeOffset = currentNode.offset; final int currentNodeEnd = currentNodeOffset + currentNode.length; for (int i = nodOffset, j = currentNodeOffset; i < nodEnd && j < currentNodeEnd; i++, j++) { nodBufferInts[i] += nodBufferInts[j]; // if node ids are different, then stop decoding if (nodBufferInts[i] != nodBufferInts[j]) { break; } } // increment node buffer offset nodBuffer.offset += nodLength; // update last node offset and length currentNode.offset = nodOffset; currentNode.length = nodLength; }
@Override public void compress(final IntsRef input, final BytesRef output) { assert input.ints.length % 32 == 0; final int[] uncompressedData = input.ints; final byte[] compressedData = output.bytes; // prepare the input buffer before starting the compression this.prepareInputBuffer(input); while (input.offset < input.length) { for (final long compressorCode : this.frameCompressorCodes(uncompressedData, input.offset, input.length)) { compressedData[output.offset] = (byte) compressorCode; this.compressors[(int) compressorCode].compress(input, output); } } // flip buffer input.offset = 0; output.length = output.offset; output.offset = 0; }
/** * doFloor controls the behavior of advance: if it's true doFloor is true, advance positions to * the biggest term before target. */ public IntsRefFSTEnum(FST<T> fst) { super(fst); result.input = current; current.offset = 1; }
public void resetCurrentNode() { currentNode.offset = currentNode.length = 0; }