stm-containers-0.1.0: library/STMContainers/HAMT/Level.hs
module STMContainers.HAMT.Level where
import STMContainers.Prelude hiding (mask)
-- |
-- A depth level of a node.
-- Must be a multiple of the 'step' value.
type Level = Int
{-# INLINE hashIndex #-}
hashIndex :: Level -> (Int -> Int)
hashIndex l i = mask .&. unsafeShiftR i l
{-# INLINE mask #-}
mask :: Int
mask = bit step - 1
{-# INLINE step #-}
step :: Int
step = 5
{-# INLINE limit #-}
limit :: Int
limit = bitSize (undefined :: Int)
{-# INLINE succ #-}
succ :: Level -> Level
succ = (+ step)