data-layout-0.1.0.0: src/Data/Layout/Internal.hs
-- | /Use the internal representation of layouts at your own risk./
--
-- The smart constructors in "Data.Layout.Language" enforce the
-- documented invariants for `Layout`. The library has undefined
-- behavior if these invariants are violated.
--
-- The recommended way to use this library is to import "Data.Layout".
module Data.Layout.Internal where
-- | Size in bytes.
type Bytes = Int
-- | Number of repetitions.
type Reps = Int
-- | Describes the binary layout of a set of data.
data Layout =
-- | A value with a known format.
Value ValueFormat
-- | Skip 'n' bytes in to a struct.
-- /The offset must be 1 or more bytes./
| Offset Bytes Layout
-- | A struct which is 'n' bytes in size.
-- /The size of the struct must be larger than that of the field layout it wraps./
| Group Bytes Layout
-- | An array with 'n' elements.
-- /An array must have 2 or more elements./
| Repeat Reps Layout
deriving (Eq, Show)
-- | The size and byte order of a value.
data ValueFormat =
Word8 -- ^ 8-bit word.
| Word16le -- ^ 16-bit word, little endian.
| Word32le -- ^ 32-bit word, little endian.
| Word64le -- ^ 64-bit word, little endian.
| Word16be -- ^ 16-bit word, big endian.
| Word32be -- ^ 32-bit word, big endian.
| Word64be -- ^ 64-bit word, big endian.
deriving (Eq, Show)
-- | The byte order of a value.
data ByteOrder =
NoByteOrder -- ^ The word is only one byte in size.
| LittleEndian -- ^ The least significant byte is first in the word.
| BigEndian -- ^ The most significant byte is first in the word.
deriving (Eq, Show)