GHC.IO.Buffer
| Авторские права | (c) Университет Глазго 2008 |
|---|---|
| Лицензия | см. libraries/base/LICENSE |
| Поддерживающий | ghc-devs@haskell.org |
| Стабильность | внутренняя |
| Переносимость | непереносимая (расширения GHC) |
| Безопасный Haskell | Безопасный |
| Язык | Haskell2010 |
Описание
Буферы, используемые в системе ввода-вывода
API этого модуля нестабилен и не предназначен для использования широкой публикой. Если вам абсолютно необходимо зависеть от него, убедитесь, что вы используете жёсткий верхний предел, например, base < 4.X, а не base < 5, поскольку интерфейс может быстро меняться без предупреждения.
Буферы произвольных элементов
Изменяемый массив байтов, который может передаваться внешним функциям.
Буфер представлен записью, где запись содержит сырой буфер и начальные/конечные точки заполненной части. Содержимое буфера изменяемо, но остальная часть записи неизменяема. Это немного необычное сочетание, но оказывается довольно практичным: сделав всю метаданные буфера неизменяемыми, мы можем выполнять операции с метаданными буфера вне монады ввода-вывода.
«Активные» элементы буфера находятся между смещениями bufL и bufR. В пустом буфере bufL равно bufR, но они могут не быть нулевыми: например, буфер может соответствовать файлу с отображением памяти, и в этом случае bufL будет указывать на следующее место для записи, что не обязательно является началом файла.
В системах POSIX менеджер ввода-вывода неявно полагается на чтение файла, смещая указатель файла. Однако в асинхронных операциях Windows ядро не использует смещение указателя файла. Логически это имеет смысл, так как операции могут выполняться в произвольном порядке. Операции OVERLAPPED не учитывают смещение указателя файла, так как они предназначены для поддержки произвольных асинхронных чтений в любое место на значительно более низком уровне. Поэтому мы должны явно отслеживать смещения файлов целевого объекта в буфере. Любая операция поиска также должна обновлять эту запись.
Чтобы сохранить ясность, мы стараемся поддерживать инвариант, что любая функция, получающая дескриптор файла, отвечает за обновление смещения дескриптора файла, если другое поведение не документировано.
Конструкторы
| Buffer | |
data BufferState Источник
Конструкторы
| ReadBuffer | |
| WriteBuffer |
Примеры
| Eq BufferState Источник | С момента: base-4.2.0.0 |
Определено в GHC.Internal.IO.Buffer Методы(==) :: BufferState -> BufferState -> Bool Источник (/=) :: BufferState -> BufferState -> Bool Источник | |
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 Источник
bufferAddOffset :: Int -> Buffer e -> Buffer e Source
bufferAdjustOffset :: Word64 -> Buffer e -> Buffer e Source
Проверка
isEmptyBuffer :: Buffer e -> Bool Source
isFullBuffer :: Buffer e -> Bool Source
isFullCharBuffer :: Buffer e -> Bool Source
isWriteBuffer :: Buffer e -> Bool Source
bufferElems :: Buffer e -> Int Source
bufferAvailable :: Buffer e -> Int Source
bufferOffset :: Buffer e -> Word64 Source
summaryBuffer :: Buffer a -> String Source
Работа с буфером как с Ptr
withBuffer :: Buffer e -> (Ptr e -> IO a) -> IO a Source
withRawBuffer :: RawBuffer e -> (Ptr e -> IO a) -> IO a Source
Утверждения
checkBuffer :: Buffer a -> IO () Source
Необработанные буферы
type RawBuffer e = ForeignPtr e Source
readWord8Buf :: RawBuffer Word8 -> Int -> IO Word8 Source
writeWord8Buf :: RawBuffer Word8 -> Int -> Word8 -> IO () Source
type RawCharBuffer = RawBuffer CharBufElem Source
peekCharBuf :: RawCharBuffer -> Int -> IO Char Source
readCharBuf :: RawCharBuffer -> Int -> IO (Char, Int) Source
writeCharBuf :: RawCharBuffer -> Int -> Char -> IO Int Source
readCharBufPtr :: Ptr CharBufElem -> Int -> IO (Char, Int) Source
writeCharBufPtr :: Ptr CharBufElem -> Int -> Char -> IO Int Source
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.12.1/docs/libraries/base-4.21.0.0-8e62/GHC-IO-Buffer.html