Current section
Files
Jump to
Current section
Files
src/internal@ets@memo.erl
-module(internal@ets@memo).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([create/1, set/3, get/2, memoize/3]).
-file("/home/wsl/gleam/rememo/src/internal/ets/memo.gleam", 8).
-spec create(fun((carpenter@table:set(any(), any())) -> IGG)) -> IGG.
create(Fun) ->
Table_name = youid@uuid:v4_string(),
_assert_subject = begin
_pipe = carpenter@table:build(Table_name),
_pipe@1 = carpenter@table:privacy(_pipe, private),
_pipe@2 = carpenter@table:write_concurrency(
_pipe@1,
auto_write_concurrency
),
_pipe@3 = carpenter@table:read_concurrency(_pipe@2, true),
_pipe@4 = carpenter@table:decentralized_counters(_pipe@3, true),
_pipe@5 = carpenter@table:compression(_pipe@4, false),
carpenter@table:set(_pipe@5)
end,
{ok, Cache_table} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
value => _assert_fail,
module => <<"internal/ets/memo"/utf8>>,
function => <<"create"/utf8>>,
line => 11})
end,
Result = Fun(Cache_table),
carpenter@table:drop(Cache_table),
Result.
-file("/home/wsl/gleam/rememo/src/internal/ets/memo.gleam", 25).
-spec set(carpenter@table:set(IGI, IGJ), IGI, IGJ) -> nil.
set(Cache, Key, Value) ->
carpenter@table:insert(Cache, [{Key, Value}]).
-file("/home/wsl/gleam/rememo/src/internal/ets/memo.gleam", 29).
-spec get(carpenter@table:set(IGM, IGN), IGM) -> {ok, IGN} | {error, nil}.
get(Cache, Key) ->
case carpenter@table:lookup(Cache, Key) of
[] ->
{error, nil};
[{_, V} | _] ->
{ok, V}
end.
-file("/home/wsl/gleam/rememo/src/internal/ets/memo.gleam", 36).
-spec memoize(carpenter@table:set(IGS, IGT), IGS, fun(() -> IGT)) -> IGT.
memoize(Cache, Key, Fun) ->
case get(Cache, Key) of
{ok, Value} ->
Value;
{error, nil} ->
Result = Fun(),
set(Cache, Key, Result),
Result
end.