GHC.IO.BufferedIO

base-4.3.1.0: Basic libraries

Portability | non-portable (GHC Extensions)
Stability | internal
Maintainer | cvs-ghc@haskell.org

GHC.IO.BufferedIO

Description

Class of buffered IO devices

Synopsis

- class BufferedIO dev where
  - newBuffer :: dev -> BufferState -> IO (Buffer Word8)
  - fillReadBuffer :: dev -> Buffer Word8 -> IO (Int, Buffer Word8)
  - fillReadBuffer0 :: dev -> Buffer Word8 -> IO (Maybe Int, Buffer Word8)
  - emptyWriteBuffer :: dev -> Buffer Word8 -> IO (Buffer Word8)
  - flushWriteBuffer :: dev -> Buffer Word8 -> IO (Buffer Word8)
  - flushWriteBuffer0 :: dev -> Buffer Word8 -> IO (Int, Buffer Word8)
- readBuf :: RawIO dev => dev -> Buffer Word8 -> IO (Int, Buffer Word8)
- readBufNonBlocking :: RawIO dev => dev -> Buffer Word8 -> IO (Maybe Int, Buffer Word8)
- writeBuf :: RawIO dev => dev -> Buffer Word8 -> IO (Buffer Word8)
- writeBufNonBlocking :: RawIO dev => dev -> Buffer Word8 -> IO (Int, Buffer Word8)

# Documentation

class BufferedIO dev where

The purpose of `BufferedIO` is to provide a common interface for I/O devices that can read and write data through a buffer. Devices that implement `BufferedIO` include ordinary files, memory-mapped files, and bytestrings. The underlying device implementing a `Handle` must provide `BufferedIO`.

Methods

newBuffer :: dev -> BufferState -> IO (Buffer Word8)

allocate a new buffer. The size of the buffer is at the discretion of the device; e.g. for a memory-mapped file the buffer will probably cover the entire file.

fillReadBuffer :: dev -> Buffer Word8 -> IO (Int, Buffer Word8)

reads bytes into the buffer, blocking if there are no bytes available. Returns the number of bytes read (zero indicates end-of-file), and the new buffer.

fillReadBuffer0 :: dev -> Buffer Word8 -> IO (Maybe Int, Buffer Word8)

reads bytes into the buffer without blocking. Returns the number of bytes read (Nothing indicates end-of-file), and the new buffer.

emptyWriteBuffer :: dev -> Buffer Word8 -> IO (Buffer Word8)

Prepares an empty write buffer. This lets the device decide how to set up a write buffer: the buffer may need to point to a specific location in memory, for example. This is typically used by the client when switching from reading to writing on a buffered read/write device.

There is no corresponding operation for read buffers, because before reading the client will always call `fillReadBuffer`.

flushWriteBuffer :: dev -> Buffer Word8 -> IO (Buffer Word8)

Flush all the data from the supplied write buffer out to the device. The returned buffer should be empty, and ready for writing.

flushWriteBuffer0 :: dev -> Buffer Word8 -> IO (Int, Buffer Word8)

Flush data from the supplied write buffer out to the device without blocking. Returns the number of bytes written and the remaining buffer.

Instances

BufferedIO FD |

readBuf :: RawIO dev => dev -> Buffer Word8 -> IO (Int, Buffer Word8)

readBufNonBlocking :: RawIO dev => dev -> Buffer Word8 -> IO (Maybe Int, Buffer Word8)

writeBuf :: RawIO dev => dev -> Buffer Word8 -> IO (Buffer Word8)

writeBufNonBlocking :: RawIO dev => dev -> Buffer Word8 -> IO (Int, Buffer Word8)