Sha256: ef1eeb4e85da84c0c048f97df9e4569a71678d0fe1e7b994cad799a4c36a34e1

Contents?: true

Size: 1.2 KB

Versions: 1

Compression:

Stored size: 1.2 KB

Contents

module DataStructures101

    class ChainedHashTable < Hash::BaseHashTable

        def initialize(capacity: 31, prime: 109345121, hash_lambda: nil)
            super
        end

        private

        def bucket_find(hash_code, key)
            bucket = @table[hash_code]
            return nil if bucket.nil?
            
            bucket.find(key)
        end

        def bucket_insert(hash_code, key, value)
            bucket = @table[hash_code]
            bucket = @table[hash_code] = Hash::Bucket.new if bucket.nil?

            old_size = bucket.size()
            old_value = bucket.insert(key, value)
            @size += (bucket.size - old_size)

            old_value
        end

        def bucket_delete(hash_code, key)
            bucket = @table[hash_code]
            return nil if bucket.nil?

            old_size = bucket.size
            value = bucket.delete(key)
            @size -= (old_size - bucket.size)

            value
        end

        def bucket_each
            @table.each do |bucket|
                next if bucket.nil?
                
                bucket.each do |key, value|
                    yield(key, value)
                end
            end
        end
    end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
data_structures_101-0.2.4 lib/data_structures_101/chained_hash_table.rb