/** * @param x set of bitmaps we wish to iterate over * @return an array of iterators corresponding to the array of bitmaps */ public static IteratingRLW32[] toIterators( final EWAHCompressedBitmap32... x) { IteratingRLW32[] X = new IteratingRLW32[x.length]; for (int k = 0; k < X.length; ++k) { X[k] = new IteratingBufferedRunningLengthWord32(x[k]); } return X; }
/** * Process the next run */ public void parseNextRun() { if ((this.isLiteral) || (this.iterator.getNumberOfLiteralWords() == 0)) { // no choice, must load next runs this.iterator.discardFirstWords(this.iterator.size()); if (this.iterator.getRunningLength() > 0) { this.endrun += this.iterator .getRunningLength(); this.isLiteral = false; this.value = this.iterator.getRunningBit(); } else if (this.iterator.getNumberOfLiteralWords() > 0) { this.isLiteral = true; this.endrun += this.iterator .getNumberOfLiteralWords(); } else { this.dead = true; } } else { this.isLiteral = true; this.endrun += this.iterator.getNumberOfLiteralWords(); } }
@Override public void discardLiteralWords(int x) { this.iteratingBrlw.discardLiteralWords(x); if (this.iteratingBrlw.getNumberOfLiteralWords() == 0) this.next(); }
/** * @return the beginning of the current run */ public int beginOfRun() { if (this.isLiteral) return this.endrun - this.iterator.getNumberOfLiteralWords(); return (this.endrun - this.iterator.getRunningLength()); }
/** * Write out the remain words, transforming them to zeroes. * * @param container target for writes */ public void dischargeAsEmpty(BitmapStorage32 container) { while (size() > 0) { container.addStreamOfEmptyWords(false, size()); discardFirstWords(size()); } }
final EWAHIterator32 i = a.getEWAHIterator(); final EWAHIterator32 j = getEWAHIterator(); final IteratingBufferedRunningLengthWord32 rlwi = new IteratingBufferedRunningLengthWord32( i); final IteratingBufferedRunningLengthWord32 rlwj = new IteratingBufferedRunningLengthWord32( j); while ((rlwi.size() > 0) && (rlwj.size() > 0)) { while ((rlwi.getRunningLength() > 0) || (rlwj.getRunningLength() > 0)) { final boolean i_is_prey = rlwi .getRunningLength() < rlwj .getRunningLength(); final IteratingBufferedRunningLengthWord32 prey = i_is_prey ? rlwi : rlwj; final IteratingBufferedRunningLengthWord32 predator = i_is_prey ? rlwj : rlwi; final int index = (!predator.getRunningBit()) ? prey.discharge(container, predator.getRunningLength()) : prey.dischargeNegated( container, predator.getRunningLength()); container.addStreamOfEmptyWords(predator.getRunningBit(), predator.getRunningLength() - index ); predator.discardRunningWords(); rlwi.getNumberOfLiteralWords(), rlwj.getNumberOfLiteralWords()); if (nbre_literal > 0) {
int index = 0; while (true) { if (index + getRunningLength() > max) { final int offset = max - index; container.addStreamOfEmptyWords(getRunningBit(), offset); this.brlw.RunningLength -= offset; return max; container.addStreamOfEmptyWords(getRunningBit(), getRunningLength()); index += getRunningLength(); if (getNumberOfLiteralWords() + index > max) { final int offset = max - index; writeLiteralWords(offset, container); this.brlw.RunningLength = 0; this.brlw.NumberOfLiteralWords -= offset; return max; writeLiteralWords(getNumberOfLiteralWords(), container); index += getNumberOfLiteralWords(); if(!next()) break;
/** * Construct a pointer over an IteratingBufferedRunningLengthWord. * * @param previousEndRun word where the previous run ended * @param rw the iterator * @param pos current position (in word) */ public EWAHPointer32(final int previousEndRun, final IteratingBufferedRunningLengthWord32 rw, final int pos) { this.pos = pos; this.iterator = rw; if (this.iterator.getRunningLength() > 0) { this.endrun = previousEndRun + this.iterator.getRunningLength(); this.isLiteral = false; this.value = this.iterator.getRunningBit(); } else if (this.iterator.getNumberOfLiteralWords() > 0) { this.isLiteral = true; this.endrun = previousEndRun + this.iterator.getNumberOfLiteralWords(); } else { this.endrun = previousEndRun; this.dead = true; } }
if (bitmap.sizeInBits() > range) range = bitmap.sizeInBits(); al.add(new IteratingBufferedRunningLengthWord32(bitmap)); int effective = 0; for (int k = 0; k < maxr; ++k) { if (al.get(k).size() > 0) { int eff = IteratorAggregation32 .inplaceor(hardbitmap,
/** * Get the nth literal word for the current running length word * * @param index zero based index * @return the literal word */ @Override public int getLiteralWordAt(int index) { return this.iteratingBrlw.getLiteralWordAt(index); }
@Override public void discardRunningWords() { this.iteratingBrlw.discardRunningWords(); if (this.iteratingBrlw.getNumberOfLiteralWords() == 0) this.next(); }
/** * Move to the next RunningLengthWord * * @return whether the move was possible */ @Override public boolean next() { if (!this.iteratingBrlw.next()) { if (!this.masterIterator.hasNext()) { return false; } else { this.iteratingBrlw = new IteratingBufferedRunningLengthWord32(this.masterIterator.next()); } } return true; }
/** * Write out the remaining words * * @param container target for writes */ public void discharge(BitmapStorage32 container) { // fix the offset this.brlw.literalWordOffset = this.literalWordStartPosition - this.iterator.literalWords(); discharge(this.brlw, this.iterator, container); }
/** * Gets the running bit. *RunningBit * @return the running bit */ @Override public boolean getRunningBit() { return this.iteratingBrlw.getRunningBit(); }
@Override public BufferedIterator32 clone() throws CloneNotSupportedException { BufferedIterator32 answer = (BufferedIterator32) super.clone(); answer.iteratingBrlw = this.iteratingBrlw.clone(); answer.masterIterator = this.masterIterator.clone(); return answer; }
/** * Gets the number of literal words for the current running length word. * * @return the number of literal words */ @Override public int getNumberOfLiteralWords() { return this.iteratingBrlw.getNumberOfLiteralWords(); }
final EWAHIterator32 i = a.getEWAHIterator(); final EWAHIterator32 j = getEWAHIterator(); final IteratingBufferedRunningLengthWord32 rlwi = new IteratingBufferedRunningLengthWord32( i); final IteratingBufferedRunningLengthWord32 rlwj = new IteratingBufferedRunningLengthWord32( j); while ((rlwi.size() > 0) && (rlwj.size() > 0)) { while ((rlwi.getRunningLength() > 0) || (rlwj.getRunningLength() > 0)) { final boolean i_is_prey = rlwi .getRunningLength() < rlwj .getRunningLength(); final IteratingBufferedRunningLengthWord32 prey = i_is_prey ? rlwi : rlwj; final IteratingBufferedRunningLengthWord32 predator = i_is_prey ? rlwj : rlwi; final int index = (!predator.getRunningBit()) ? prey.discharge(container, predator.getRunningLength()) : prey.dischargeNegated( container, predator.getRunningLength()); container.addStreamOfEmptyWords(predator.getRunningBit(), predator.getRunningLength() - index ); predator.discardRunningWords(); rlwi.getNumberOfLiteralWords(), rlwj.getNumberOfLiteralWords()); if (nbre_literal > 0) {
/** * Construct a pointer over an IteratingBufferedRunningLengthWord. * * @param previousEndRun word where the previous run ended * @param rw the iterator * @param pos current position (in word) */ public EWAHPointer32(final int previousEndRun, final IteratingBufferedRunningLengthWord32 rw, final int pos) { this.pos = pos; this.iterator = rw; if (this.iterator.getRunningLength() > 0) { this.endrun = previousEndRun + this.iterator.getRunningLength(); this.isLiteral = false; this.value = this.iterator.getRunningBit(); } else if (this.iterator.getNumberOfLiteralWords() > 0) { this.isLiteral = true; this.endrun = previousEndRun + this.iterator.getNumberOfLiteralWords(); } else { this.endrun = previousEndRun; this.dead = true; } }
if (bitmap.sizeInBits() > range) range = bitmap.sizeInBits(); al.add(new IteratingBufferedRunningLengthWord32(bitmap)); int effective = 0; for (int k = 0; k < maxr; ++k) { if (al.get(k).size() > 0) { int eff = IteratorAggregation32 .inplaceor(hardbitmap,
/** * @return the beginning of the current run */ public int beginOfRun() { if (this.isLiteral) return this.endrun - this.iterator.getNumberOfLiteralWords(); return (this.endrun - this.iterator.getRunningLength()); }