-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Various bit twiddling and bitwise serialization primitives -- -- Various bit twiddling and bitwise serialization primitives. @package bits @version 0.5.2 -- | Calculate a number of fiddly bit operations using fast de Bruijn -- multiplication tables. module Data.Bits.Extras class (Num t, FiniteBits t) => Ranked t -- | Calculate the least significant set bit using a debruijn -- multiplication table. NB: The result of this function is -- undefined when given 0. lsb :: Ranked t => t -> Int -- | Calculate the number of trailing 0 bits. rank :: Ranked t => t -> Int -- | Calculate the number of leading zeros. nlz :: Ranked t => t -> Int log2 :: Word32 -> Int -- | Calculate the most significant set bit. msb :: Ranked t => t -> Int w8 :: Integral a => a -> Word8 w16 :: Integral a => a -> Word16 w32 :: Integral a => a -> Word32 w64 :: Integral a => a -> Word64 assignBit :: Bits b => b -> Int -> Bool -> b -- | zeroBits is the value with all bits unset. -- -- The following laws ought to hold (for all valid bit indices -- n): -- --
clearBit zeroBits n == -- zeroBits
setBit zeroBits n == bit -- n
testBit zeroBits n == False
popCount zeroBits == 0
-- putBitsFrom from b = putBits from 0 b --putBitsFrom :: (MonadPut m, Bits b) => Int -> b -> Coding m () instance GHC.Base.Functor (Data.Bits.Coding.Coding m) instance GHC.Base.Monad m => GHC.Base.Applicative (Data.Bits.Coding.Coding m) instance GHC.Base.Monad m => GHC.Base.Monad (Data.Bits.Coding.Coding m) instance Control.Monad.Fail.MonadFail m => Control.Monad.Fail.MonadFail (Data.Bits.Coding.Coding m) instance (GHC.Base.Monad m, GHC.Base.Alternative m) => GHC.Base.Alternative (Data.Bits.Coding.Coding m) instance GHC.Base.MonadPlus m => GHC.Base.MonadPlus (Data.Bits.Coding.Coding m) instance Control.Monad.Trans.Class.MonadTrans Data.Bits.Coding.Coding instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Data.Bits.Coding.Coding m) instance Control.Monad.Reader.Class.MonadReader e m => Control.Monad.Reader.Class.MonadReader e (Data.Bits.Coding.Coding m) instance Data.Bytes.Get.MonadGet m => Data.Bytes.Get.MonadGet (Data.Bits.Coding.Coding m) instance Data.Bytes.Put.MonadPut m => Data.Bytes.Put.MonadPut (Data.Bits.Coding.Coding m) module Data.Bits.Coded -- | Unaligned codes class Coded c encode :: (Coded c, MonadPut m) => c -> Coding m () encodeMany :: (Coded c, MonadPut m, Foldable t) => t c -> Coding m () decode :: (Coded c, MonadGet m) => Coding m c -- | Unary-coded integers -- --
-- >>> runPutL . runEncode $ encode (Unary 1) >> flush -- "\128" -- -- >>> runPutL . runEncode $ encode (Unary 7) >> flush -- "\254" --newtype Unary n Unary :: n -> Unary n [unUnary] :: Unary n -> n -- | Representation for Elias Gamma and Delta codes. A -- positive integer n is encoded by encoding the position of its -- most significant bit, and then the binary representation of the rest -- of the number. newtype Elias c n Elias :: n -> Elias c n [unElias] :: Elias c n -> n -- | Elias Gamma codes the position of the most significant in -- Unary. type Gamma c = Elias (Unary c) -- | Elias Delta codes the position of the most significant bit in Elias -- Gamma. type Delta c n = Elias (Gamma c n) n runEncode :: MonadPut m => Coding m () -> m () runDecode :: MonadGet m => Coding m a -> m a instance GHC.Enum.Enum n => GHC.Enum.Enum (Data.Bits.Coded.Elias c n) instance GHC.Real.Integral n => GHC.Real.Integral (Data.Bits.Coded.Elias c n) instance GHC.Real.Real n => GHC.Real.Real (Data.Bits.Coded.Elias c n) instance GHC.Num.Num n => GHC.Num.Num (Data.Bits.Coded.Elias c n) instance GHC.Show.Show n => GHC.Show.Show (Data.Bits.Coded.Elias c n) instance GHC.Read.Read n => GHC.Read.Read (Data.Bits.Coded.Elias c n) instance GHC.Classes.Ord n => GHC.Classes.Ord (Data.Bits.Coded.Elias c n) instance GHC.Classes.Eq n => GHC.Classes.Eq (Data.Bits.Coded.Elias c n) instance GHC.Enum.Enum n => GHC.Enum.Enum (Data.Bits.Coded.Unary n) instance GHC.Real.Real n => GHC.Real.Real (Data.Bits.Coded.Unary n) instance GHC.Real.Integral n => GHC.Real.Integral (Data.Bits.Coded.Unary n) instance GHC.Num.Num n => GHC.Num.Num (Data.Bits.Coded.Unary n) instance GHC.Show.Show n => GHC.Show.Show (Data.Bits.Coded.Unary n) instance GHC.Read.Read n => GHC.Read.Read (Data.Bits.Coded.Unary n) instance GHC.Classes.Ord n => GHC.Classes.Ord (Data.Bits.Coded.Unary n) instance GHC.Classes.Eq n => GHC.Classes.Eq (Data.Bits.Coded.Unary n) instance (Data.Bits.Coded.Coded c, GHC.Real.Integral c, Data.Bits.Extras.Ranked n) => Data.Bits.Coded.Coded (Data.Bits.Coded.Elias c n) instance GHC.Real.Integral n => Data.Bits.Coded.Coded (Data.Bits.Coded.Unary n)