module Halbum.Buffer where

import Foreign.Ptr

import qualified Data.ByteString.Lazy as L
import qualified Data.ByteString as P

type Buffer = P.ByteString

bsToBuffer :: L.ByteString -> Buffer
bsToBuffer (L.LPS xs) = P.concat xs

getBufferSize :: Buffer -> Int
getBufferSize = P.length

bufferIsEmpty :: Buffer -> Bool
bufferIsEmpty = (==0) . getBufferSize

-- | Warning: modifying the pointed-to data modifies the buffer.
withBufferPtr :: Buffer -> ((Ptr a,Int) -> IO b) -> IO b
withBufferPtr b f = P.unsafeUseAsCStringLen b (\ (p,l) -> f (castPtr p, l))

writeBufferFile :: FilePath -> Buffer -> IO ()
writeBufferFile = P.writeFile