Модуль 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
Возвращает копию текущего содержимого буфера. Сам буфер не изменяется.
- С момента 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
-
Возбуждает
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
val add_utf_16le_uchar : t -> Uchar.t -> unit
add_utf_16le_uchar b u добавляет кодировку UTF-16LE u в конец буфера b.
- С момента 4.06
val add_utf_16be_uchar : t -> Uchar.t -> unit
add_utf_16be_uchar b u добавляет кодировку UTF-16BE u в конец буфера b.
- С момента 4.06
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 к имени переменной. Внутри шаблона строки ссылка на переменную — это неэкранированный $ непосредственно после имени переменной, которое является одним из следующих:
- непустая последовательность буквенно-цифровых или
_символов, - любая последовательность символов, заключённая в пару соответствующих скобок или фигурных скобок. Экранированный
$символ — это$, который непосредственно следует за символом обратного слэша; эти два символа вместе представляют обычный$.
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.
- 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 добавляет двоичное целое число с порядком байтов по умолчанию, беззнаковое 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 добавляет двоичное целое число с порядком байтов по умолчанию, знаковое 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 добавляет двоичное целое число с порядком байтов по умолчанию, 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 добавляет двоичное целое число с порядком байтов по умолчанию, 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-2024 INRIA.
https://ocaml.org/manual/5.2/api/Buffer.html