network-byte-order-0.1.6: Network byte order utilities
Safe Haskell None
Language Haskell2010

Network.ByteOrder

Description

Peek and poke functions for network byte order.

Synopsis

Types

type Offset = Int Source #

Offset from the current pointer.

type BufferSize = Int Source #

Size of a buffer.

Poking

poke8 :: Word8 -> Buffer -> Offset -> IO () Source #

>>> let buf = pack [1,2,3,4]
>>> unsafeWithByteString buf (poke8 0)
>>> unpack buf
[0,2,3,4]

poke16 :: Word16 -> Buffer -> Offset -> IO () Source #

>>> let buf = pack [1,2,3,4]
>>> unsafeWithByteString buf (poke16 (7*256 + 8))
>>> unpack buf
[7,8,3,4]

poke24 :: Word32 -> Buffer -> Offset -> IO () Source #

>>> let buf = pack [1,2,3,4]
>>> unsafeWithByteString buf (poke24 (6*65536 + 7*256 + 8))
>>> unpack buf
[6,7,8,4]

poke32 :: Word32 -> Buffer -> Offset -> IO () Source #

>>> let buf = pack [1,2,3,4]
>>> unsafeWithByteString buf (poke32 (6*65536 + 7*256 + 8))
>>> unpack buf
[0,6,7,8]

poke64 :: Word64 -> Buffer -> Offset -> IO () Source #

>>> let buf = pack [1,2,3,4,5,6,7,8]
>>> unsafeWithByteString buf (poke64 (6*65536 + 7*256 + 8))
>>> unpack buf
[0,0,0,0,0,6,7,8]

Peeking

peek8 :: Buffer -> Offset -> IO Word8 Source #

>>> let buf = pack [1,2,3,4]
>>> unsafeWithByteString buf peek8
1

peek16 :: Buffer -> Offset -> IO Word16 Source #

>>> let buf = pack [1,2,3,4]
>>> unsafeWithByteString buf peek16
258

peek24 :: Buffer -> Offset -> IO Word32 Source #

>>> let buf = pack [1,2,3,4]
>>> unsafeWithByteString buf peek24
66051

peek32 :: Buffer -> Offset -> IO Word32 Source #

>>> let buf = pack [1,2,3,4]
>>> unsafeWithByteString buf peek32
16909060

peek64 :: Buffer -> Offset -> IO Word64 Source #

>>> let buf = pack [1,2,3,4,5,6,7,8]
>>> unsafeWithByteString buf peek64
72623859790382856

From Word to ByteString

bytestring8 :: Word8 -> ByteString Source #

>>> let w = 5 :: Word8
>>> unpack $ bytestring8 w
[5]

bytestring16 :: Word16 -> ByteString Source #

>>> let w = foldl' (\x y -> x * 256 + y) 0 [5,6] :: Word16
>>> unpack $ bytestring16 w
[5,6]

bytestring32 :: Word32 -> ByteString Source #

>>> let w = foldl' (\x y -> x * 256 + y) 0 [5,6,7,8] :: Word32
>>> unpack $ bytestring32 w
[5,6,7,8]

bytestring64 :: Word64 -> ByteString Source #

>>> let w = foldl' (\x y -> x * 256 + y) 0 [1,2,3,4,5,6,7,8] :: Word64
>>> unpack $ bytestring64 w
[1,2,3,4,5,6,7,8]

From ByteString to Word

word8 :: ByteString -> Word8 Source #

>>> let buf = pack [1,2,3,4,5,6,7,8]
>>> word8 buf
1

word16 :: ByteString -> Word16 Source #

>>> let buf = pack [1,2,3,4,5,6,7,8]
>>> word16 buf
258

word32 :: ByteString -> Word32 Source #

>>> let buf = pack [1,2,3,4,5,6,7,8]
>>> word32 buf
16909060

word64 :: ByteString -> Word64 Source #

>>> let buf = pack [1,2,3,4,5,6,7,8]
>>> word64 buf
72623859790382856

Utilities

unsafeWithByteString :: ByteString -> ( Buffer -> Offset -> IO a) -> IO a Source #

Using ByteString as Buffer and call the IO action of the second argument by passing the start point and the offset of the ByteString . Note that if a ByteString is created newly, its offset is 0.

copy :: Buffer -> ByteString -> IO Buffer Source #

Copying the bytestring to the buffer. This function returns the point where the next copy should start.

>>> let buf = "abc" :: ByteString
>>> unsafeWithByteString buf $ \ptr _ -> Network.ByteOrder.copy ptr "ABC" >> return buf
"ABC"

