Spec-Zone.ru › OCaml 5.0

Модуль Buffer

module Buffer: sig .. end

Расширяемые буферы.

Этот модуль реализует буферы, которые автоматически расширяются при необходимости. Он предоставляет накапливающее конкатенацию строк за линейное время (вместо квадратичного времени при конкатенации строк попарно). Например:

     let concat_strings ss =
       let b = Buffer.create 16 in
         List.iter (Buffer.add_string b) ss;
         Buffer.contents b

  • Предупреждение unsynchronized_access. Несинхронизированный доступ к буферам является ошибкой программирования.

Несинхронизированный доступ

Несинхронизированный доступ к буферу может привести к недопустимому состоянию буфера. Таким образом, одновременный доступ к буферу должен быть синхронизирован (например, с помощью Mutex.t).

type t 

Абстрактный тип буферов.

val create : int -> t

create n возвращает новый буфер, изначально пустой. Параметр n — начальный размер внутренней последовательности байтов, хранящей содержимое буфера. Эта последовательность байтов автоматически перевыделяется, когда в буфер сохраняется более n символов, но сжимается обратно до n символов, когда вызывается reset. Для наилучшей производительности n должен быть того же порядка величины, что и количество символов, которые ожидается сохранить в буфере (например, 80 для буфера, который содержит одну строку вывода). Однако ничего плохого не произойдёт, если буфер вырастет за этот предел. В сомнениях, обратитесь к n = 16 например. Если n не находится в пределах от 1 до Sys.max_string_length, он будет ограничен этим интервалом.

val contents : t -> string

Возвращает копию текущего содержимого буфера. Сам буфер не изменяется.

val to_bytes : t -> bytes

Возвращает копию текущего содержимого буфера. Сам буфер не изменяется.

  • Since 4.02
val sub : t -> int -> int -> string

Buffer.sub b off len возвращает копию len байтов из текущего содержимого буфера b, начиная со смещения off.

  • Raises Invalid_argument если off и len не обозначают допустимый диапазон b.
val blit : t -> int -> bytes -> int -> int -> unit

Buffer.blit src srcoff dst dstoff len копирует len символов из текущего содержимого буфера src, начиная со смещения srcoff до dst, начиная с символа dstoff.

  • Since 3.11.2
  • Raises Invalid_argument если srcoff и len не обозначают допустимый диапазон src, или если dstoff и len не обозначают допустимый диапазон dst.
val nth : t -> int -> char

Получить n-й символ буфера.

  • Raises Invalid_argument если индекс вне диапазона
val length : t -> int

Возвращает количество символов, в настоящее время содержащихся в буфере.

val clear : t -> unit

Очистить буфер.

val reset : t -> unit

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

val output_buffer : out_channel -> t -> unit

output_buffer oc b записывает текущее содержимое буфера b в канал вывода oc.

val truncate : t -> int -> unit

truncate b len обрезает длину b до len Примечание: внутренняя последовательность байтов не укорачивается.

  • Since 4.05.0
  • Raises Invalid_argument если len < 0 или len > length b.

Добавление

Примечание: все операции add_* могут вызвать Failure если внутренней последовательности байтов буфера необходимо вырасти за пределы Sys.max_string_length.

val add_char : t -> char -> unit

add_char b c добавляет символ c в конец буфера b.

val add_utf_8_uchar : t -> Uchar.t -> unit

add_utf_8_uchar b u добавляет кодировку UTF-8 u в конец буфера b.

  • Since 4.06.0
val add_utf_16le_uchar : t -> Uchar.t -> unit

add_utf_16le_uchar b u добавляет кодировку UTF-16LE u в конец буфера b.

  • Since 4.06.0
val add_utf_16be_uchar : t -> Uchar.t -> unit

add_utf_16be_uchar b u добавляет кодировку UTF-16BE u в конец буфера b.

  • Since 4.06.0
val add_string : t -> string -> unit

add_string b s добавляет строку s в конец буфера b.

val add_bytes : t -> bytes -> unit

add_bytes b s добавляет последовательность байтов s в конец буфера b.

  • Since 4.02
val add_substring : t -> string -> int -> int -> unit

add_substring b s ofs len берёт len символов со смещением ofs в строке s и добавляет их в конец буфера b.

  • Raises Invalid_argument если ofs и len не обозначают допустимый диапазон s.
val add_subbytes : t -> bytes -> int -> int -> unit

add_subbytes b s ofs len берёт len символов со смещением ofs в последовательности байтов s и добавляет их в конец буфера b.

  • Since 4.02
  • Raises Invalid_argument если ofs и len не обозначают допустимый диапазон s.
val add_substitute : t -> (string -> string) -> string -> unit

