-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(JRB, JRC) :: {table_builder, binary(), gleam@option:option(privacy()), gleam@option:option(write_concurrency()), gleam@option:option(boolean()), gleam@option:option(boolean()), boolean()} | {gleam_phantom, JRB, JRC}. -type privacy() :: private | protected | public. -type write_concurrency() :: write_concurrency | no_write_concurrency | auto_write_concurrency. -type table(JRD, JRE) :: {table, gleam@erlang@atom:atom_()} | {gleam_phantom, JRD, JRE}. -type set(JRF, JRG) :: {set, table(JRF, JRG)}. -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(JRL, JRM), privacy()) -> table_builder(JRL, JRM). 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(JRR, JRS), write_concurrency()) -> table_builder(JRR, JRS). 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(JRX, JRY), boolean()) -> table_builder(JRX, JRY). 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(JSD, JSE), boolean()) -> table_builder(JSD, JSE). 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(JSJ, JSK), boolean()) -> table_builder(JSJ, JSK). 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(JSW, JSX)) -> {ok, set(JSW, JSX)} | {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(JTE, JTF)) -> {ok, set(JTE, JTF)} | {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(JTM, JTN), list({JTM, JTN})) -> 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(JTR, JTS), list({JTR, JTS})) -> 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(JTW, JTX), JTW) -> list({JTW, JTX}). 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(JUB, any()), JUB) -> 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(JUJ, JUK), {JUJ, JUK}) -> 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(JUW, any()), JUW) -> 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(JVG, JVH), JVG) -> list({JVG, JVH}). take(Set, Key) -> ets:take(erlang:element(2, erlang:element(2, Set)), Key).