Модуль 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