Definition of DHashMap.Raw
#
This file defines the type Std.Data.DHashMap.Raw
. All of its functions are defined in the module
Std.Data.DHashMap.Basic
.
Dependent hash maps without a bundled well-formedness invariant, suitable for use in nested
inductive types. The well-formedness invariant is called Raw.WF
. When in doubt, prefer DHashMap
over DHashMap.Raw
. Lemmas about the operations on Std.Data.DHashMap.Raw
are available in the
module Std.Data.DHashMap.RawLemmas
.
The hash table is backed by an Array
. Users should make sure that the hash map is used linearly to
avoid expensive copies.
This is a simple separate-chaining hash table. The data of the hash map consists of a cached size and an array of buckets, where each bucket is a linked list of key-value pais. The number of buckets is always a power of two. The hash map doubles its size upon inserting an element such that the number of elements is more than 75% of the number of buckets.
The hash map uses ==
(provided by the BEq
typeclass) to compare keys and hash
(provided by
the Hashable
typeclass) to hash them. To ensure that the operations behave as expected, ==
should be an equivalence relation and a == b
should imply hash a = hash b
(see also the
EquivBEq
and LawfulHashable
typeclasses). Both of these conditions are automatic if the BEq
instance is lawful, i.e., if a == b
implies a = b
.
- size : Nat
The number of mappings present in the hash map
- buckets : Array (Std.DHashMap.Internal.AssocList α β)
Internal implementation detail of the hash map