Implementations
equal a b
returns true
if a
and b
are equals. String.equal a b =
equal a b
for any a
and b
. The execution time of equal
depends solely on the length of the strings, not the contents.
compare_be a b
returns 0
if a
is equal to b
, a negative integer if a
if less (lexicographically) than b
, and a positive integer if a
is greater (lexicographically) than b
.
compare_be a b
returns the same order than String.compare a b
for any a
and b
(but not necessary the same integer!). Order is defined as:
compare_be a b < 0
meansa < b
compare_be a b > 0
meansa > b
compare_be a b = 0
meansa = b
About time, if String.length a <> String.length b
, compare_be
does not look into a
or b
and no comparison in bytes will be done.
compare_be_with_len ~len a b
does compare_be a b
on len
bytes.
- raises Invalid_argument
if
len
is upper thanString.length a
orString.length b
.
compare_le a b
is semantically compare_be (rev a) (rev b)
. With rev
reverses a string (a = rev (rev a)
).
compare_le_with_len a b
is semantically compare_be_with_len ~len (rev a)
(rev b)
. With rev
reverse a string (a = rev (rev a)
).
- raises Invalid_argument
if
len
is upper thanString.length a
orString.length b
.
one_if_not_zero n
is a constant-time version of if n <> 0 then 1 else 0
. This is functionally equivalent to !!n
in the C programming language.
zero_if_not_zero n
is a constant-time of if n <> 0 then 0 else 1
. This is functionnaly equivalent to !n
in the C programming language.
select_int choose_b a b
is a
if choose_b = 0
and b
otherwise. This comparison is constant-time and it should not be possible for a measuring adversary to determine anything about the values of choose_b
, a
, or b
.
find_uint8 ?off ~f v
returns the index of the first occurrence which respects the predicate f
in string v
. Otherwise, it returns -1
.