-module(mala). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/mala.gleam"). -export([new/0, new_protected/0, new_private/0, get/2, insert/3, delete/3, delete_key/2, delete_value/2, drop_table/1]). -export_type([bag_table/2, non_owner_access/0]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. -type bag_table(EAH, EAI) :: any() | {gleam_phantom, EAH, EAI}. -type non_owner_access() :: public | protected | private. -file("src/mala.gleam", 20). ?DOC( " Create a new bag.\n" "\n" " The process that calls this function is the owner of the ETS table, and the\n" " table will be dropped when the owner process terminates.\n" "\n" " The access control is set to allow all processes to read and write to the\n" " table.\n" "\n" " See `new_protected` and `new_private` for other access control options.\n" ). -spec new() -> bag_table(any(), any()). new() -> mala_ffi:bag_new(public). -file("src/mala.gleam", 34). ?DOC( " Create a new bag.\n" "\n" " The process that calls this function is the owner of the ETS table, and the\n" " table will be dropped when the owner process terminates.\n" "\n" " The access control is set so only the process that created the table can\n" " write to it. All other processes can read from it.\n" "\n" " See `new` and `new_private` for other access control options.\n" ). -spec new_protected() -> bag_table(any(), any()). new_protected() -> mala_ffi:bag_new(protected). -file("src/mala.gleam", 48). ?DOC( " Create a new bag.\n" "\n" " The process that calls this function is the owner of the ETS table, and the\n" " table will be dropped when the owner process terminates.\n" "\n" " The access control is set so only the process that created the table can\n" " read from and write to it. All other processes cannot access the table.\n" "\n" " See `new` and `new_protected` for other access control options.\n" ). -spec new_private() -> bag_table(any(), any()). new_private() -> mala_ffi:bag_new(private). -file("src/mala.gleam", 70). ?DOC( " Key all values for a given key in the table.\n" "\n" " This function will return an error if the bag has been dropped, either explicitly\n" " with `drop_table` or implicitly by the owner process terminating.\n" ). -spec get(bag_table(EAZ, EBA), EAZ) -> {ok, list(EBA)} | {error, nil}. get(Table, Key) -> mala_ffi:bag_get(Table, Key). -file("src/mala.gleam", 79). ?DOC( " Insert a value for the given key in the table. If the key already has this\n" " value then there will be no change.\n" "\n" " This function will return an error if the bag has been dropped, either explicitly\n" " with `drop_table` or implicitly by the owner process terminating.\n" ). -spec insert(bag_table(EBG, EBH), EBG, EBH) -> {ok, nil} | {error, nil}. insert(Table, Key, Value) -> mala_ffi:bag_insert(Table, Key, Value). -file("src/mala.gleam", 87). ?DOC( " Delete a key-value pair from the table.\n" "\n" " This function will return an error if the bag has been dropped, either explicitly\n" " with `drop_table` or implicitly by the owner process terminating.\n" ). -spec delete(bag_table(EBM, EBN), EBM, EBN) -> {ok, nil} | {error, nil}. delete(Table, Key, Value) -> mala_ffi:bag_delete(Table, Key, Value). -file("src/mala.gleam", 95). ?DOC( " Delete all values for the given key in the table.\n" "\n" " This function will return an error if the bag has been dropped, either explicitly\n" " with `drop_table` or implicitly by the owner process terminating.\n" ). -spec delete_key(bag_table(EBS, any()), EBS) -> {ok, nil} | {error, nil}. delete_key(Table, Key) -> mala_ffi:bag_delete_key(Table, Key). -file("src/mala.gleam", 107). ?DOC( " Delete all instances of a given value from the table, no matter what key\n" " they are stored under.\n" "\n" " This performs a full table scan so is slower than the other operations in\n" " this module.\n" "\n" " This function will return an error if the bag has been dropped, either explicitly\n" " with `drop_table` or implicitly by the owner process terminating.\n" ). -spec delete_value(bag_table(any(), EBZ), EBZ) -> {ok, integer()} | {error, nil}. delete_value(Table, Value) -> mala_ffi:bag_delete_value(Table, Value). -file("src/mala.gleam", 114). ?DOC( " Drop a table, freeing the memory it used.\n" "\n" " Any attempt to use a table after it was dropped will result in an error.\n" ). -spec drop_table(bag_table(any(), any())) -> nil. drop_table(Table) -> mala_ffi:drop(Table).