packages feed

bytehash-0.1.1.2: src/Data/Bytes/HashMap/Internal.hs

{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE DerivingStrategies #-}

module Data.Bytes.HashMap.Internal
  ( Map (..)
  ) where

import Data.Int (Int32)
import Data.Primitive (ByteArray, PrimArray, SmallArray)
import Data.Primitive.Unlifted.Array (UnliftedArray)

{- | A static perfect hash table where the keys are byte arrays. This
  table cannot be updated after its creation, but all lookups have
  guaranteed O(1) worst-case cost. It consumes linear space. This
  is an excellent candidate for use with compact regions.
-}
data Map v
  = Map
      !ByteArray -- top-level entropy
      !(UnliftedArray ByteArray) -- entropies
      !(PrimArray Int32) -- offset to apply to hash, could probably be 32 bits
      !(UnliftedArray ByteArray) -- keys
      !(SmallArray v) -- values
  deriving stock (Functor, Foldable, Traversable)