Copyright | (c) 2010 Jasper Van der Jeugt & Simon Meier Original serialization code from 'Data.Binary.Builder': (c) Lennart Kolmodin, Ross Patterson |
---|---|
License | BSD3-style (see LICENSE) |
Maintainer | Simon Meier <iridcode@gmail.com> |
Stability | experimental |
Portability | tested on GHC only |
Safe Haskell | None |
Language | Haskell98 |
Write
s and Builder
s for serializing words.
Note that for serializing a three tuple (x,y,z)
of bytes (or other word
values) you should use the expression
fromWrite $ writeWord8 x `mappend` writeWord8 y `mappend` writeWord z
instead of
fromWord8 x `mappend` fromWord8 y `mappend` fromWord z
The first expression will result in a single atomic write of three bytes, while the second expression will check for each byte, if there is free space left in the output buffer. Coalescing these checks can improve performance quite a bit, as long as you use it sensibly.
- writeWord8 :: Word8 -> Write
- writeWord16be :: Word16 -> Write
- writeWord32be :: Word32 -> Write
- writeWord64be :: Word64 -> Write
- writeWord16le :: Word16 -> Write
- writeWord32le :: Word32 -> Write
- writeWord64le :: Word64 -> Write
- writeWordhost :: Word -> Write
- writeWord16host :: Word16 -> Write
- writeWord32host :: Word32 -> Write
- writeWord64host :: Word64 -> Write
- fromWord8 :: Word8 -> Builder
- fromWord8s :: [Word8] -> Builder
- fromWord16be :: Word16 -> Builder
- fromWord32be :: Word32 -> Builder
- fromWord64be :: Word64 -> Builder
- fromWord32sbe :: [Word32] -> Builder
- fromWord16sbe :: [Word16] -> Builder
- fromWord64sbe :: [Word64] -> Builder
- fromWord16le :: Word16 -> Builder
- fromWord32le :: Word32 -> Builder
- fromWord64le :: Word64 -> Builder
- fromWord16sle :: [Word16] -> Builder
- fromWord32sle :: [Word32] -> Builder
- fromWord64sle :: [Word64] -> Builder
- fromWordhost :: Word -> Builder
- fromWord16host :: Word16 -> Builder
- fromWord32host :: Word32 -> Builder
- fromWord64host :: Word64 -> Builder
- fromWordshost :: [Word] -> Builder
- fromWord16shost :: [Word16] -> Builder
- fromWord32shost :: [Word32] -> Builder
- fromWord64shost :: [Word64] -> Builder
Writing words to a buffer
writeWord8 :: Word8 -> Write Source
Write a single byte.
Big-endian writes
writeWord16be :: Word16 -> Write Source
Write a Word16
in big endian format.
writeWord32be :: Word32 -> Write Source
Write a Word32
in big endian format.
writeWord64be :: Word64 -> Write Source
Write a Word64
in big endian format.
Little-endian writes
writeWord16le :: Word16 -> Write Source
Write a Word16
in little endian format.
writeWord32le :: Word32 -> Write Source
Write a Word32
in little endian format.
writeWord64le :: Word64 -> Write Source
Write a Word64
in little endian format.
Host-endian writes
writeWordhost :: Word -> Write Source
writeWord16host :: Word16 -> Write Source
Write a Word16
in native host order and host endianness.
writeWord32host :: Word32 -> Write Source
Write a Word32
in native host order and host endianness.
writeWord64host :: Word64 -> Write Source
Write a Word64
in native host order and host endianness.
Creating builders from words
We provide serialization functions both for singleton words as well as
for lists of words. Using these list serialization functions is much faster
than using mconcat . map fromWord<n>
, as the list serialization
functions use a tighter inner loop.
fromWord8s :: [Word8] -> Builder Source
Serialize a list of bytes.
Big-endian serialization
fromWord16be :: Word16 -> Builder Source
Serialize a Word16
in big endian format.
fromWord32be :: Word32 -> Builder Source
Serialize a Word32
in big endian format.
fromWord64be :: Word64 -> Builder Source
Serialize a Word64
in big endian format.
fromWord32sbe :: [Word32] -> Builder Source
Serialize a list of Word32
s in big endian format.
fromWord16sbe :: [Word16] -> Builder Source
Serialize a list of Word16
s in big endian format.
fromWord64sbe :: [Word64] -> Builder Source
Serialize a list of Word64
s in big endian format.
Little-endian serialization
fromWord16le :: Word16 -> Builder Source
Serialize a Word16
in little endian format.
fromWord32le :: Word32 -> Builder Source
Serialize a Word32
in little endian format.
fromWord64le :: Word64 -> Builder Source
Serialize a Word64
in little endian format.
fromWord16sle :: [Word16] -> Builder Source
Serialize a list of Word16
s in little endian format.
fromWord32sle :: [Word32] -> Builder Source
Serialize a list of Word32
s in little endian format.
fromWord64sle :: [Word64] -> Builder Source
Serialize a list of Word64
s in little endian format.
Host-endian serialization
fromWordhost :: Word -> Builder Source
Serialize a single native machine Word
. The Word
is serialized in host
order, host endian form, for the machine you're on. On a 64 bit machine the
Word
is an 8 byte value, on a 32 bit machine, 4 bytes. Values written this
way are not portable to different endian or word sized machines, without
conversion.
fromWord16host :: Word16 -> Builder Source
Write a Word16
in native host order and host endianness.
fromWord32host :: Word32 -> Builder Source
Write a Word32
in native host order and host endianness.
fromWord64host :: Word64 -> Builder Source
Write a Word64
in native host order and host endianness.
fromWordshost :: [Word] -> Builder Source
Serialize a list of Word
s.
See fromWordhost
for usage considerations.
fromWord16shost :: [Word16] -> Builder Source
Write a list of Word16
s in native host order and host endianness.
fromWord32shost :: [Word32] -> Builder Source
Write a list of Word32
s in native host order and host endianness.
fromWord64shost :: [Word64] -> Builder Source
Write a list of Word64
s in native host order and host endianness.