module Data.BitArray.Immutable where -------------------------------------------------------------------------------- import Data.Word import Data.Bits import Data.Array.Unboxed -------------------------------------------------------------------------------- -- | A packed bit array. -- Internally, it is represented as an unboxed array of 'Word64'-s. data BitArray = A { _first :: {-# UNPACK #-} !Int , _last :: {-# UNPACK #-} !Int , _words :: {-# UNPACK #-} !(UArray Int Word64) } -------------------------------------------------------------------------------- ind :: Int -> (Int,Int) ind i = (k,l) where k = i `shiftR` 6 l = i - k `shiftL` 6 -------------------------------------------------------------------------------- {-# SPECIALIZE intToBool :: Int -> Bool #-} intToBool :: Integral a => a -> Bool intToBool n = case n of 0 -> False _ -> True {-# SPECIALIZE boolToInt :: Bool -> Int #-} boolToInt :: Integral a => Bool -> a boolToInt b = case b of False -> 0 True -> 1 --------------------------------------------------------------------------------