예제 #1
0
 @Override
 public void rehash() {
   super.rehash();
   final int s = size << 1;
   ids = Array.copyOf(ids, s);
   len = Arrays.copyOf(len, s);
 }
예제 #2
0
 /**
  * Indexes the specified keys and values.
  *
  * @param key key
  * @param id id value
  * @return index position
  */
 public int index(final byte[] key, final int id) {
   int i = add(key);
   if (i > 0) {
     ids[i] = new int[] {id};
   } else {
     i = -i;
     final int l = len[i];
     if (l == ids[i].length) ids[i] = Arrays.copyOf(ids[i], l << 1);
     ids[i][l] = id;
   }
   len[i]++;
   return i;
 }
예제 #3
0
  /**
   * Adds values to the index.
   *
   * @param key key to be indexed
   * @param vals sorted values
   */
  void add(final byte[] key, final int... vals) {
    // token index: add values. otherwise, reference existing values
    final int id = type == IndexType.TOKEN ? values.put(key) : values.id(key), vl = vals.length;
    // updatable index: if required, resize existing arrays
    while (idsList.size() < id + 1) idsList.add(null);
    if (lenList.size() < id + 1) lenList.set(id, 0);

    final int len = lenList.get(id), size = len + vl;
    int[] ids = idsList.get(id);
    if (ids == null) {
      ids = vals;
    } else {
      if (ids.length < size) ids = Arrays.copyOf(ids, Array.newSize(size));
      System.arraycopy(vals, 0, ids, len, vl);
      if (ids[len - 1] > vals[0]) {
        if (reorder == null) reorder = new BoolList(values.size());
        reorder.set(id, true);
      }
    }
    idsList.set(id, ids);
    lenList.set(id, size);
  }