----------------------------------------------------------------------
-- |
-- Module : Data.HashTable
-- Copyright : (c) Peter Robinson
-- License : BSD3 (see the file LICENSE)
--
-- Maintainer : Peter Robinson <pwr@lowerbound.io>
-- Stability : provisional
-- Portability : non-portable (requires concurrency, stm)
--
-- You can find benchmarks and more information about the internals of this package here: <https://lowerbound.io/blog/2019-10-24_concurrent_hash_table_performance.html>
--
--
-- Usage Example:
--
-- >> ht <- newWithDefaults 4 -- creates hash table of initial size 4
-- >> insert ht 1 "hello" -- adds key-value pair (1,"hello")
-- >> insert ht 2 "world" -- adds key-value pair (2,"world")
-- >> atomically $ readAssocs ht -- convert to a key-value list
-- > [(1,"hello"),(2,"world")]
-- >> readSizeIO ht -- returns 4
-- >> insert ht 3 "!" -- adds key-value pair (3,"!") and triggers a resize since load/size is ≥ 0.75
-- >> readSizeIO ht -- returns 8
-- >> atomically $ readAssocs ht -- convert to a key-value list
-- > [(1,"hello"),(3,"!"),(2,"world")]
--
--
----------------------------------------------------------------------
module Data.HashTable(
-- * Data Type
HashTable,
Chain,
-- * Construction
new,
newWithDefaults,
mkDefaultConfig,
Config(..),
-- * Atomic Read-Operations
lookup,
readAssocs,
-- * Non-Atomic Read-Operations
readAssocsIO,
-- * Atomic Write-Operations
insert,
add,
update,
modify,
delete,
swapValues,
-- * Utilities
readSizeIO,
readSize,
readLoad,
resize
)
where
import Data.HashTable.Internal
import Prelude hiding (lookup)