Current section
Files
Jump to
Current section
Files
src/mala_ffi.erl
-module(mala_ffi).
-export([
bag_new/1, bag_get/2, bag_has_key/2, bag_insert/3, bag_delete/3, drop/1,
bag_delete_value/2, bag_delete_key/2
]).
bag_new(Access) ->
ets:new(mala_table, [bag, Access]).
bag_has_key(Bag, Key) ->
try
{ok, ets:member(Bag, Key)}
catch error:badarg -> {error, nil}
end.
bag_get(Bag, Key) ->
try
Items1 = ets:lookup(Bag, Key),
{ok, lists:map(fun(Elem) -> element(2, Elem) end, Items1)}
catch error:badarg -> {error, nil}
end.
bag_insert(Bag, Key, Value) ->
try
ets:insert(Bag, {Key, Value}),
{ok, nil}
catch error:badarg -> {error, nil}
end.
bag_delete(Bag, Key, Value) ->
try
ets:delete_object(Bag, {Key, Value}),
{ok, nil}
catch error:badarg -> {error, nil}
end.
bag_delete_key(Bag, Key) ->
try
ets:delete(Bag, Key),
{ok, nil}
catch error:badarg -> {error, nil}
end.
bag_delete_value(Bag, Value) ->
try
MatchSpec = {
'$1',
[{'==', Value, {element, 2, '$1'}}],
[true]
},
{ok, ets:select_delete(Bag, [MatchSpec])}
catch error:badarg -> {error, nil}
end.
drop(Table) ->
try
ets:delete(Table),
{ok, nil}
catch error:badarg -> {error, nil}
end.