Current section

Files

Jump to
lamb src lamb.erl
Raw

src/lamb.erl

-module(lamb).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([from_name/1, is_alive/1, create/4, delete/1, insert/3, remove/2, search/2, batch/3, continue/1, count/2]).
-export_type([table/2, kind/0, access/0, error/0, partial/1, step/0]).
-type table(GMI, GMJ) :: {table,
gleam@erlang:reference_(),
gleam@erlang@atom:atom_(),
kind(),
access(),
boolean()} |
{gleam_phantom, GMI, GMJ}.
-type kind() :: set | bag.
-type access() :: public | protected | private.
-type error() :: {already_registered, gleam@erlang@atom:atom_()}.
-type partial(GMK) :: {records, list(GMK), step()} | {'end', list(GMK)}.
-type step() :: any().
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 85).
-spec from_string(binary()) -> {ok, gleam@erlang@atom:atom_()} | {error, nil}.
from_string(Name) ->
_pipe = Name,
_pipe@1 = gleam_erlang_ffi:atom_from_string(_pipe),
gleam@result:replace_error(_pipe@1, nil).
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 76).
-spec from_name(binary()) -> {ok, table(any(), any())} | {error, nil}.
from_name(Name) ->
gleam@result:'try'(
from_string(Name),
fun(Name@1) ->
gleam@result:'try'(
lamb_erlang_ffi:table_id(Name@1),
fun(Table_id) ->
gleam@result:'try'(
lamb_erlang_ffi:table_info(Table_id),
fun(Info) ->
{Name@2, Kind, Access, Registered} = Info,
Table = {table,
Table_id,
Name@2,
Kind,
Access,
Registered},
{ok, Table}
end
)
end
)
end
).
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 91).
-spec is_alive(table(any(), any())) -> boolean().
is_alive(Table) ->
case lamb_erlang_ffi:table_info(erlang:element(2, Table)) of
{ok, _} ->
true;
{error, _} ->
false
end.
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 39).
-spec create(binary(), access(), kind(), boolean()) -> {ok, table(any(), any())} |
{error, error()}.
create(Name, Access, Kind, Registered) ->
Name@1 = erlang:binary_to_atom(Name),
case {Registered, lamb_erlang_ffi:table_id(Name@1)} of
{true, {ok, _}} ->
_pipe = {already_registered, Name@1},
{error, _pipe};
{_, _} ->
_pipe@1 = lamb_erlang_ffi:create_table(
Name@1,
Access,
Kind,
Registered
),
_pipe@2 = {table, _pipe@1, Name@1, Kind, Access, Registered},
{ok, _pipe@2}
end.
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 61).
-spec delete(table(any(), any())) -> nil.
delete(Table) ->
case lamb_erlang_ffi:table_info(erlang:element(2, Table)) of
{ok, _} ->
ets:delete(erlang:element(2, Table)),
nil;
{error, _} ->
nil
end.
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 117).
-spec insert(table(GNL, GNM), GNL, GNM) -> nil.
insert(Table, Index, Record) ->
Table_id = erlang:element(2, Table),
_assert_subject = ets:insert(Table_id, [{Index, Record}]),
true = case _assert_subject of
true -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
value => _assert_fail,
module => <<"lamb"/utf8>>,
function => <<"insert"/utf8>>,
line => 119})
end,
nil.
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 124).
-spec remove(table(any(), any()), {{any(), any()}, list(nil), list(any())}) -> integer().
remove(Table, Query) ->
Table_id = erlang:element(2, Table),
Query@1 = begin
_pipe = Query,
lamb@query:map(_pipe, fun(_, _) -> true end)
end,
ets:select_delete(Table_id, [Query@1]).
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 145).
-spec search(table(any(), any()), {{any(), any()}, list(nil), list(any())}) -> list(any()).
search(Table, Query) ->
ets:select(erlang:element(2, Table), [Query]).
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 152).
-spec batch(
table(any(), any()),
integer(),
{{any(), any()}, list(nil), list(any())}
) -> partial(any()).
batch(Table, Limit, Query) ->
lamb_erlang_ffi:batch(erlang:element(2, Table), Limit, [Query]).
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 160).
-spec continue(step()) -> partial(any()).
continue(Step) ->
lamb_erlang_ffi:continue(Step).
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 164).
-spec count(table(any(), any()), {{any(), any()}, list(nil), list(any())}) -> integer().
count(Table, Query) ->
Query@1 = begin
_pipe = Query,
lamb@query:map(_pipe, fun(_, _) -> true end)
end,
ets:select_count(erlang:element(2, Table), [Query@1]).