Beispiel #1
0
    /**
     * Removes a point from given bucket.
     *
     * @param bucket the bucket number.
     * @param point the index of point.
     * @return true if the point was in the bucket.
     */
    boolean remove(int bucket, int point) {
      for (BucketEntry b : entry) {
        if (b.bucket == bucket) {
          return b.remove(point);
        }
      }

      return false;
    }
Beispiel #2
0
 public long get(int key) {
   int bucket = indexFor(key, _buckets.length);
   for (BucketEntry e = _buckets[bucket]; e != null; e = e.next) {
     if (key == e.key) {
       e.recordAccess(this);
       return e.value;
     }
   }
   return -1;
 }
Beispiel #3
0
    /**
     * Adds a point to given bucket.
     *
     * @param bucket the bucket number.
     * @param point the index of point.
     */
    void add(int bucket, int point) {
      for (BucketEntry b : entry) {
        if (b.bucket == bucket) {
          b.add(point);
          return;
        }
      }

      BucketEntry b = new BucketEntry(bucket);
      b.add(point);
      entry.add(b);
    }
Beispiel #4
0
 public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
   this.key = in.readInt();
   this.value = in.readLong();
   boolean hasNext = in.readBoolean();
   BucketEntry cur = this;
   while (hasNext) {
     int k = in.readInt();
     long v = in.readLong();
     BucketEntry n = new BucketEntry(k, v);
     cur.next = n;
     cur = n;
     hasNext = in.readBoolean();
   }
 }
Beispiel #5
0
 private void rehash(BucketEntry[] newTable) {
   int oldsize = _buckets.length;
   int newsize = newTable.length;
   for (int i = 0; i < oldsize; i++) {
     BucketEntry oldEntry = _buckets[i];
     while (oldEntry != null) {
       BucketEntry e = oldEntry;
       oldEntry = oldEntry.next;
       int bucket = indexFor(e.key, newsize);
       e.next = newTable[bucket];
       newTable[bucket] = e;
     }
   }
 }
Beispiel #6
0
 /**
  * Put an entry for the given key number. If one already exists, old value is replaced.
  *
  * @return old value for the given key. if not found, return -1.
  */
 public long put(int key, long value) {
   assert (value != -1L);
   int bucket = indexFor(key, _buckets.length);
   // find an entry
   BucketEntry e;
   for (e = _buckets[bucket]; e != null; e = e.next) {
     if (key == e.key) {
       long replaced = e.value;
       e.value = value;
       e.recordAccess(this);
       return replaced; // found
     }
   }
   // if not found, create a new entry.
   addEntry(bucket, key, value, _buckets[bucket]);
   return -1L;
 }
Beispiel #7
0
 public long remove(int key) {
   final int bucket = indexFor(key, _buckets.length);
   // find an entry
   BucketEntry e, prev = null;
   for (e = _buckets[bucket]; e != null; prev = e, e = e.next) {
     if (key == e.key) {
       if (prev != null) {
         prev.next = e.next;
       } else {
         _buckets[bucket] = e.next;
       }
       --_size;
       e.recordRemoval(this);
       return e.value;
     }
   }
   return -1;
 }