@Override public void dispatch(BitmapStorage32 out, int runBegin, int runend) { final int runLength = runend - runBegin; if (this.hammingWeight >= this.min) { out.addStreamOfEmptyWords(true, runLength); } else if (this.litWeight + this.hammingWeight < this.min) { out.addStreamOfEmptyWords(false, runLength); } else { final int deficit = this.min - this.hammingWeight; if (deficit == 1) { orLiterals(out, runBegin, runLength); return; } this.bufferUsed = this.getNumberOfLiterals(); if (this.bufferUsed == deficit) { andLiterals(out, runBegin, runLength); } else { generalLiterals(deficit, out, runBegin, runLength); } } }
/** * write the first N literal words to the target bitmap. Does not * discard the words or perform iteration. * * @param numWords number of words to be written * @param container where we write the data */ public void writeLiteralWords(int numWords, BitmapStorage32 container) { container.addStreamOfLiteralWords(this.buffer, this.literalWordStartPosition, numWords); }
/** * write the first N literal words (negated) to the target bitmap. Does * not discard the words or perform iteration. * * @param numWords number of words to be written * @param container where we write the data */ public void writeNegatedLiteralWords(int numWords, BitmapStorage32 container) { container.addStreamOfNegatedLiteralWords(this.buffer, this.literalWordStartPosition, numWords); }
container.addWord(hardbitmap[k]); Arrays.fill(hardbitmap, 0); container.setSizeInBitsWithinLastWord(range);
container.clear(); final EWAHIterator32 i = a.getEWAHIterator(); final EWAHIterator32 j = getEWAHIterator(); : rlwi; if (!predator.getRunningBit()) { container.addStreamOfEmptyWords(false, predator.getRunningLength()); prey.discardFirstWords(predator container, predator.getRunningLength()); container.addStreamOfEmptyWords(false, predator.getRunningLength() - index if (nbre_literal > 0) { for (int k = 0; k < nbre_literal; ++k) container.addWord(rlwi.getLiteralWordAt(k) & rlwj.getLiteralWordAt(k)); rlwi.discardLiteralWords(nbre_literal); container.setSizeInBitsWithinLastWord(Math.max(sizeInBits(), a.sizeInBits()));
/** * Turn an iterator into a bitmap * * @param i iterator we wish to materialize * @param c where we write */ public static void materialize(final IteratingRLW32 i, final BitmapStorage32 c) { while (true) { if (i.getRunningLength() > 0) { c.addStreamOfEmptyWords(i.getRunningBit(), i.getRunningLength()); } int il = i.getNumberOfLiteralWords(); for (int k = 0; k < il ; ++k) c.addWord(i.getLiteralWordAt(k)); if (!i.next()) break; } }
private void andLiterals(final BitmapStorage32 out, final int runBegin, final int runLength) { for (int i = 0; i < runLength; ++i) { int w = ~0; for (EWAHPointer32 r : this.getLiterals()) { w &= r.iterator.getLiteralWordAt(i + runBegin - r.beginOfRun()); } out.addWord(w); } }
/** * For internal use. (One could use the non-static discharge method * instead, but we expect them to be slower.) * * @param initialWord the initial word * @param iterator the iterator * @param container the container */ protected static void discharge( final BufferedRunningLengthWord32 initialWord, final EWAHIterator32 iterator, final BitmapStorage32 container) { BufferedRunningLengthWord32 runningLengthWord = initialWord; for (; ; ) { final int runningLength = runningLengthWord .getRunningLength(); container.addStreamOfEmptyWords( runningLengthWord.getRunningBit(), runningLength); container.addStreamOfLiteralWords(iterator.buffer(), iterator.literalWords() + runningLengthWord.literalWordOffset, runningLengthWord.getNumberOfLiteralWords() ); if (!iterator.hasNext()) break; runningLengthWord = new BufferedRunningLengthWord32( iterator.next()); } }
@Override public void symmetric(UpdateableBitmapFunction32 f, BitmapStorage32 out, EWAHCompressedBitmap32... set) { out.clear(); final PriorityQ<EWAHPointer32> h = new PriorityQ<EWAHPointer32>( set.length, new Comparator<EWAHPointer32>() {
container.clear(); final EWAHIterator32 i = a.getEWAHIterator(); final EWAHIterator32 j = getEWAHIterator(); : rlwi; if (!predator.getRunningBit()) { container.addStreamOfEmptyWords(false, predator.getRunningLength()); prey.discardFirstWords(predator container, predator.getRunningLength()); container.addStreamOfEmptyWords(false, predator.getRunningLength() - index if (nbre_literal > 0) { for (int k = 0; k < nbre_literal; ++k) container.addWord(rlwi.getLiteralWordAt(k) & rlwj.getLiteralWordAt(k)); rlwi.discardFirstWords(nbre_literal); container.setSizeInBitsWithinLastWord(Math.max(sizeInBits(), a.sizeInBits()));
/** * Turn an iterator into a bitmap * * @param i iterator we wish to materialize * @param c where we write */ public static void materialize(final IteratingRLW32 i, final BitmapStorage32 c) { while (true) { if (i.getRunningLength() > 0) { c.addStreamOfEmptyWords(i.getRunningBit(), i.getRunningLength()); } int il = i.getNumberOfLiteralWords(); for (int k = 0; k < il ; ++k) c.addWord(i.getLiteralWordAt(k)); if (!i.next()) break; } }
container.addWord(hardbitmap[k]); Arrays.fill(hardbitmap, 0); container.setSizeInBitsWithinLastWord(range);
private void andLiterals(final BitmapStorage32 out, final int runBegin, final int runLength) { for (int i = 0; i < runLength; ++i) { int w = ~0; for (EWAHPointer32 r : this.getLiterals()) { w &= r.iterator.getLiteralWordAt(i + runBegin - r.beginOfRun()); } out.addWord(w); } }
/** * For internal use. (One could use the non-static discharge method * instead, but we expect them to be slower.) * * @param initialWord the initial word * @param iterator the iterator * @param container the container */ protected static void discharge( final BufferedRunningLengthWord32 initialWord, final EWAHIterator32 iterator, final BitmapStorage32 container) { BufferedRunningLengthWord32 runningLengthWord = initialWord; for (; ; ) { final int runningLength = runningLengthWord .getRunningLength(); container.addStreamOfEmptyWords( runningLengthWord.getRunningBit(), runningLength); container.addStreamOfLiteralWords(iterator.buffer(), iterator.literalWords() + runningLengthWord.literalWordOffset, runningLengthWord.getNumberOfLiteralWords() ); if (!iterator.hasNext()) break; runningLengthWord = new BufferedRunningLengthWord32( iterator.next()); } }
@Override public void symmetric(UpdateableBitmapFunction32 f, BitmapStorage32 out, EWAHCompressedBitmap32... set) { out.clear(); final PriorityQ<EWAHPointer32> h = new PriorityQ<EWAHPointer32>( set.length, new Comparator<EWAHPointer32>() {
container.clear(); final EWAHIterator32 i = a.getEWAHIterator(); final EWAHIterator32 j = getEWAHIterator(); : rlwi; if (predator.getRunningBit()) { container.addStreamOfEmptyWords(true, predator.getRunningLength()); prey.discardFirstWords(predator final int index = prey.discharge(container, predator.getRunningLength()); container.addStreamOfEmptyWords(false, predator.getRunningLength() - index if (nbre_literal > 0) { for (int k = 0; k < nbre_literal; ++k) { container.addWord(rlwi.getLiteralWordAt(k) | rlwj.getLiteralWordAt(k)); : rlwj; remaining.discharge(container); container.setSizeInBitsWithinLastWord(Math.max(sizeInBits(), a.sizeInBits()));
/** * Write out up to max negated words, returns how many were written * * @param container target for writes * @param i source of data * @param max maximal number of writes * @return how many written */ protected static int dischargeNegated(final BitmapStorage32 container, IteratingRLW32 i, int max) { int counter = 0; while (i.size() > 0 && counter < max) { int l1 = i.getRunningLength(); if (l1 > 0) { if (l1 + counter > max) l1 = max - counter; container.addStreamOfEmptyWords(i.getRunningBit(), l1); counter += l1; } int l = i.getNumberOfLiteralWords(); if (l + counter > max) l = max - counter; for (int k = 0; k < l; ++k) { container.addWord(i.getLiteralWordAt(k)); } counter += l; i.discardFirstWords(l + l1); } return counter; }
container.addWord(hardbitmap[k]); Arrays.fill(hardbitmap, 0); container.setSizeInBitsWithinLastWord(range);
@Override public void dispatch(BitmapStorage32 out, int runBegin, int runend) { final int runLength = runend - runBegin; if (this.hammingWeight >= this.min) { out.addStreamOfEmptyWords(true, runLength); } else if (this.litWeight + this.hammingWeight < this.min) { out.addStreamOfEmptyWords(false, runLength); } else { final int deficit = this.min - this.hammingWeight; if (deficit == 1) { orLiterals(out, runBegin, runLength); return; } this.bufferUsed = this.getNumberOfLiterals(); if (this.bufferUsed == deficit) { andLiterals(out, runBegin, runLength); } else { generalLiterals(deficit, out, runBegin, runLength); } } }
private void orLiterals(final BitmapStorage32 out, final int runBegin, final int runLength) { for (int i = 0; i < runLength; ++i) { int w = 0; for (EWAHPointer32 r : this.getLiterals()) { w |= r.iterator.getLiteralWordAt(i + runBegin - r.beginOfRun()); } out.addWord(w); } }