bufferIO :: Buffer -> Int -> ( ByteString -> IO a) -> IO a Source #

Converting the part of buffer to ByteString and executing the action with it.

>>> let buf = "abcdef" :: ByteString
>>> unsafeWithByteString buf $ \ptr _-> bufferIO ptr 2 return
"ab"

Class to read a buffer

class Readable a where Source #

Methods

read8 :: a -> IO Word8 Source #

Reading one byte as Word8 and ff one byte.

readInt8 :: a -> IO Int Source #

Reading one byte as Int and ff one byte. If buffer overrun occurs, -1 is returned.

ff :: a -> Offset -> IO () Source #

Fast forward the offset pointer. The boundary is not checked.

remainingSize :: a -> IO Int Source #

Returning the length of the remaining

withCurrentOffSet :: a -> ( Buffer -> IO b) -> IO b Source #

Executing an action on the current offset pointer.

save :: a -> IO () Source #

Memorizing the current offset pointer.

savingSize :: a -> IO Int Source #

Getting how many bytes from the saved offset pinter.

goBack :: a -> IO () Source #

Moving the offset point to the saved point.

Reading from buffer

newReadBuffer :: Buffer -> BufferSize -> IO ReadBuffer Source #

Creating a read buffer with the given buffer.

read16 :: Readable a => a -> IO Word16 Source #

Reading two bytes as Word16 and ff two bytes.

>>> withReadBuffer "\x0\x1\x2\x3" $ read16
1

read24 :: Readable a => a -> IO Word32 Source #

Reading three bytes as Word32 and ff three bytes.

>>> withReadBuffer "\x0\x1\x2\x3" $ read24
258

read32 :: Readable a => a -> IO Word32 Source #

Reading four bytes as Word32 and ff four bytes.

>>> withReadBuffer "\x0\x1\x2\x3" $ read32
66051

read64 :: Readable a => a -> IO Word64 Source #

Reading four bytes as Word64 and ff four bytes.

extractByteString :: Readable a => a -> Int -> IO ByteString Source #

Extracting ByteString from the current offset. The contents is copied, not shared. Its length is specified by the 2nd argument. If the length is positive, the area after the current pointer is extracted and FF the length finally. If the length is negative, the area before the current pointer is extracted and does not FF.

>>> withReadBuffer "abcdefg" $ \rbuf -> ff rbuf 1 >> extractByteString rbuf 2
"bc"

extractShortByteString :: Readable a => a -> Int -> IO ShortByteString Source #

Extracting ShortByteString from the current offset. The contents is copied, not shared. Its length is specified by the 2nd argument. If the length is positive, the area after the current pointer is extracted and FF the length finally. If the length is negative, the area before the current pointer is extracted and does not FF.

>>> withReadBuffer "abcdefg" $ \rbuf -> ff rbuf 2 >> extractShortByteString rbuf 3
"cde"

Writing to buffer

newWriteBuffer :: Buffer -> BufferSize -> IO WriteBuffer Source #

Creating a write buffer with the given buffer.

withWriteBuffer :: BufferSize -> ( WriteBuffer -> IO ()) -> IO ByteString Source #

Allocate a temporary buffer and copy the result to ByteString .

withWriteBuffer' :: BufferSize -> ( WriteBuffer -> IO a) -> IO ( ByteString , a) Source #

Allocate a temporary buffer and copy the result to ByteString with an additional value.

>>> withWriteBuffer' 1 $ \wbuf -> write8 wbuf 65 >> return 'a'
("A",'a')

write8 :: WriteBuffer -> Word8 -> IO () Source #

Write one byte and ff one byte. If buffer overrun occurs, BufferOverrun is thrown.

>>> withWriteBuffer 1 $ \wbuf -> write8 wbuf 65
"A"

write16 :: WriteBuffer -> Word16 -> IO () Source #

Write two bytes and ff one byte. If buffer overrun occurs, BufferOverrun is thrown.

>>> withWriteBuffer 2 $ \wbuf -> write16 wbuf (65 * 256 + 66)
"AB"

write24 :: WriteBuffer -> Word32 -> IO () Source #

Write three bytes and ff one byte. If buffer overrun occurs, BufferOverrun is thrown.

>>> withWriteBuffer 3 $ \wbuf -> write24 wbuf (65 * 256^2 + 66 * 256 + 67)
"ABC"

write32 :: WriteBuffer -> Word32 -> IO () Source #

Write four bytes and ff one byte. If buffer overrun occurs, BufferOverrun is thrown.

