base-4.2.0.1: Basic librariesSource codeContentsIndex
GHC.IO.Buffer
Portabilitynon-portable (GHC Extensions)
Stabilityinternal
Maintainercvs-ghc@haskell.org
Contents
Buffers of any element
Creation
Insertion/removal
Inspecting
Operating on the raw buffer as a Ptr
Assertions
Raw buffers
Description
Buffers used in the IO system
Synopsis
data Buffer e = Buffer {
bufRaw :: !(RawBuffer e)
bufState :: BufferState
bufSize :: !Int
bufL :: !Int
bufR :: !Int
}
data BufferState
= ReadBuffer
| WriteBuffer
type CharBuffer = Buffer Char
type CharBufElem = Char
newByteBuffer :: Int -> BufferState -> IO (Buffer Word8)
newCharBuffer :: Int -> BufferState -> IO CharBuffer
newBuffer :: Int -> Int -> BufferState -> IO (Buffer e)
emptyBuffer :: RawBuffer e -> Int -> BufferState -> Buffer e
bufferRemove :: Int -> Buffer e -> Buffer e
bufferAdd :: Int -> Buffer e -> Buffer e
slideContents :: Buffer Word8 -> IO (Buffer Word8)
bufferAdjustL :: Int -> Buffer e -> Buffer e
isEmptyBuffer :: Buffer e -> Bool
isFullBuffer :: Buffer e -> Bool
isFullCharBuffer :: Buffer e -> Bool
isWriteBuffer :: Buffer e -> Bool
bufferElems :: Buffer e -> Int
bufferAvailable :: Buffer e -> Int
summaryBuffer :: Buffer a -> String
withBuffer :: Buffer e -> (Ptr e -> IO a) -> IO a
withRawBuffer :: RawBuffer e -> (Ptr e -> IO a) -> IO a
checkBuffer :: Buffer a -> IO ()
type RawBuffer e = ForeignPtr e
readWord8Buf :: RawBuffer Word8 -> Int -> IO Word8
writeWord8Buf :: RawBuffer Word8 -> Int -> Word8 -> IO ()
type RawCharBuffer = RawBuffer CharBufElem
peekCharBuf :: RawCharBuffer -> Int -> IO Char
readCharBuf :: RawCharBuffer -> Int -> IO (Char, Int)
writeCharBuf :: RawCharBuffer -> Int -> Char -> IO Int
readCharBufPtr :: Ptr CharBufElem -> Int -> IO (Char, Int)
writeCharBufPtr :: Ptr CharBufElem -> Int -> Char -> IO Int
charSize :: Int
Buffers of any element
data Buffer e Source

A mutable array of bytes that can be passed to foreign functions.

The buffer is represented by a record, where the record contains the raw buffer and the start/end points of the filled portion. The buffer contents itself is mutable, but the rest of the record is immutable. This is a slightly odd mix, but it turns out to be quite practical: by making all the buffer metadata immutable, we can have operations on buffer metadata outside of the IO monad.

The live elements of the buffer are those between the bufL and bufR offsets. In an empty buffer, bufL is equal to bufR, but they might not be zero: for exmaple, the buffer might correspond to a memory-mapped file and in which case bufL will point to the next location to be written, which is not necessarily the beginning of the file.

Constructors
Buffer
bufRaw :: !(RawBuffer e)
bufState :: BufferState
bufSize :: !Int
bufL :: !Int
bufR :: !Int
data BufferState Source
Constructors
ReadBuffer
WriteBuffer
show/hide Instances
type CharBuffer = Buffer CharSource
type CharBufElem = CharSource
Creation
newByteBuffer :: Int -> BufferState -> IO (Buffer Word8)Source
newCharBuffer :: Int -> BufferState -> IO CharBufferSource
newBuffer :: Int -> Int -> BufferState -> IO (Buffer e)Source
emptyBuffer :: RawBuffer e -> Int -> BufferState -> Buffer eSource
Insertion/removal
bufferRemove :: Int -> Buffer e -> Buffer eSource
bufferAdd :: Int -> Buffer e -> Buffer eSource
slideContents :: Buffer Word8 -> IO (Buffer Word8)Source
slides the contents of the buffer to the beginning
bufferAdjustL :: Int -> Buffer e -> Buffer eSource
Inspecting
isEmptyBuffer :: Buffer e -> BoolSource
isFullBuffer :: Buffer e -> BoolSource
isFullCharBuffer :: Buffer e -> BoolSource
isWriteBuffer :: Buffer e -> BoolSource
bufferElems :: Buffer e -> IntSource
bufferAvailable :: Buffer e -> IntSource
summaryBuffer :: Buffer a -> StringSource
Operating on the raw buffer as a Ptr
withBuffer :: Buffer e -> (Ptr e -> IO a) -> IO aSource
withRawBuffer :: RawBuffer e -> (Ptr e -> IO a) -> IO aSource
Assertions
checkBuffer :: Buffer a -> IO ()Source
Raw buffers
type RawBuffer e = ForeignPtr eSource
readWord8Buf :: RawBuffer Word8 -> Int -> IO Word8Source
writeWord8Buf :: RawBuffer Word8 -> Int -> Word8 -> IO ()Source
type RawCharBuffer = RawBuffer CharBufElemSource
peekCharBuf :: RawCharBuffer -> Int -> IO CharSource
readCharBuf :: RawCharBuffer -> Int -> IO (Char, Int)Source
writeCharBuf :: RawCharBuffer -> Int -> Char -> IO IntSource
readCharBufPtr :: Ptr CharBufElem -> Int -> IO (Char, Int)Source
writeCharBufPtr :: Ptr CharBufElem -> Int -> Char -> IO IntSource
charSize :: IntSource
Produced by Haddock version 2.6.1