-- 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.3 -- | 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): -- -- -- -- This method uses clearBit (bit 0) 0 as its -- default implementation (which ought to be equivalent to -- zeroBits for types which possess a 0th bit). zeroBits :: Bits a => a oneBits :: Bits b => b -- | Shift Right Logical (i.e., without sign extension) -- -- NB: When used on negative Integers, hilarity may ensue. srl :: Bits b => b -> Int -> b instance Data.Bits.Extras.Ranked GHC.Word.Word64 instance Data.Bits.Extras.Ranked GHC.Word.Word32 instance Data.Bits.Extras.Ranked GHC.Word.Word16 instance Data.Bits.Extras.Ranked GHC.Word.Word8 instance Data.Bits.Extras.Ranked GHC.Int.Int64 instance Data.Bits.Extras.Ranked GHC.Int.Int32 instance Data.Bits.Extras.Ranked GHC.Int.Int16 instance Data.Bits.Extras.Ranked GHC.Int.Int8 module Data.Bits.Coding newtype Coding m a Coding :: (forall r. (a -> Int -> Word8 -> m r) -> Int -> Word8 -> m r) -> Coding m a [runCoding] :: Coding m a -> forall r. (a -> Int -> Word8 -> m r) -> Int -> Word8 -> m r -- | Get something from byte-aligned storage, starting on the next -- byte and discarding any left over bits in the buffer. -- -- NB: Using any operation from MonadGet other than -- checking remaining or isEmpty will implicitly perform -- this operation. getAligned :: MonadGet m => m a -> Coding m a -- | Get a single bit, consuming an entire byte if the -- bit buffer is empty getBit :: MonadGet m => Coding m Bool getBits :: (MonadGet m, Bits b) => Int -> Int -> b -> Coding m b getBitsFrom :: (MonadGet m, Bits b) => Int -> b -> Coding m b -- | Emit any remaining contents from the bit buffer. -- -- Any use of the combinators from MonadPut (including -- flush) will cause this to happen. putAligned :: MonadPut m => m a -> Coding m a -- | Put all the bits without a flush putUnaligned :: (MonadPut m, FiniteBits b) => b -> Coding m () -- | Put a single bit, emitting an entire byte if the bit -- buffer is full putBit :: MonadPut m => Bool -> Coding m () -- | Put a (closed) range of bits putBits :: (MonadPut m, Bits b) => Int -> Int -> b -> Coding m () -- |
--   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.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 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 (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)