>>> withWriteBuffer 4 $ \wbuf -> write32 wbuf (65 * 256^3 + 66 * 256^2 + 67 * 256 + 68)
"ABCD"

write64 :: WriteBuffer -> Word64 -> IO () Source #

Write four bytes and ff one byte. If buffer overrun occurs, BufferOverrun is thrown.

copyByteString :: WriteBuffer -> ByteString -> IO () Source #

Copy the content of ByteString and ff its length. If buffer overrun occurs, BufferOverrun is thrown.

>>> withWriteBuffer 3 $ \wbuf -> copyByteString wbuf "ABC"
"ABC"

copyShortByteString :: WriteBuffer -> ShortByteString -> IO () Source #

Copy the content of ShortByteString and ff its length. If buffer overrun occurs, BufferOverrun is thrown.

>>> withWriteBuffer 5 $ \wbuf -> copyShortByteString wbuf "ABCEF"
"ABCEF"

shiftLastN :: WriteBuffer -> Int -> Int -> IO () Source #

Shifting the N-bytes area just before the current pointer (the 3rd argument). If the second argument is positive, shift it to right. If it is negative, shift it to left. offset moves as if it is sticky to the area.

>>> withWriteBuffer 16 $ \wbuf -> copyByteString wbuf "ABCD" >> shiftLastN wbuf 1 3
"ABBCD"
>>> withWriteBuffer 16 $ \wbuf -> copyByteString wbuf "ABCD" >> shiftLastN wbuf 2 3
"ABCBCD"
>>> withWriteBuffer 16 $ \wbuf -> copyByteString wbuf "ABCDE" >> shiftLastN wbuf (-2) 3 >> ff wbuf 2
"CDEDE"

Re-exporting

data Word8 Source #

8-bit unsigned integer type

Instances

Instances details
Bounded Word8

Since: base-2.1

Instance details

Defined in GHC.Word

Enum Word8

Since: base-2.1

Instance details

Defined in GHC.Word

Eq Word8

Since: base-2.1

Instance details

Defined in GHC.Word

Integral Word8

Since: base-2.1

Instance details

Defined in GHC.Word

Num Word8

Since: base-2.1

Instance details

Defined in GHC.Word

Ord Word8

Since: base-2.1

Instance details

Defined in GHC.Word

Read Word8

Since: base-2.1

Instance details

Defined in GHC.Read

Real Word8

Since: base-2.1

Instance details

Defined in GHC.Word

Show Word8

Since: base-2.1

Instance details

Defined in GHC.Word

Ix Word8

Since: base-2.1

Instance details

Defined in GHC.Word

Storable Word8

Since: base-2.1

Instance details

Defined in Foreign.Storable

Bits Word8

Since: base-2.1

Instance details

Defined in GHC.Word

FiniteBits Word8

Since: base-4.6.0.0

Instance details

Defined in GHC.Word

data Word16 Source #

16-bit unsigned integer type

Instances

Instances details
Bounded Word16

Since: base-2.1

Instance details

Defined in GHC.Word

Enum Word16

Since: base-2.1

Instance details

Defined in GHC.Word

Eq Word16

Since: base-2.1

Instance details

Defined in GHC.Word

Integral Word16

Since: base-2.1

Instance details

Defined in GHC.Word

Num Word16

Since: base-2.1

Instance details

Defined in GHC.Word

Ord Word16

Since: base-2.1

Instance details

Defined in GHC.Word

Read Word16

Since: base-2.1

Instance details

Defined in GHC.Read

Real Word16

Since: base-2.1

Instance details

Defined in GHC.Word

Show Word16

Since: base-2.1

Instance details

Defined in GHC.Word

Ix Word16

Since: base-2.1

Instance details

Defined in GHC.Word

Storable Word16

Since: base-2.1

Instance details

Defined in Foreign.Storable

Bits Word16

Since: base-2.1

Instance details

Defined in GHC.Word

FiniteBits Word16

Since: base-4.6.0.0

Instance details

Defined in GHC.Word

data Word32 Source #

32-bit unsigned integer type

Instances

Instances details
Bounded Word32

Since: base-2.1

Instance details

Defined in GHC.Word

Enum Word32

Since: base-2.1

Instance details

Defined in GHC.Word

Eq Word32

Since: base-2.1

Instance details

Defined in GHC.Word

Integral Word32

Since: base-2.1

Instance details

Defined in GHC.Word

Num Word32

Since: base-2.1

Instance details

Defined in GHC.Word

Ord Word32

Since: base-2.1

