Current section

Files

Jump to
rememo src internal@ets@memo.erl
Raw

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("/Users/nick/Github/rememo/src/internal/ets/memo.gleam", 13).
-spec create(fun((carpenter@table:set(any(), any())) -> NRM)) -> NRM.
create(Fun) ->
Table_name = begin
_pipe = tempo@time:now_unique(),
gleam@string:inspect(_pipe)
end,
_assert_subject = begin
_pipe@1 = carpenter@table:build(Table_name),
_pipe@2 = carpenter@table:privacy(_pipe@1, private),
_pipe@3 = carpenter@table:write_concurrency(
_pipe@2,
auto_write_concurrency
),
_pipe@4 = carpenter@table:read_concurrency(_pipe@3, true),
_pipe@5 = carpenter@table:decentralized_counters(_pipe@4, true),
_pipe@6 = carpenter@table:compression(_pipe@5, false),
carpenter@table:set(_pipe@6)
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 => 16})
end,
Result = Fun(Cache_table),
carpenter@table:drop(Cache_table),
Result.
-file("/Users/nick/Github/rememo/src/internal/ets/memo.gleam", 31).
-spec set(carpenter@table:set(NRO, NRP), NRO, NRP) -> nil.
set(Cache, Key, Value) ->
carpenter@table:insert(Cache, [{Key, Value}]).
-file("/Users/nick/Github/rememo/src/internal/ets/memo.gleam", 36).
-spec get(carpenter@table:set(NRS, NRT), NRS) -> {ok, NRT} | {error, nil}.
get(Cache, Key) ->
case carpenter@table:lookup(Cache, Key) of
[] ->
{error, nil};
[{_, V} | _] ->
{ok, V}
end.
-file("/Users/nick/Github/rememo/src/internal/ets/memo.gleam", 44).
-spec memoize(carpenter@table:set(NRY, NRZ), NRY, fun(() -> NRZ)) -> NRZ.
memoize(Cache, Key, Fun) ->
case get(Cache, Key) of
{ok, Value} ->
Value;
{error, nil} ->
Result = Fun(),
set(Cache, Key, Result),
Result
end.