GHC.IO.Buffer (original) (raw)

Contents

Description

Buffers used in the IO system

Synopsis

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](GHC-IO-Buffer.html#v:bufL) and[bufR](GHC-IO-Buffer.html#v:bufR) offsets. In an empty buffer, [bufL](GHC-IO-Buffer.html#v:bufL) is equal to [bufR](GHC-IO-Buffer.html#v:bufR), but they might not be zero: for exmaple, the buffer might correspond to a memory-mapped file and in which case [bufL](GHC-IO-Buffer.html#v:bufL) will point to the next location to be written, which is not necessarily the beginning of the file.

Creation

Insertion/removal

Inspecting

Operating on the raw buffer as a Ptr

Assertions

Raw buffers