@Override public boolean add( long value ) { bitVector.append( value, width ); return true; }
@Override public boolean add( long value ) { bitVector.append( value, width ); return true; }
@Override public boolean add(final long value) { bitVector.append(value, width); return true; }
@Override public BitVector toBitVector(final CharSequence cs) { final String s = cs.toString(); final int length = s.length(); final LongArrayBitVector bitVector = LongArrayBitVector.getInstance(length(s)); for (int i = 0, cp; i < length; i += Character.charCount(cp)) bitVector.append(Integer.reverse(cp = s.codePointAt(i)) & -1L >>> 32, Integer.SIZE); if (prefixFree) bitVector.append(0, Integer.SIZE); return bitVector; }
@Override public BitVector toBitVector(final CharSequence cs) { final String s = cs.toString(); final int length = s.length(); final LongArrayBitVector bitVector = LongArrayBitVector.getInstance(length(s)); for (int i = 0, cp; i < length; i += Character.charCount(cp)) bitVector.append(cp = s.codePointAt(i), Integer.SIZE); return bitVector; }
@Override public LongArrayBitVector toBitVector(final CharSequence s) { final BitVector[] codeWord = this.codeWord; final Char2IntMap char2symbol = this.char2symbol; final int length = s.length(); int numBits = (int) (prefixFree ? codeWord[0].length() : 0); for(int i = length; i-- != 0;) numBits += codeWord[char2symbol.get(s.charAt(i))].length(); final LongArrayBitVector result = LongArrayBitVector.getInstance(numBits); for(int i = 0; i < s.length(); i++) result.append(codeWord[char2symbol.get(s.charAt(i))]); if (prefixFree) result.append(codeWord[0]); return result; }
public LongArrayBitVector toBitVector( final CharSequence s ) { final BitVector[] codeWord = this.codeWord; final Char2IntMap char2symbol = this.char2symbol; final int length = s.length(); int numBits = prefixFree ? codeWord[ 0 ].size() : 0; for( int i = length; i-- != 0; ) numBits += codeWord[ char2symbol.get( s.charAt( i ) ) ].size(); final LongArrayBitVector result = LongArrayBitVector.getInstance( numBits ); for( int i = 0; i < s.length(); i++ ) result.append( codeWord[ char2symbol.get( s.charAt( i ) ) ] ); if ( prefixFree ) result.append( codeWord[ 0 ] ); return result; }
public LongArrayBitVector toBitVector( final CharSequence s ) { final BitVector[] codeWord = this.codeWord; final Char2IntMap char2symbol = this.char2symbol; final int length = s.length(); int numBits = prefixFree ? codeWord[ 0 ].size() : 0; for( int i = length; i-- != 0; ) numBits += codeWord[ char2symbol.get( s.charAt( i ) ) ].size(); final LongArrayBitVector result = LongArrayBitVector.getInstance( numBits ); for( int i = 0; i < s.length(); i++ ) result.append( codeWord[ char2symbol.get( s.charAt( i ) ) ] ); if ( prefixFree ) result.append( codeWord[ 0 ] ); return result; }
public void dump(final String file) throws IOException { final ByteBuffer buffer = ByteBuffer.allocateDirect(offsetAndSeed.length * 8 + 40).order(ByteOrder.nativeOrder()); final FileOutputStream fos = new FileOutputStream(file); final FileChannel channel = fos.getChannel(); buffer.clear(); buffer.putLong(size64()); buffer.putLong(width); buffer.putLong(chunkShift); buffer.putLong(globalSeed); buffer.putLong(offsetAndSeed.length); for(final long l : offsetAndSeed) buffer.putLong(l); buffer.flip(); channel.write(buffer); buffer.clear(); final LongArrayBitVector v = LongArrayBitVector.getInstance().ensureCapacity(data.size64() * width); for(final long d: data) v.append(d, width); final long[] array = v.bits(); buffer.putLong(array.length); for(final long l: array) { if (!buffer.hasRemaining()) { buffer.flip(); channel.write(buffer); buffer.clear(); } buffer.putLong(l); } buffer.flip(); channel.write(buffer); fos.close(); }
final long convertedLong = coder.encode(v); final int lenCodeword = coder.codewordLength(v); convertedValues.append(convertedLong, lenCodeword); tripleToEquation(next, seed, m, e); if (DEBUG) {
final long convertedLong = coder.encode(v); final int lenCodeword = coder.codewordLength(v); convertedValues.append(convertedLong, lenCodeword);
else borders.add(lastBorder); if (maxBorder < lastBorder) maxBorder = lastBorder; bits.append(v & (1L << msb) - 1, msb); c++;
if (isInternal && falseFollowsDetector.getLong(key.length(0).append(p - 1, Long.SIZE).append(fragment = bitVector.subVector(s, Math.min(length, s + skip)))) == 0) behaviour = FOLLOW; else behaviour = (int)externalBehaviour.getLong(key.length(0).append(p - 1, Long.SIZE).append(isInternal ? fragment : bitVector.subVector(s, length))); assert ! isInternal || falseFollows.getLong(key.length(0).append(p - 1, Long.SIZE).append(fragment)) != -1; if (behaviour != FOLLOW) { assert ! isInternal || falseFollows.getLong(key.length(0).append(p - 1, Long.SIZE).append(fragment)) == 1; final long result; result = externalTestFunction.getLong(key.length(0).append(p - 1, Long.SIZE).append(isInternal ? fragment : bitVector.subVector(s, length))); assert result != -1 : isInternal ? "Missing internal node" : "Missing leaf"; // Only if you don't test with non-keys if (result != -1) assert result == behaviour : result + " != " + behaviour;
final OfflineIterator<BitVector, LongArrayBitVector> iterator = offlineData.iterator(); while (iterator.hasNext()) dataBitVector.append(iterator.next()); iterator.close(); offlineData.close();
void labelIntermediateTrie(final Node node, final LongArrayBitVector path, final OfflineIterable<BitVector, LongArrayBitVector> delimiters, final OfflineIterable<BitVector, LongArrayBitVector> representations, final OfflineIterable<BitVector, LongArrayBitVector> keys, final LongBigList internalNodeSignatures, final long seed, final boolean left) throws IOException { assert (node.left != null) == (node.right != null); final long parentPathLength = Math.max(0, path.length() - 1); if (node.left != null) { path.append(node.path); labelIntermediateTrie(node.left, path.append(0, 1), delimiters, representations, keys, internalNodeSignatures, seed, true); path.removeBoolean((int)(path.length() - 1)); final long h = Hashes.spooky4(path, seed); final long p = (-1L << Fast.mostSignificantBit(parentPathLength ^ path.length()) & path.length()); assert p <= path.length() : p + " > " + path.length(); assert path.length() == 0 || p > parentPathLength : p + " <= " + parentPathLength; keys.add(LongArrayBitVector.copy(path.subVector(0, p))); representations.add(path.copy()); assert Fast.length(path.length()) <= logW; if (DDDEBUG) System.err.println("Entering " + path + " with key (" + p + "," + path.subVector(0, p).hashCode() + ") " + path.subVector(0, p) + ", signature " + (h & signatureMask) + " and length " + (path.length() & logWMask) + "(value: " + ((h & signatureMask) << logW | (path.length() & logWMask)) + ")"); internalNodeSignatures.add((h & signatureMask) << logW | (path.length() & logWMask)); labelIntermediateTrie(node.right, path.append(1, 1), delimiters, representations, keys, internalNodeSignatures, seed, false); path.length(path.length() - node.path.length() - 1); } else { if (left) delimiters.add(LongArrayBitVector.copy(path.subVector(0, path.lastOne() + 1))); else delimiters.add(LongArrayBitVector.copy(path)); } }
while(iterator.hasNext()) dataBitVector.append(iterator.next()); iterator.close();
rankers.add(LongArrayBitVector.copy(bv).append(1, 1)); final LongArrayBitVector plus1 = LongArrayBitVector.copy(bv); final long lastZero = plus1.lastZero();
private void recToString(final InputBitStream trie, final MutableString printPrefix, final MutableString result, final MutableString path, final int level) throws IOException { final long skip = trie.readLongDelta(); //System.err.println("Called with prefix " + printPrefix); result.append(printPrefix).append('(').append(level).append(')'); final int pathLength = trie.readDelta(); final LongArrayBitVector p = LongArrayBitVector.getInstance(pathLength); for(int i = 0; i < (pathLength + Long.SIZE - 1) / Long.SIZE; i++) { final int size = Math.min(Long.SIZE, pathLength - i * Long.SIZE); p.append(trie.readLong(size), size); } if (skip == 0) return; // Leaf int missing = trie.readDelta(); path.append(p); result.append(" path:").append(p); while(missing-- != 0) result.append('*'); result.append('\n'); trie.readDelta(); // Skip number of leaves in the left subtree path.append('0'); recToString(trie, printPrefix.append('\t').append("0 => "), result, path, level + 1); path.charAt(path.length() - 1, '1'); recToString(trie, printPrefix.replace(printPrefix.length() - 5, printPrefix.length(), "1 => "), result, path, level + 1); path.delete(path.length() - 1, path.length()); printPrefix.delete(printPrefix.length() - 6, printPrefix.length()); //System.err.println("Path now: " + path + " Going to delete from " + (path.length() - n.pathLength)); path.delete(path.length() - pathLength, path.length()); }
private void recToString(final InputBitStream trie, final MutableString printPrefix, final MutableString result, final MutableString path, final int level) throws IOException { final long skip = trie.readLongDelta(); //System.err.println("Called with prefix " + printPrefix); result.append(printPrefix).append('(').append(level).append(')'); final int pathLength = trie.readDelta(); final LongArrayBitVector p = LongArrayBitVector.getInstance(pathLength); for(int i = 0; i < (pathLength + Long.SIZE - 1) / Long.SIZE; i++) { final int size = Math.min(Long.SIZE, pathLength - i * Long.SIZE); p.append(trie.readLong(size), size); } if (skip == 0) return; // Leaf int missing = trie.readDelta(); path.append(p); result.append(" path:").append(p); while(missing-- != 0) result.append('*'); result.append('\n'); trie.readDelta(); // Skip number of leaves in the left subtree path.append('0'); recToString(trie, printPrefix.append('\t').append("0 => "), result, path, level + 1); path.charAt(path.length() - 1, '1'); recToString(trie, printPrefix.replace(printPrefix.length() - 5, printPrefix.length(), "1 => "), result, path, level + 1); path.delete(path.length() - 1, path.length()); printPrefix.delete(printPrefix.length() - 6, printPrefix.length()); //System.err.println("Path now: " + path + " Going to delete from " + (path.length() - n.pathLength)); path.delete(path.length() - pathLength, path.length()); }