Hello Bulat,
Sunday, May 28, 2006, 2:44:37 PM, you wrote:
>> type PtrLen a = (Ptr a, Int)
>> encodePtrLen :: (Binary a) => a -> (PtrLen a -> IO b) -> IO b
>> decodePtr :: (Binary a) => Ptr a -> IO a
Finally i've implemented the following (you then would use
'withForeignPtr' to work with contents of ForeignPtr):
-- -----------------------------------------------------------------------------
-- Encode/decode contents of memory buffer
encodePtr :: (Binary a, Integral size) => a -> IO (ForeignPtr x,
size)
encodePtrLE :: (Binary a, Integral size) => a -> IO (ForeignPtr x,
size)
encodePtrBitAligned :: (Binary a, Integral size) => a -> IO (ForeignPtr x,
size)
encodePtrBitAlignedLE :: (Binary a, Integral size) => a -> IO (ForeignPtr x,
size)
encodePtr = encodePtr' openByteAligned
encodePtrLE = encodePtr' openByteAlignedLE
encodePtrBitAligned = encodePtr' openBitAligned
encodePtrBitAlignedLE = encodePtr' openBitAlignedLE
decodePtr :: (Binary a, Integral size) => Ptr x -> size -> IO a
decodePtrLE :: (Binary a, Integral size) => Ptr x -> size -> IO a
decodePtrBitAligned :: (Binary a, Integral size) => Ptr x -> size -> IO a
decodePtrBitAlignedLE :: (Binary a, Integral size) => Ptr x -> size -> IO a
decodePtr = decodePtr' openByteAligned
decodePtrLE = decodePtr' openByteAlignedLE
decodePtrBitAligned = decodePtr' openBitAligned
decodePtrBitAlignedLE = decodePtr' openBitAlignedLE
-- Universal function what encodes data with any alignment
encodePtr' open thedata = do
h <- createMemBuf 512 >>= open
put_ h thedata
vFlush h
vRewind h
(buf,size) <- vReceiveBuf h READING -- FIXME:
MemBuf-implementation specific
fptr <- newForeignPtr finalizerFree (castPtr buf) -- FIXME: also
MemBuf-implementation specific
return (fptr,size)
-- Universal function what decodes data written with any alignment
decodePtr' open ptr size = do
h <- openMemBuf ptr size >>= open
result <- get h
vClose h
return result
--
Best regards,
Bulat mailto:[EMAIL PROTECTED]
_______________________________________________
debian-haskell mailing list
[email protected]
http://urchin.earth.li/mailman/listinfo/debian-haskell