packages feed

henet-1.3.9.0: src/Network/ENet/Packet.hs

module Network.ENet.Packet where

import Foreign
import Foreign.C.Error
import Foreign.C.Types

import Data.BitSet.Generic(BitSet(getBits))

import qualified Data.ByteString        as SB
import qualified Data.ByteString.Unsafe as SB

import qualified Network.ENet.Bindings as B

type PacketFlagSet = BitSet Word32 B.PacketFlag

-- String is defensively coppied, so unsafe is appropriate

create :: SB.ByteString -> PacketFlagSet -> IO (Ptr B.Packet)
create bytes flags = SB.unsafeUseAsCStringLen bytes $ \(ptr,len) ->
  B.packetCreate (castPtr ptr) (fromIntegral len) $ getBits flags

destroy :: Ptr B.Packet -> IO ()
destroy = B.packetDestroy

resize :: Ptr B.Packet -> CSize -> IO ()
resize ptr size = do _ <- throwErrnoIf -- explicity throw away return after
                          (/=0)
                          "Packet could not be resized"
                          $ B.packetResize ptr size
                     return ()