-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, lookup/2, any/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(GMN, GMO) :: {table, gleam@erlang:reference_(), gleam@erlang@atom:atom_(), kind(), access(), boolean()} | {gleam_phantom, GMN, GMO}. -type kind() :: set | bag. -type access() :: public | protected | private. -type error() :: {already_registered, gleam@erlang@atom:atom_()}. -type partial(GMP) :: {records, list(GMP), step()} | {'end', list(GMP)}. -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(GNQ, GNR), GNQ, GNR) -> 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 lookup(table(GOO, GOP), GOO) -> list(GOP). lookup(Table, Index) -> case erlang:element(4, Table) of set -> lamb_erlang_ffi:lookup_set(erlang:element(2, Table), Index); bag -> lamb_erlang_ffi:lookup_bag(erlang:element(2, Table), Index) end. -file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 152). -spec any(table(GOT, any()), GOT) -> boolean(). any(Table, Index) -> ets:member(erlang:element(2, Table), Index). -file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 156). -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", 163). -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", 171). -spec continue(step()) -> partial(any()). continue(Step) -> lamb_erlang_ffi:continue(Step). -file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 175). -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]).