Spec-Zone.ru › Haskell 9

GHC.IO.Buffer

Авторские права (c) Университет Глазго 2008
Лицензия см. libraries/base/LICENSE
Поддерживающий ghc-devs@haskell.org
Стабильность внутренняя
Переносимость непереносимая (расширения GHC)
Безопасный Haskell Безопасный
Язык Haskell2010

Содержание

  • Буферы произвольных элементов
    • Создание
    • Вставка/удаление
    • Просмотр
    • Работа с сырым буфером как с Ptr
    • Утверждения
  • Сырые буферы

Описание

Буферы, используемые в системе ввода-вывода

API этого модуля нестабилен и не предназначен для использования широкой публикой. Если вам абсолютно необходимо зависеть от него, убедитесь, что вы используете жёсткий верхний предел, например, base < 4.X, а не base < 5, поскольку интерфейс может быстро меняться без предупреждения.

Буферы произвольных элементов

data Buffer e Источник

Изменяемый массив байтов, который может передаваться внешним функциям.

Буфер представлен записью, где запись содержит сырой буфер и начальные/конечные точки заполненной части. Содержимое буфера изменяемо, но остальная часть записи неизменяема. Это немного необычное сочетание, но оказывается довольно практичным: сделав всю метаданные буфера неизменяемыми, мы можем выполнять операции с метаданными буфера вне монады ввода-вывода.

«Активные» элементы буфера находятся между смещениями bufL и bufR. В пустом буфере bufL равно bufR, но они могут не быть нулевыми: например, буфер может соответствовать файлу с отображением памяти, и в этом случае bufL будет указывать на следующее место для записи, что не обязательно является началом файла.

В системах POSIX менеджер ввода-вывода неявно полагается на чтение файла, смещая указатель файла. Однако в асинхронных операциях Windows ядро не использует смещение указателя файла. Логически это имеет смысл, так как операции могут выполняться в произвольном порядке. Операции OVERLAPPED не учитывают смещение указателя файла, так как они предназначены для поддержки произвольных асинхронных чтений в любое место на значительно более низком уровне. Поэтому мы должны явно отслеживать смещения файлов целевого объекта в буфере. Любая операция поиска также должна обновлять эту запись.

Чтобы сохранить ясность, мы стараемся поддерживать инвариант, что любая функция, получающая дескриптор файла, отвечает за обновление смещения дескриптора файла, если другое поведение не документировано.

Конструкторы

Buffer

Поля

  • bufRaw :: !(RawBuffer e)
  • bufState :: BufferState
  • bufSize :: !Int
  • bufOffset :: !Word64
  • bufL :: !Int
  • bufR :: !Int

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

charSize :: 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API