Модуль 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
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
Возвращает копию текущего содержимого буфера. Сам буфер не изменяется.
- С момента 4.02
val sub : t -> int -> int -> string
Buffer.sub b off len возвращает копию len байтов из текущего содержимого буфера b, начиная со смещения off.
-
Возбуждает
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.
- С момента 3.11.2
-
Возбуждает
Invalid_argumentеслиsrcoffиlenне обозначают допустимый диапазонsrc, или еслиdstoffиlenне обозначают допустимый диапазонdst.
val nth : t -> int -> char
Получить n-й символ буфера.
-
Возбуждает
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. Примечание: внутренняя последовательность байтов не укорачивается.
- С момента 4.05.0
-
Возбуждает
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.
- С момента 4.06.0
val add_utf_16le_uchar : t -> Uchar.t -> unit
add_utf_16le_uchar b u добавляет кодировку UTF-16LE u в конец буфера b.
- С момента 4.06.0
val add_utf_16be_uchar : t -> Uchar.t -> unit
add_utf_16be_uchar b u добавляет кодировку UTF-16BE u в конец буфера b.
- С момента 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.
- С момента 4.02
val add_substring : t -> string -> int -> int -> unit
add_substring b s ofs len берёт len символов со смещения ofs в строке s и добавляет их в конец буфера b.
-
Возбуждает
Invalid_argumentеслиofsиlenне обозначают допустимый диапазонs.
val add_subbytes : t -> bytes -> int -> int -> unit
add_subbytes b s ofs len берёт len байтов со смещения ofs в последовательности байтов s и добавляет их в конец буфера b.
- С момента 4.02
-
Возбуждает
Invalid_argumentеслиofsиlenне обозначают допустимый диапазонs.
val add_substitute : t -> (string -> string) -> string -> unit
add_substitute b f s добавляет шаблон строки s в конец буфера b с заменой. Процесс замены ищет переменные в шаблоне и заменяет каждое имя переменной его значением, полученным путём применения отображения f к имени переменной. Внутри шаблона строки имя переменной следует непосредственно за неэкранированным $ символом и является одним из следующих:
- непустой последовательностью буквенно-цифровых или
_символов, - любой последовательностью символов, заключённых в пару соответствующих скобок или фигурных скобок. Экранированный
$символ — это$символ, который сразу следует за обратной косой чертой; он затем представляет обычный$.
-
Возбуждает
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.
-
Возбуждает
-
End_of_fileесли канал содержит меньшеnсимволов. В этом случае символы по-прежнему добавляются в буфер, чтобы избежать потери данных. -
Invalid_argumentеслиlen < 0илиlen > Sys.max_string_length.
-
Буферы и Последовательности
val to_seq : t -> char Seq.t
Итерироваться по буферу в порядке возрастания.
Поведение не определено, если буфер изменяется во время итерации.
- С момента 4.07
val to_seqi : t -> (int * char) Seq.t
Итерироваться по буферу в порядке возрастания, генерируя индексы вдоль символов.
Поведение не определено, если буфер изменяется во время итерации.
- С момента 4.07
val add_seq : t -> char Seq.t -> unit
Добавить символы в буфер
- С момента 4.07
val of_seq : char Seq.t -> t
Создать буфер из генератора
- С момента 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.
- С момента 4.08
val add_int8 : t -> int -> unit
Добавляет двоичный знаковый 8-битный целый i к b.
- Since 4.08
val add_uint16_ne : t -> int -> unit
Добавляет двоичный нативный unsigned 16-битный целый i к b.
- Since 4.08
val add_uint16_be : t -> int -> unit
Добавляет двоичный big-endian unsigned 16-битный целый i к b.
- Since 4.08
val add_uint16_le : t -> int -> unit
Добавляет двоичный little-endian unsigned 16-битный целый i к b.
- Since 4.08
val add_int16_ne : t -> int -> unit
Добавляет двоичный нативный знаковый 16-битный целый i к b.
- Since 4.08
val add_int16_be : t -> int -> unit
Добавляет двоичный big-endian знаковый 16-битный целый i к b.
- Since 4.08
val add_int16_le : t -> int -> unit
Добавляет двоичный little-endian знаковый 16-битный целый i к b.
- Since 4.08
val add_int32_ne : t -> int32 -> unit
Добавляет двоичный нативный 32-битный целый i к b.
- Since 4.08
val add_int32_be : t -> int32 -> unit
Добавляет двоичный big-endian 32-битный целый i к b.
- Since 4.08
val add_int32_le : t -> int32 -> unit
Добавляет двоичный little-endian 32-битный целый i к b.
- Since 4.08
val add_int64_ne : t -> int64 -> unit
Добавляет двоичный нативный 64-битный целый i к b.
- Since 4.08
val add_int64_be : t -> int64 -> unit
Добавляет двоичный big-endian 64-битный целый i к b.
- Since 4.08
val add_int64_le : t -> int64 -> unit
Добавляет двоичный little-endian 64-битный целый i к b.
- Since 4.08
© 1995-2022 INRIA.
https://v2.ocaml.org/releases/4.14/htmlman/libref/Buffer.html