package ocaml-base-compiler
Byte sequence operations.
This module is intended to be used through StdLabels
which replaces Array
, Bytes
, List
and String
with their labeled counterparts.
For example:
open StdLabels
let first = Bytes.sub ~pos:0 ~len:1
set s n c
modifies s
in place, replacing the byte at index n
with c
.
create n
returns a new byte sequence of length n
. The sequence is uninitialized and contains arbitrary bytes.
make n c
returns a new byte sequence of length n
, filled with the byte c
.
init n f
returns a fresh byte sequence of length n
, with character i
initialized to the result of f i
.
Return a new byte sequence that contains the same bytes as the given string.
Return a new string that contains the same bytes as the given byte sequence.
sub s start len
returns a new byte sequence of length len
, containing the subsequence of s
that starts at position start
and has length len
.
Same as sub
but return a string instead of a byte sequence.
extend s left right
returns a new byte sequence that contains the bytes of s
, with left
uninitialized bytes prepended and right
uninitialized bytes appended to it. If left
or right
is negative, then bytes are removed (instead of appended) from the corresponding side of s
.
fill s start len c
modifies s
in place, replacing len
characters with c
, starting at start
.
blit src srcoff dst dstoff len
copies len
bytes from sequence src
, starting at index srcoff
, to sequence dst
, starting at index dstoff
. It works correctly even if src
and dst
are the same byte sequence, and the source and destination intervals overlap.
blit src srcoff dst dstoff len
copies len
bytes from string src
, starting at index srcoff
, to byte sequence dst
, starting at index dstoff
.
concat sep sl
concatenates the list of byte sequences sl
, inserting the separator byte sequence sep
between each, and returns the result as a new byte sequence.
cat s1 s2
concatenates s1
and s2
and returns the result as new byte sequence.
iter f s
applies function f
in turn to all the bytes of s
. It is equivalent to f (get s 0); f (get s 1); ...; f (get s
(length s - 1)); ()
.
Same as Bytes.iter
, but the function is applied to the index of the byte as first argument and the byte itself as second argument.
map f s
applies function f
in turn to all the bytes of s
and stores the resulting bytes in a new sequence that is returned as the result.
mapi f s
calls f
with each character of s
and its index (in increasing index order) and stores the resulting bytes in a new sequence that is returned as the result.
Return a copy of the argument, without leading and trailing whitespace. The bytes regarded as whitespace are the ASCII characters ' '
, '\012'
, '\n'
, '\r'
, and '\t'
.
Return a copy of the argument, with special characters represented by escape sequences, following the lexical conventions of OCaml.
index_opt s c
returns the index of the first occurrence of byte c
in s
or None
if c
does not occur in s
.
rindex s c
returns the index of the last occurrence of byte c
in s
.
rindex_opt s c
returns the index of the last occurrence of byte c
in s
or None
if c
does not occur in s
.
index_from s i c
returns the index of the first occurrence of byte c
in s
after position i
. Bytes.index s c
is equivalent to Bytes.index_from s 0 c
.
index_from _opts i c
returns the index of the first occurrence of byte c
in s
after position i
or None
if c
does not occur in s
after position i
. Bytes.index_opt s c
is equivalent to Bytes.index_from_opt s 0 c
.
rindex_from s i c
returns the index of the last occurrence of byte c
in s
before position i+1
. rindex s c
is equivalent to rindex_from s (Bytes.length s - 1) c
.
rindex_from_opt s i c
returns the index of the last occurrence of byte c
in s
before position i+1
or None
if c
does not occur in s
before position i+1
. rindex_opt s c
is equivalent to rindex_from s (Bytes.length s - 1) c
.
contains_from s start c
tests if byte c
appears in s
after position start
. contains s c
is equivalent to contains_from
s 0 c
.
rcontains_from s stop c
tests if byte c
appears in s
before position stop+1
.
Return a copy of the argument, with all lowercase letters translated to uppercase, including accented letters of the ISO Latin-1 (8859-1) character set.
Return a copy of the argument, with all uppercase letters translated to lowercase, including accented letters of the ISO Latin-1 (8859-1) character set.
Return a copy of the argument, with the first character set to uppercase, using the ISO Latin-1 (8859-1) character set..
Return a copy of the argument, with the first character set to lowercase, using the ISO Latin-1 (8859-1) character set..
Return a copy of the argument, with all lowercase letters translated to uppercase, using the US-ASCII character set.
Return a copy of the argument, with all uppercase letters translated to lowercase, using the US-ASCII character set.
Return a copy of the argument, with the first character set to uppercase, using the US-ASCII character set.
Return a copy of the argument, with the first character set to lowercase, using the US-ASCII character set.
The comparison function for byte sequences, with the same specification as Stdlib.compare
. Along with the type t
, this function compare
allows the module Bytes
to be passed as argument to the functors Set.Make
and Map.Make
.
Iterators
Iterate on the string, in increasing index order. Modifications of the string during iteration will be reflected in the iterator.
Iterate on the string, in increasing order, yielding indices along chars
Binary encoding/decoding of integers
The functions in this section binary encode and decode integers to and from byte sequences.
All following functions raise Invalid_argument
if the space needed at index i
to decode or encode the integer is not available.
Little-endian (resp. big-endian) encoding means that least (resp. most) significant bytes are stored first. Big-endian is also known as network byte order. Native-endian encoding is either little-endian or big-endian depending on Sys.big_endian
.
32-bit and 64-bit integers are represented by the int32
and int64
types, which can be interpreted either as signed or unsigned numbers.
8-bit and 16-bit integers are represented by the int
type, which has more bits than the binary encoding. These extra bits are handled as follows:
- Functions that decode signed (resp. unsigned) 8-bit or 16-bit integers represented by
int
values sign-extend (resp. zero-extend) their result. - Functions that encode 8-bit or 16-bit integers represented by
int
values truncate their input to their least significant bytes.
get_uint8 b i
is b
's unsigned 8-bit integer starting at byte index i
.
get_int8 b i
is b
's signed 8-bit integer starting at byte index i
.
get_uint16_ne b i
is b
's native-endian unsigned 16-bit integer starting at byte index i
.
get_uint16_be b i
is b
's big-endian unsigned 16-bit integer starting at byte index i
.
get_uint16_le b i
is b
's little-endian unsigned 16-bit integer starting at byte index i
.
get_int16_ne b i
is b
's native-endian signed 16-bit integer starting at byte index i
.
get_int16_be b i
is b
's big-endian signed 16-bit integer starting at byte index i
.
get_int16_le b i
is b
's little-endian signed 16-bit integer starting at byte index i
.
get_int32_ne b i
is b
's native-endian 32-bit integer starting at byte index i
.
get_int32_be b i
is b
's big-endian 32-bit integer starting at byte index i
.
get_int32_le b i
is b
's little-endian 32-bit integer starting at byte index i
.
get_int64_ne b i
is b
's native-endian 64-bit integer starting at byte index i
.
get_int64_be b i
is b
's big-endian 64-bit integer starting at byte index i
.
get_int64_le b i
is b
's little-endian 64-bit integer starting at byte index i
.
set_uint8 b i v
sets b
's unsigned 8-bit integer starting at byte index i
to v
.
set_int8 b i v
sets b
's signed 8-bit integer starting at byte index i
to v
.
set_uint16_ne b i v
sets b
's native-endian unsigned 16-bit integer starting at byte index i
to v
.
set_uint16_be b i v
sets b
's big-endian unsigned 16-bit integer starting at byte index i
to v
.
set_uint16_le b i v
sets b
's little-endian unsigned 16-bit integer starting at byte index i
to v
.
set_int16_ne b i v
sets b
's native-endian signed 16-bit integer starting at byte index i
to v
.
set_int16_be b i v
sets b
's big-endian signed 16-bit integer starting at byte index i
to v
.
set_int16_le b i v
sets b
's little-endian signed 16-bit integer starting at byte index i
to v
.
set_int32_ne b i v
sets b
's native-endian 32-bit integer starting at byte index i
to v
.
set_int32_be b i v
sets b
's big-endian 32-bit integer starting at byte index i
to v
.
set_int32_le b i v
sets b
's little-endian 32-bit integer starting at byte index i
to v
.
set_int64_ne b i v
sets b
's native-endian 64-bit integer starting at byte index i
to v
.
set_int64_be b i v
sets b
's big-endian 64-bit integer starting at byte index i
to v
.