Instance details

Defined in GHC.Word

Read Word32

Since: base-2.1

Instance details

Defined in GHC.Read

Real Word32

Since: base-2.1

Instance details

Defined in GHC.Word

Show Word32

Since: base-2.1

Instance details

Defined in GHC.Word

Ix Word32

Since: base-2.1

Instance details

Defined in GHC.Word

Storable Word32

Since: base-2.1

Instance details

Defined in Foreign.Storable

Bits Word32

Since: base-2.1

Instance details

Defined in GHC.Word

FiniteBits Word32

Since: base-4.6.0.0

Instance details

Defined in GHC.Word

data Word64 Source #

64-bit unsigned integer type

Instances

Instances details
Bounded Word64

Since: base-2.1

Instance details

Defined in GHC.Word

Enum Word64

Since: base-2.1

Instance details

Defined in GHC.Word

Eq Word64

Since: base-2.1

Instance details

Defined in GHC.Word

Integral Word64

Since: base-2.1

Instance details

Defined in GHC.Word

Num Word64

Since: base-2.1

Instance details

Defined in GHC.Word

Ord Word64

Since: base-2.1

Instance details

Defined in GHC.Word

Read Word64

Since: base-2.1

Instance details

Defined in GHC.Read

Real Word64

Since: base-2.1

Instance details

Defined in GHC.Word

Show Word64

Since: base-2.1

Instance details

Defined in GHC.Word

Ix Word64

Since: base-2.1

Instance details

Defined in GHC.Word

Storable Word64

Since: base-2.1

Instance details

Defined in Foreign.Storable

Bits Word64

Since: base-2.1

Instance details

Defined in GHC.Word

FiniteBits Word64

Since: base-4.6.0.0

Instance details

Defined in GHC.Word

data ByteString Source #

A space-efficient representation of a Word8 vector, supporting many efficient operations.

A ByteString contains 8-bit bytes, or by using the operations from Data.ByteString.Char8 it can be interpreted as containing 8-bit characters.

Instances

Instances details
IsList ByteString

Since: bytestring-0.10.12.0

Instance details

Defined in Data.ByteString.Internal

Eq ByteString
Instance details

Defined in Data.ByteString.Internal

Data ByteString
Instance details

Defined in Data.ByteString.Internal

Methods

gfoldl :: ( forall d b. Data d => c (d -> b) -> d -> c b) -> ( forall g. g -> c g) -> ByteString -> c ByteString Source #

gunfold :: ( forall b r. Data b => c (b -> r) -> c r) -> ( forall r. r -> c r) -> Constr -> c ByteString Source #

toConstr :: ByteString -> Constr Source #

dataTypeOf :: ByteString -> DataType Source #

dataCast1 :: Typeable t => ( forall d. Data d => c (t d)) -> Maybe (c ByteString ) Source #

dataCast2 :: Typeable t => ( forall d e. ( Data d, Data e) => c (t d e)) -> Maybe (c ByteString ) Source #

gmapT :: ( forall b. Data b => b -> b) -> ByteString -> ByteString Source #

gmapQl :: (r -> r' -> r) -> r -> ( forall d. Data d => d -> r') -> ByteString -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> ( forall d. Data d => d -> r') -> ByteString -> r Source #

gmapQ :: ( forall d. Data d => d -> u) -> ByteString -> [u] Source #

gmapQi :: Int -> ( forall d. Data d => d -> u) -> ByteString -> u Source #

gmapM :: Monad m => ( forall d. Data d => d -> m d) -> ByteString -> m ByteString Source #

gmapMp :: MonadPlus m => ( forall d. Data d => d -> m d) -> ByteString -> m ByteString Source #

gmapMo :: MonadPlus m => ( forall d. Data d => d -> m d) -> ByteString -> m ByteString Source #

Ord ByteString
Instance details

Defined in Data.ByteString.Internal

Read ByteString
Instance details

Defined in Data.ByteString.Internal

Show ByteString
Instance details

Defined in Data.ByteString.Internal

IsString ByteString

Beware: fromString truncates multi-byte characters to octets. e.g. "枯朶に烏のとまりけり秋の暮" becomes �6k�nh~�Q��n�

Instance details

Defined in Data.ByteString.Internal

Semigroup ByteString
Instance details

Defined in Data.ByteString.Internal

Monoid ByteString
Instance details

Defined in Data.ByteString.Internal

NFData ByteString
Instance details

Defined in Data.ByteString.Internal

type Item ByteString
Instance details

Defined in Data.ByteString.Internal