Current section
Files
Jump to
Current section
Files
src/lamb@table.erl
-module(lamb@table).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([from_name/1, is_alive/1, create/1, delete/1]).
-export_type([table/2, config/0, kind/0, access/0, error/0]).
-type table(GND, GNE) :: {table,
gleam@erlang:reference_(),
gleam@erlang@atom:atom_(),
kind(),
access(),
boolean()} |
{gleam_phantom, GND, GNE}.
-type config() :: {config, binary(), access(), kind(), boolean()}.
-type kind() :: set | bag.
-type access() :: public | protected | private.
-type error() :: {already_registered, gleam@erlang@atom:atom_()}.
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb/table.gleam", 76).
-spec from_name(binary()) -> {ok, gleam@erlang:reference_()} | {error, nil}.
from_name(Name) ->
case gleam_erlang_ffi:atom_from_string(Name) of
{ok, Atom} ->
lamb_erlang_ffi:table_id(Atom);
{error, _} ->
{error, nil}
end.
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb/table.gleam", 83).
-spec is_alive(table(any(), any())) -> boolean().
is_alive(Table) ->
case lamb_erlang_ffi:table_id(erlang:element(2, Table)) of
{ok, _} ->
true;
{error, _} ->
false
end.
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb/table.gleam", 45).
-spec create(config()) -> {ok, table(any(), any())} | {error, error()}.
create(Config) ->
{config, Name, Access, Kind, Registered} = Config,
Name@1 = erlang:binary_to_atom(Name),
Create = fun() ->
Table_id = lamb_erlang_ffi:create_table(
Name@1,
Access,
Kind,
Registered
),
{table, Table_id, Name@1, Kind, Access, Registered}
end,
case {Registered, lamb_erlang_ffi:table_id(Name@1)} of
{true, {ok, _}} ->
{error, {already_registered, Name@1}};
{_, _} ->
{ok, Create()}
end.
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb/table.gleam", 62).
-spec delete(table(any(), any())) -> nil.
delete(Table) ->
case is_alive(Table) of
true ->
ets:delete(erlang:element(2, Table)),
nil;
false ->
nil
end.