コード例 #1
0
  @Override
  public MappeableContainer flip(short x) {
    if (BufferUtil.isBackedBySimpleArray(this.content)) {
      short[] sarray = content.array();
      int loc = Util.unsignedBinarySearch(sarray, 0, cardinality, x);
      if (loc < 0) {
        // Transform the ArrayContainer to a BitmapContainer
        // when cardinality = DEFAULT_MAX_SIZE
        if (cardinality >= DEFAULT_MAX_SIZE) {
          MappeableBitmapContainer a = this.toBitmapContainer();
          a.add(x);
          return a;
        }
        if (cardinality >= sarray.length) {
          increaseCapacity();
          sarray = content.array();
        }
        // insertion : shift the elements > x by one position to
        // the right
        // and put x in it's appropriate place
        System.arraycopy(sarray, -loc - 1, sarray, -loc, cardinality + loc + 1);
        sarray[-loc - 1] = x;
        ++cardinality;
      } else {
        System.arraycopy(sarray, loc + 1, sarray, loc, cardinality - loc - 1);
        --cardinality;
      }
      return this;

    } else {
      int loc = BufferUtil.unsignedBinarySearch(content, 0, cardinality, x);
      if (loc < 0) {
        // Transform the ArrayContainer to a BitmapContainer
        // when cardinality = DEFAULT_MAX_SIZE
        if (cardinality >= DEFAULT_MAX_SIZE) {
          MappeableBitmapContainer a = this.toBitmapContainer();
          a.add(x);
          return a;
        }
        if (cardinality >= content.limit()) {
          increaseCapacity();
        }
        // insertion : shift the elements > x by one position to
        // the right
        // and put x in it's appropriate place
        for (int k = cardinality; k > -loc - 1; --k) content.put(k, content.get(k - 1));
        content.put(-loc - 1, x);
        ++cardinality;
      } else {
        for (int k = loc + 1; k < cardinality; --k) {
          content.put(k - 1, content.get(k));
        }
        --cardinality;
      }
      return this;
    }
  }
コード例 #2
0
 @Override
 public MappeableContainer iadd(int begin, int end) {
   int indexstart = BufferUtil.unsignedBinarySearch(content, 0, cardinality, (short) begin);
   if (indexstart < 0) indexstart = -indexstart - 1;
   int indexend = BufferUtil.unsignedBinarySearch(content, 0, cardinality, (short) (end - 1));
   if (indexend < 0) indexend = -indexend - 1;
   else indexend++;
   int rangelength = end - begin;
   int newcardinality = indexstart + (cardinality - indexend) + rangelength;
   if (newcardinality > DEFAULT_MAX_SIZE) {
     MappeableBitmapContainer a = this.toBitmapContainer();
     return a.iadd(begin, end);
   }
   if (newcardinality >= this.content.limit()) increaseCapacity(newcardinality);
   BufferUtil.arraycopy(
       content, indexend, content, indexstart + rangelength, cardinality - indexend);
   if (BufferUtil.isBackedBySimpleArray(content)) {
     short[] contentarray = content.array();
     for (int k = 0; k < rangelength; ++k) {
       contentarray[k + indexstart] = (short) (begin + k);
     }
   } else {
     for (int k = 0; k < rangelength; ++k) {
       content.put(k + indexstart, (short) (begin + k));
     }
   }
   cardinality = newcardinality;
   return this;
 }
コード例 #3
0
 // in order
 private void emit(short val) {
   if (cardinality == content.limit()) increaseCapacity(true);
   content.put(cardinality++, val);
 }
コード例 #4
0
 private void increaseCapacity() {
   increaseCapacity(false);
 }