protected static int inplaceor(int[] bitmap, IteratingRLW32 i) { int pos = 0; int s; while ((s = i.size()) > 0) { if (pos + s < bitmap.length) { final int L = i.getRunningLength(); if (i.getRunningBit()) java.util.Arrays.fill(bitmap, pos, pos + L, ~0); pos += L; final int LR = i.getNumberOfLiteralWords(); for (int k = 0; k < LR; ++k) bitmap[pos++] |= i.getLiteralWordAt(k); if (!i.next()) { return pos; } } else { int howmany = bitmap.length - pos; int l = i.getRunningLength(); if (pos + l > bitmap.length) { if (i.getRunningBit()) { java.util.Arrays.fill(bitmap, pos, bitmap.length, ~0); } i.discardFirstWords(howmany); return bitmap.length; } if (i.getRunningBit()) java.util.Arrays.fill(bitmap, pos, pos + l, ~0); pos += l; for (int k = 0; pos < bitmap.length; ++k) bitmap[pos++] |= i.getLiteralWordAt(k); i.discardFirstWords(howmany); return pos; } } return pos; }
protected static int inplaceand(int[] bitmap, IteratingRLW32 i) { int pos = 0; int s; while ((s = i.size()) > 0) { if (pos + s < bitmap.length) { final int L = i.getRunningLength(); if (!i.getRunningBit()) { for (int k = pos; k < pos + L; ++k) bitmap[k] = 0; } pos += L; final int LR = i.getNumberOfLiteralWords(); for (int k = 0; k < LR; ++k) bitmap[pos++] &= i.getLiteralWordAt(k); if (!i.next()) { return pos; } } else { int howMany = bitmap.length - pos; int l = i.getRunningLength(); if (pos + l > bitmap.length) { if (!i.getRunningBit()) { for (int k = pos; k < bitmap.length; ++k) bitmap[k] = 0; } i.discardFirstWords(howMany); return bitmap.length; } if (!i.getRunningBit()) for (int k = pos; k < pos + l; ++k) bitmap[k] = 0; pos += l; for (int k = 0; pos < bitmap.length; ++k) bitmap[pos++] &= i.getLiteralWordAt(k); i.discardFirstWords(howMany); return pos; } } return pos; }
/** * Write out the content of the iterator, but as if it were all zeros. * * @param container where we write * @param i the iterator */ protected static void dischargeAsEmpty(final BitmapStorage32 container, final IteratingRLW32 i) { while (i.size() > 0) { container.addStreamOfEmptyWords(false, i.size()); i.next(); } }