Current section
Files
Jump to
Current section
Files
src/internal@carpenter@table.erl
-module(internal@carpenter@table).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/internal/carpenter/table.gleam").
-export([build/1, privacy/2, write_concurrency/2, read_concurrency/2, decentralized_counters/2, compression/2, set/1, ordered_set/1, insert/2, insert_new/2, lookup/2, delete/2, delete_all/1, delete_object/2, drop/1, give_away/3, contains/2, ref/1, take/2]).
-export_type([table_builder/2, privacy/0, write_concurrency/0, table/2, set/2]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-type table_builder(HQU, HQV) :: {table_builder,
binary(),
gleam@option:option(privacy()),
gleam@option:option(write_concurrency()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
boolean()} |
{gleam_phantom, HQU, HQV}.
-type privacy() :: private | protected | public.
-type write_concurrency() :: write_concurrency |
no_write_concurrency |
auto_write_concurrency.
-type table(HQW, HQX) :: {table, gleam@erlang@atom:atom_()} |
{gleam_phantom, HQW, HQX}.
-type set(HQY, HQZ) :: {set, table(HQY, HQZ)}.
-file("src/internal/carpenter/table.gleam", 35).
?DOC(false).
-spec build(binary()) -> table_builder(any(), any()).
build(Name) ->
{table_builder, Name, none, none, none, none, false}.
-file("src/internal/carpenter/table.gleam", 48).
?DOC(false).
-spec privacy(table_builder(HRE, HRF), privacy()) -> table_builder(HRE, HRF).
privacy(Builder, Privacy) ->
{table_builder,
erlang:element(2, Builder),
{some, Privacy},
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder)}.
-file("src/internal/carpenter/table.gleam", 57).
?DOC(false).
-spec write_concurrency(table_builder(HRK, HRL), write_concurrency()) -> table_builder(HRK, HRL).
write_concurrency(Builder, Con) ->
{table_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
{some, Con},
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder)}.
-file("src/internal/carpenter/table.gleam", 65).
?DOC(false).
-spec read_concurrency(table_builder(HRQ, HRR), boolean()) -> table_builder(HRQ, HRR).
read_concurrency(Builder, Con) ->
{table_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
{some, Con},
erlang:element(6, Builder),
erlang:element(7, Builder)}.
-file("src/internal/carpenter/table.gleam", 77).
?DOC(false).
-spec decentralized_counters(table_builder(HRW, HRX), boolean()) -> table_builder(HRW, HRX).
decentralized_counters(Builder, Counters) ->
{table_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
{some, Counters},
erlang:element(7, Builder)}.
-file("src/internal/carpenter/table.gleam", 85).
?DOC(false).
-spec compression(table_builder(HSC, HSD), boolean()) -> table_builder(HSC, HSD).
compression(Builder, Compressed) ->
{table_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
Compressed}.
-file("src/internal/carpenter/table.gleam", 92).
?DOC(false).
-spec privacy_prop(privacy()) -> gleam@dynamic:dynamic_().
privacy_prop(Prop) ->
internal@carpenter@props:atom((case Prop of
private ->
<<"private"/utf8>>;
protected ->
<<"protected"/utf8>>;
public ->
<<"public"/utf8>>
end)).
-file("src/internal/carpenter/table.gleam", 102).
?DOC(false).
-spec write_concurrency_prop(write_concurrency()) -> gleam@dynamic:dynamic_().
write_concurrency_prop(Prop) ->
internal@carpenter@props:pair(
<<"write_concurrency"/utf8>>,
(internal@carpenter@props:atom(case Prop of
write_concurrency ->
<<"true"/utf8>>;
no_write_concurrency ->
<<"false"/utf8>>;
auto_write_concurrency ->
<<"auto"/utf8>>
end))
).
-file("src/internal/carpenter/table.gleam", 112).
?DOC(false).
-spec decentralized_counters_prop(boolean()) -> gleam@dynamic:dynamic_().
decentralized_counters_prop(Prop) ->
internal@carpenter@props:pair(<<"decentralized_counters"/utf8>>, Prop).
-file("src/internal/carpenter/table.gleam", 116).
?DOC(false).
-spec build_table(table_builder(any(), any()), binary()) -> {ok,
gleam@erlang@atom:atom_()} |
{error, nil}.
build_table(Builder, Table_type) ->
Name = erlang:binary_to_atom(erlang:element(2, Builder)),
carpenter_ffi:new_table(
Name,
begin
_pipe = [internal@carpenter@props:atom(Table_type),
internal@carpenter@props:atom(<<"named_table"/utf8>>)],
_pipe@1 = internal@carpenter@props:append(
_pipe,
erlang:element(3, Builder),
fun privacy_prop/1
),
_pipe@2 = internal@carpenter@props:append(
_pipe@1,
erlang:element(4, Builder),
fun write_concurrency_prop/1
),
_pipe@3 = internal@carpenter@props:append(
_pipe@2,
erlang:element(5, Builder),
fun(_capture) ->
internal@carpenter@props:pair(
<<"read_concurrency"/utf8>>,
_capture
)
end
),
_pipe@4 = internal@carpenter@props:append(
_pipe@3,
erlang:element(6, Builder),
fun decentralized_counters_prop/1
),
internal@carpenter@props:append_if(
_pipe@4,
erlang:element(7, Builder),
fun() ->
internal@carpenter@props:atom(<<"compressed"/utf8>>)
end
)
end
).
-file("src/internal/carpenter/table.gleam", 132).
?DOC(false).
-spec set(table_builder(HSP, HSQ)) -> {ok, set(HSP, HSQ)} | {error, nil}.
set(Builder) ->
case build_table(Builder, <<"set"/utf8>>) of
{ok, T} ->
{ok, {set, {table, T}}};
{error, _} ->
{error, nil}
end.
-file("src/internal/carpenter/table.gleam", 140).
?DOC(false).
-spec ordered_set(table_builder(HSX, HSY)) -> {ok, set(HSX, HSY)} | {error, nil}.
ordered_set(Builder) ->
case build_table(Builder, <<"ordered_set"/utf8>>) of
{ok, T} ->
{ok, {set, {table, T}}};
{error, _} ->
{error, nil}
end.
-file("src/internal/carpenter/table.gleam", 156).
?DOC(false).
-spec insert(set(HTF, HTG), list({HTF, HTG})) -> nil.
insert(Set, Objects) ->
ets:insert(erlang:element(2, erlang:element(2, Set)), Objects),
nil.
-file("src/internal/carpenter/table.gleam", 164).
?DOC(false).
-spec insert_new(set(HTK, HTL), list({HTK, HTL})) -> boolean().
insert_new(Set, Objects) ->
ets:insert_new(erlang:element(2, erlang:element(2, Set)), Objects).
-file("src/internal/carpenter/table.gleam", 169).
?DOC(false).
-spec lookup(set(HTP, HTQ), HTP) -> list({HTP, HTQ}).
lookup(Set, Key) ->
ets:lookup(erlang:element(2, erlang:element(2, Set)), Key).
-file("src/internal/carpenter/table.gleam", 174).
?DOC(false).
-spec delete(set(HTU, any()), HTU) -> nil.
delete(Set, Key) ->
ets:delete(erlang:element(2, erlang:element(2, Set)), Key),
nil.
-file("src/internal/carpenter/table.gleam", 180).
?DOC(false).
-spec delete_all(set(any(), any())) -> nil.
delete_all(Set) ->
ets:delete_all_objects(erlang:element(2, erlang:element(2, Set))),
nil.
-file("src/internal/carpenter/table.gleam", 186).
?DOC(false).
-spec delete_object(set(HUC, HUD), {HUC, HUD}) -> nil.
delete_object(Set, Object) ->
ets:delete_object(erlang:element(2, erlang:element(2, Set)), Object),
nil.
-file("src/internal/carpenter/table.gleam", 192).
?DOC(false).
-spec drop(set(any(), any())) -> nil.
drop(Set) ->
ets:delete(erlang:element(2, erlang:element(2, Set))),
nil.
-file("src/internal/carpenter/table.gleam", 198).
?DOC(false).
-spec give_away(set(any(), any()), gleam@erlang@process:pid_(), any()) -> nil.
give_away(Set, Pid, Gift_data) ->
ets:give_away(erlang:element(2, erlang:element(2, Set)), Pid, Gift_data),
nil.
-file("src/internal/carpenter/table.gleam", 204).
?DOC(false).
-spec contains(set(HUP, any()), HUP) -> boolean().
contains(Set, Key) ->
ets:member(erlang:element(2, erlang:element(2, Set)), Key).
-file("src/internal/carpenter/table.gleam", 209).
?DOC(false).
-spec ref(binary()) -> {ok, set(any(), any())} | {error, nil}.
ref(Name) ->
case gleam_erlang_ffi:atom_from_string(Name) of
{ok, T} ->
{ok, {set, {table, T}}};
{error, _} ->
{error, nil}
end.
-file("src/internal/carpenter/table.gleam", 217).
?DOC(false).
-spec take(set(HUZ, HVA), HUZ) -> list({HUZ, HVA}).
take(Set, Key) ->
ets:take(erlang:element(2, erlang:element(2, Set)), Key).