add_substitute b f s добавляет шаблон строки s в конец буфера b с подстановкой. Процесс подстановки ищет переменные в шаблоне и подставляет каждое имя переменной своим значением, полученным при применении отображения f к имени переменной. Внутри шаблона строки имя переменной следует за неэкранированным символом $ и является одним из следующих:

  • непустая последовательность буквенно-цифровых или _ символов,
  • произвольная последовательность символов, заключенная в пару соответствующих скобок или фигурных скобок. Экранированный символ $ — это символ $, который непосредственно следует за обратной косой чертой; он затем обозначает обычный символ $.
  • Raises Not_found если закрывающий символ переменной в скобках не найден.
val add_buffer : t -> t -> unit

add_buffer b1 b2 добавляет текущее содержимое буфера b2 в конец буфера b1. b2 не изменяется.

val add_channel : t -> in_channel -> int -> unit

add_channel b ic n считывает не более n символов из канала ввода ic и сохраняет их в конце буфера b.

  • Raises
    • End_of_file если канал содержит меньше n символов. В этом случае символы все равно добавляются в буфер, чтобы избежать потери данных.
    • Invalid_argument если len < 0 или len > Sys.max_string_length.

Буферы и Последовательности

val to_seq : t -> char Seq.t

Итерация по буферу в порядке возрастания.

Поведение не определено, если буфер изменяется во время итерации.

  • Since 4.07
val to_seqi : t -> (int * char) Seq.t

Итерация по буферу в порядке возрастания, генерируя индексы по символам.

Поведение не определено, если буфер изменяется во время итерации.

  • Since 4.07
val add_seq : t -> char Seq.t -> unit

Добавление символов в буфер

  • Since 4.07
val of_seq : char Seq.t -> t

Создание буфера из генератора

  • Since 4.07

Двоичное кодирование целых чисел

Функции в этом разделе добавляют двоичные кодировки целых чисел в буферы.

Маленький конец (соответственно, большой конец) означает, что наименее (соответственно, наиболее) значимые байты хранятся первыми. Большой конец также известен как сетевой порядок байтов. Кодирование родного порядка байтов — это либо порядок байтов малого конца, либо большой, в зависимости от Sys.big_endian.

32-битные и 64-битные целые числа представлены типами int32 и int64, которые можно интерпретировать как знакомые или беззнаковые числа.

8-битные и 16-битные целые числа представлены типом int, который имеет больше битов, чем двоичное кодирование. Функции, которые кодируют эти значения, усекают свои входные данные до наименее значимых байтов.

val add_uint8 : t -> int -> unit

add_uint8 b i добавляет двоичное беззнаковое 8-битное целое число i к b.

  • Since 4.08
val add_int8 : t -> int -> unit

add_int8 b i добавляет двоичное знаковое 8-битное целое число i к b.

  • Since 4.08
val add_uint16_ne : t -> int -> unit

add_uint16_ne b i добавляет двоичное целое число с порядком байтов по умолчанию (native-endian) без знака 16 бит i к b.

  • Since 4.08
val add_uint16_be : t -> int -> unit

add_uint16_be b i добавляет двоичное целое число с big-endian порядком байтов без знака 16 бит i к b.

  • Since 4.08
val add_uint16_le : t -> int -> unit

add_uint16_le b i добавляет двоичное целое число с little-endian порядком байтов без знака 16 бит i к b.

  • Since 4.08
val add_int16_ne : t -> int -> unit

add_int16_ne b i добавляет двоичное целое число с порядком байтов по умолчанию (native-endian) со знаком 16 бит i к b.

  • Since 4.08
val add_int16_be : t -> int -> unit

add_int16_be b i добавляет двоичное целое число с big-endian порядком байтов со знаком 16 бит i к b.

  • Since 4.08
val add_int16_le : t -> int -> unit

add_int16_le b i добавляет двоичное целое число с little-endian порядком байтов со знаком 16 бит i к b.

  • Since 4.08
val add_int32_ne : t -> int32 -> unit

add_int32_ne b i добавляет двоичное целое число с порядком байтов по умолчанию (native-endian) 32 бит i к b.

  • Since 4.08
val add_int32_be : t -> int32 -> unit

add_int32_be b i добавляет двоичное целое число с big-endian порядком байтов 32 бит i к b.

  • Since 4.08
val add_int32_le : t -> int32 -> unit

add_int32_le b i добавляет двоичное целое число с little-endian порядком байтов 32 бит i к b.

  • Since 4.08
val add_int64_ne : t -> int64 -> unit

add_int64_ne b i добавляет двоичное целое число с порядком байтов по умолчанию (native-endian) 64 бит i к b.

  • Since 4.08
val add_int64_be : t -> int64 -> unit

add_int64_be b i добавляет двоичное целое число с big-endian порядком байтов 64 бит i к b.

  • Since 4.08
val add_int64_le : t -> int64 -> unit

add_int64_ne b i добавляет двоичное целое число с little-endian порядком байтов 64 бит i к b.

  • Since 4.08

© 1995-2022 INRIA.
https://v2.ocaml.org/releases/5.0/htmlman/libref/Buffer.html

Spec-Zone.ru

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