Packages
caffeine_lang
6.2.2
6.3.1
6.3.0
6.2.2
6.2.1
6.2.0
6.1.2
6.1.1
6.1.0
6.0.0
5.6.0
5.5.0
5.4.4
5.4.3
5.4.2
5.4.1
5.4.0
5.3.0
5.2.0
5.1.1
5.1.0
5.0.12
5.0.11
5.0.10
5.0.8
5.0.7
5.0.6
5.0.5
5.0.4
5.0.1
5.0.0
4.10.0
4.9.0
4.8.3
4.8.2
4.8.1
4.8.0
4.7.9
4.7.8
4.7.7
4.7.6
4.7.5
4.6.7
4.6.6
4.6.5
4.6.4
4.6.3
4.6.2
4.6.0
4.5.1
4.5.0
4.4.4
4.4.3
4.4.1
4.4.0
4.3.7
4.3.6
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
1.0.2
1.0.1
0.1.0
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.2
0.0.1
A compiler for generating reliability artifacts from service expectation definitions.
Current section
Files
Jump to
Current section
Files
src/caffeine_query_language/parser_ffi.erl
%% Fast byte-level helpers paralleling parser_ffi.mjs. Erlang strings are UTF-8
%% binaries; for ASCII tokens (operators, parens, keyword bytes) byte position
%% equals UTF-8 codepoint position, so binary:at / binary:part are correct.
-module(parser_ffi).
-export([code_unit_at/2, substring_equals_at/3, code_unit_length/1, slice_codeunits/3]).
code_unit_at(S, I) when is_binary(S), is_integer(I), I >= 0 ->
case byte_size(S) > I of
true -> binary:at(S, I);
false -> -1
end;
code_unit_at(_, _) -> -1.
substring_equals_at(Haystack, Pos, Needle) when is_binary(Haystack), is_binary(Needle), is_integer(Pos), Pos >= 0 ->
NeedleSize = byte_size(Needle),
case byte_size(Haystack) >= Pos + NeedleSize of
true -> binary:part(Haystack, Pos, NeedleSize) =:= Needle;
false -> false
end;
substring_equals_at(_, _, _) -> false.
code_unit_length(S) when is_binary(S) -> byte_size(S);
code_unit_length(_) -> 0.
slice_codeunits(S, Start, Len) when is_binary(S), is_integer(Start), is_integer(Len), Start >= 0, Len > 0 ->
Total = byte_size(S),
case Start >= Total of
true -> <<>>;
false ->
ClampedLen = min(Len, Total - Start),
binary:part(S, Start, ClampedLen)
end;
slice_codeunits(_, _, _) -> <<>>.