private static void addAndCompact()

in processing/src/main/java/org/apache/druid/extendedset/intset/ImmutableConciseSet.java [281:340]


  private static void addAndCompact(IntList set, int wordToAdd)
  {
    int length = set.length();
    if (set.isEmpty()) {
      set.add(wordToAdd);
      return;
    }

    int last = set.get(length - 1);

    int newWord = 0;
    if (ConciseSetUtils.isLiteral(last)) {
      if (ConciseSetUtils.isLiteralWithSingleOneBit(last)) {
        int position = Integer.numberOfTrailingZeros(last) + 1;
        if (ConciseSetUtils.isAllZerosLiteral(wordToAdd)) {
          newWord = 0x00000001 | (position << 25);
        } else if (ConciseSetUtils.isZeroSequence(wordToAdd) && ConciseSetUtils.getFlippedBit(wordToAdd) == -1) {
          newWord = (wordToAdd + 1) | (position << 25);
        }
      } else if (ConciseSetUtils.isAllZerosLiteral(last)) {
        if (ConciseSetUtils.isAllZerosLiteral(wordToAdd)) {
          newWord = 0x00000001;
        } else if (ConciseSetUtils.isZeroSequence(wordToAdd) && ConciseSetUtils.getFlippedBit(wordToAdd) == -1) {
          newWord = wordToAdd + 1;
        }
      } else if (ConciseSetUtils.isLiteralWithSingleZeroBit(last)) {
        int position = Integer.numberOfTrailingZeros(~last) + 1;
        if (ConciseSetUtils.isAllOnesLiteral(wordToAdd)) {
          newWord = 0x40000001 | (position << 25);
        } else if (ConciseSetUtils.isOneSequence(wordToAdd) && ConciseSetUtils.getFlippedBit(wordToAdd) == -1) {
          newWord = (wordToAdd + 1) | (position << 25);
        }
      } else if (ConciseSetUtils.isAllOnesLiteral(last)) {
        if (ConciseSetUtils.isAllOnesLiteral(wordToAdd)) {
          newWord = 0x40000001;
        } else if (ConciseSetUtils.isOneSequence(wordToAdd) && ConciseSetUtils.getFlippedBit(wordToAdd) == -1) {
          newWord = wordToAdd + 1;
        }
      }
    } else if (ConciseSetUtils.isZeroSequence(last)) {
      if (ConciseSetUtils.isAllZerosLiteral(wordToAdd)) {
        newWord = last + 1;
      } else if (ConciseSetUtils.isZeroSequence(wordToAdd) && ConciseSetUtils.getFlippedBit(wordToAdd) == -1) {
        newWord = last + ConciseSetUtils.getSequenceNumWords(wordToAdd);
      }
    } else {
      assert ConciseSetUtils.isOneSequence(last);
      if (ConciseSetUtils.isAllOnesLiteral(wordToAdd)) {
        newWord = last + 1;
      } else if (ConciseSetUtils.isOneSequence(wordToAdd) && ConciseSetUtils.getFlippedBit(wordToAdd) == -1) {
        newWord = last + ConciseSetUtils.getSequenceNumWords(wordToAdd);
      }
    }

    if (newWord != 0) {
      set.set(length - 1, newWord);
    } else {
      set.add(wordToAdd);
    }
  }