コード例 #1
0
 /**
  * Compute the first few words of the XOR aggregate between two iterators.
  *
  * @param container where to write
  * @param desiredrlwcount number of words to be written (max)
  * @param rlwi first iterator to aggregate
  * @param rlwj second iterator to aggregate
  */
 public static void xorToContainer(
     final BitmapStorage32 container,
     int desiredrlwcount,
     final IteratingRLW32 rlwi,
     IteratingRLW32 rlwj) {
   while ((rlwi.size() > 0) && (rlwj.size() > 0) && (desiredrlwcount-- > 0)) {
     while ((rlwi.getRunningLength() > 0) || (rlwj.getRunningLength() > 0)) {
       final boolean i_is_prey = rlwi.getRunningLength() < rlwj.getRunningLength();
       final IteratingRLW32 prey = i_is_prey ? rlwi : rlwj;
       final IteratingRLW32 predator = i_is_prey ? rlwj : rlwi;
       if (!predator.getRunningBit()) {
         int index = discharge(container, prey, predator.getRunningLength());
         container.addStreamOfEmptyWords(false, predator.getRunningLength() - index);
         predator.discardFirstWords(predator.getRunningLength());
       } else {
         int index = dischargeNegated(container, prey, predator.getRunningLength());
         container.addStreamOfEmptyWords(true, predator.getRunningLength() - index);
         predator.discardFirstWords(predator.getRunningLength());
       }
     }
     final int nbre_literal =
         Math.min(rlwi.getNumberOfLiteralWords(), rlwj.getNumberOfLiteralWords());
     if (nbre_literal > 0) {
       desiredrlwcount -= nbre_literal;
       for (int k = 0; k < nbre_literal; ++k)
         container.addWord(rlwi.getLiteralWordAt(k) ^ rlwj.getLiteralWordAt(k));
       rlwi.discardFirstWords(nbre_literal);
       rlwj.discardFirstWords(nbre_literal);
     }
   }
 }
コード例 #2
0
 /**
  * Write out up to max 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 discharge(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;
 }
コード例 #3
0
 /**
  * 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();
   }
 }