Current section
Files
Jump to
Current section
Files
src/bravo@oset.erl
-module(bravo@oset).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([new/3, insert/2, lookup/2, delete/1, delete_key/2, delete_all_objects/1, delete_object/2]).
-export_type([o_set/1]).
-opaque o_set(GIG) :: {o_set, gleam@erlang@atom:atom_(), integer()} |
{gleam_phantom, GIG}.
-spec new(binary(), integer(), bravo@etc:access()) -> {ok, o_set(any())} |
{error, gleam@option:option(bravo@error:erlang_error())}.
new(Name, Keypos, Access) ->
Atom = erlang:binary_to_atom(Name),
gleam@bool:guard(
Keypos < 1,
{error, none},
fun() ->
gleam@result:'try'(
begin
_pipe = bravo:try_new(Atom, [ordered_set, case Access of
public ->
public;
protected ->
protected;
private ->
private
end, named_table, {keypos, Keypos}, {write_concurrency,
auto}, {read_concurrency, true}, {decentralized_counters,
true}]),
gleam@result:map_error(_pipe, fun(E) -> {some, E} end)
end,
fun(A) -> {ok, {o_set, A, Keypos}} end
)
end
).
-spec insert(o_set(GIM), list(GIM)) -> boolean().
insert(Oset, Objects) ->
bravo:try_insert(erlang:element(2, Oset), erlang:element(3, Oset), Objects).
-spec lookup(o_set(GIP), any()) -> gleam@option:option(GIP).
lookup(Oset, Key) ->
case bravo:try_lookup(erlang:element(2, Oset), Key) of
[Res] ->
{some, Res};
_ ->
none
end.
-spec delete(o_set(any())) -> boolean().
delete(Oset) ->
bravo:try_delete(erlang:element(2, Oset)).
-spec delete_key(o_set(any()), any()) -> nil.
delete_key(Oset, Key) ->
bravo:try_delete_key(erlang:element(2, Oset), Key),
nil.
-spec delete_all_objects(o_set(any())) -> nil.
delete_all_objects(Oset) ->
bravo:try_delete_all_objects(erlang:element(2, Oset)),
nil.
-spec delete_object(o_set(GJA), GJA) -> nil.
delete_object(Oset, Object) ->
bravo:try_delete_object(erlang:element(2, Oset), Object),
nil.