public boolean equals(int position, BlockCursor cursor) { checkArgument(position >= 0 && position < positionOffsets.size()); int offset = positionOffsets.getInt(position); Slice rightSlice = cursor.getRawSlice(); int rightOffset = cursor.getRawOffset(); return valueEquals(type, slice, offset, rightSlice, rightOffset); }
public boolean equals(int position, ChannelBuilder rightBuilder, int rightPosition) { checkArgument(position >= 0 && position < positionOffsets.size()); checkArgument(rightPosition >= 0 && rightPosition < rightBuilder.positionOffsets.size()); Slice leftSlice = slice; int leftOffset = positionOffsets.getInt(position); Slice rightSlice = rightBuilder.slice; int rightOffset = rightBuilder.positionOffsets.getInt(rightPosition); return valueEquals(type, leftSlice, leftOffset, rightSlice, rightOffset); }
public void appendTo(int position, BlockBuilder builder) { checkArgument(position >= 0 && position < positionOffsets.size()); int offset = positionOffsets.getInt(position); if (slice.getByte(offset) != 0) { builder.appendNull(); } else if (type == Type.FIXED_INT_64) { builder.append(slice.getLong(offset + SIZE_OF_BYTE)); } else if (type == Type.DOUBLE) { builder.append(slice.getDouble(offset + SIZE_OF_BYTE)); } else if (type == Type.BOOLEAN) { builder.append(slice.getByte(offset + SIZE_OF_BYTE) != 0); } else if (type == Type.VARIABLE_BINARY) { int sliceLength = getVariableBinaryLength(slice, offset); builder.append(slice.slice(offset + SIZE_OF_BYTE + SIZE_OF_INT, sliceLength)); } else { throw new IllegalArgumentException("Unsupported type " + type); } }
public static void addField( String indexDir, String newFieldName, FlamdexReader docReader, final String[] values) throws IOException { final int[] indices = new int[docReader.getNumDocs()]; for (int i = 0; i < indices.length; i++) { indices[i] = i; } log.debug("sorting"); Quicksortables.sort( new Quicksortable() { @Override public void swap(int i, int j) { Quicksortables.swap(indices, i, j); } @Override public int compare(int i, int j) { // Sorting logic: Primarily by value (String), secondarily by document ID (indices[i]) final String left = values[indices[i]]; final String right = values[indices[j]]; if (left.compareTo(right) < 0) { return -1; } else if (left.compareTo(right) > 0) { return 1; } else { // left == right if (indices[i] < indices[j]) { return -1; } else if (indices[i] > indices[j]) { return 1; } else { return 0; // Both value & doc ID match } } } }, values.length); log.debug("writing field " + newFieldName); final SimpleFlamdexWriter w = new SimpleFlamdexWriter(indexDir, docReader.getNumDocs(), false); final StringFieldWriter sfw = w.getStringFieldWriter(newFieldName, true); final IntArrayList docList = new IntArrayList(); docList.add(indices[0]); for (int i = 1; i < indices.length; ++i) { final String prev = values[indices[i - 1]]; final String cur = values[indices[i]]; if (cur.compareTo(prev) != 0) { sfw.nextTerm(prev); for (int j = 0; j < docList.size(); ++j) { sfw.nextDoc(docList.getInt(j)); } docList.clear(); } docList.add(indices[i]); } if (docList.size() > 0) { sfw.nextTerm(values[indices[indices.length - 1]]); for (int j = 0; j < docList.size(); ++j) { sfw.nextDoc(docList.getInt(j)); } } sfw.close(); w.close(); }
public int hashCode(int position) { checkArgument(position >= 0 && position < positionOffsets.size()); return valueHashCode(type, slice, positionOffsets.getInt(position)); }