Class ByteBufferHashTable


  • public class ByteBufferHashTable
    extends Object
    • Field Detail

      • maxSizeForTesting

        protected final int maxSizeForTesting
      • maxLoadFactor

        protected final float maxLoadFactor
      • initialBuckets

        protected final int initialBuckets
      • bucketSizeWithHash

        protected final int bucketSizeWithHash
      • tableArenaSize

        protected final int tableArenaSize
      • keySize

        protected final int keySize
      • tableStart

        protected int tableStart
      • size

        protected int size
      • regrowthThreshold

        protected int regrowthThreshold
      • maxBuckets

        protected int maxBuckets
      • growthCount

        protected int growthCount
    • Method Detail

      • calculateTableArenaSizeWithPerBucketAdditionalSize

        public static int calculateTableArenaSizeWithPerBucketAdditionalSize​(int bufferCapacity,
                                                                             int bucketSize,
                                                                             int perBucketAdditionalSize)
      • calculateTableArenaSizeWithFixedAdditionalSize

        public static int calculateTableArenaSizeWithFixedAdditionalSize​(int bufferCapacity,
                                                                         int bucketSize,
                                                                         int fixedAdditionalSize)
      • reset

        public void reset()
      • adjustTableWhenFull

        public void adjustTableWhenFull()
      • initializeNewBucketKey

        protected void initializeNewBucketKey​(int bucket,
                                              ByteBuffer keyBuffer,
                                              int keyHash)
      • findBucketWithAutoGrowth

        protected int findBucketWithAutoGrowth​(ByteBuffer keyBuffer,
                                               int keyHash,
                                               Runnable preTableGrowthRunnable)
        Find a bucket for a key, attempting to grow the table with adjustTableWhenFull() if possible.
        Parameters:
        keyBuffer - buffer containing the key
        keyHash - hash of the key
        preTableGrowthRunnable - runnable that executes before the table grows
        Returns:
        bucket number of the found bucket or -1 if a bucket could not be allocated after resizing.
      • findBucket

        protected int findBucket​(boolean allowNewBucket,
                                 int buckets,
                                 ByteBuffer targetTableBuffer,
                                 ByteBuffer keyBuffer,
                                 int keyHash)
        Finds the bucket into which we should insert a key.
        Parameters:
        keyBuffer - key, must have exactly keySize bytes remaining. Will not be modified.
        targetTableBuffer - Need selectable buffer, since when resizing hash table, findBucket() is used on the newly allocated table buffer
        Returns:
        bucket index for this key, or -1 if no bucket is available due to being full
      • canAllowNewBucket

        protected boolean canAllowNewBucket()
      • getOffsetForBucket

        protected int getOffsetForBucket​(int bucket)
      • maxSizeForBuckets

        protected int maxSizeForBuckets​(int buckets)
      • isBucketUsed

        protected boolean isBucketUsed​(int bucket)
      • isOffsetUsed

        protected boolean isOffsetUsed​(int bucketOffset)
      • getTableBuffer

        public ByteBuffer getTableBuffer()
      • getSize

        public int getSize()
      • getRegrowthThreshold

        public int getRegrowthThreshold()
      • getMaxBuckets

        public int getMaxBuckets()
      • getGrowthCount

        public int getGrowthCount()