binary-strict-0.4.8.1: Binary deserialisation using strict ByteStrings

CopyrightAdam Langley
LicenseBSD3-style (see LICENSE)
MaintainerAdam Langley <agl@imperialviolet.org>
Stabilityexperimental
Safe HaskellNone
LanguageHaskell98

Data.Binary.Strict.BitGet

Contents

Description

This is a reader monad for parsing bit-aligned data. The usual Get monad handles byte aligned data well.

In this monad, the current offset into the input is a number of bits, and fetching n bits from the current position will shift everything correctly. Bit vectors are represented as ByteStrings here either the first n bits are valid (left aligned) or the last n bits are (right aligned).

If one is looking to parse integers etc, right alignment is the easist to work with, however left alignment makes more sense in some situations.

Synopsis

Get BitGet type

data BitGet a Source

Instances

runBitGet :: ByteString -> BitGet a -> Either String a Source

Run a BitGet on a ByteString

Utility

skip :: Int -> BitGet () Source

Skip n bits of the input. Fails if less then n bits remain

remaining :: BitGet Int Source

Return the number of bits remaining to be parsed

isEmpty :: BitGet Bool Source

Return true if there are no more bits to parse

lookAhead :: BitGet a -> BitGet a Source

Run ga, but return without consuming its input. Fails if ga fails.

Generic parsing

getBit :: BitGet Bool Source

Get a single bit from the input

getLeftByteString :: Int -> BitGet ByteString Source

Get a ByteString with the given number of bits, left aligned.

getRightByteString :: Int -> BitGet ByteString Source

Get a ByteString with the given number of bits in, right aligned.

Interpreting some number of bits as an integer

getAsWord16 :: Int -> BitGet Word16 Source

Read a Word16 in big endian format

getAsWord32 :: Int -> BitGet Word32 Source

Read a Word32 in big endian format

getAsWord64 :: Int -> BitGet Word64 Source

Read a Word64 in big endian format

Parsing particular types