Current section
Files
Jump to
Current section
Files
src/gemo.erl
-module(gemo).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([reset_cache/0, cache_size/0, cache_count/0, cache_density/0, memoize0/2, memoize1/3, memoize2/4, memoize3/5, memoize4/6, memoize5/7, memoize6/8, memoize7/9, memoize8/10, memoize9/11, memoize10/12]).
-file("/home/joe/Projects/gleam/memo/src/gemo.gleam", 22).
-spec get_table() -> lamb:table(any(), any()).
get_table() ->
_pipe = <<"@@#!*(#@&!_memoization_cache"/utf8>>,
_pipe@1 = lamb:from_name(_pipe),
gleam@result:lazy_unwrap(
_pipe@1,
fun() ->
_assert_subject = lamb:create(
<<"@@#!*(#@&!_memoization_cache"/utf8>>,
private,
set,
true
),
{ok, 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 => <<"gemo"/utf8>>,
function => <<"get_table"/utf8>>,
line => 26})
end,
Table
end
).
-file("/home/joe/Projects/gleam/memo/src/gemo.gleam", 8).
-spec do_memoize(any(), any(), fun(() -> LLH)) -> LLH.
do_memoize(Func, Args, Cb) ->
Table = get_table(),
case lamb:lookup(Table, {Func, Args}) of
[] ->
Out = Cb(),
lamb:insert(Table, {Func, Args}, Out),
Out;
[Cache | _] ->
Cache
end.
-file("/home/joe/Projects/gleam/memo/src/gemo.gleam", 32).
-spec reset_cache() -> nil.
reset_cache() ->
_pipe = get_table(),
lamb:delete(_pipe).
-file("/home/joe/Projects/gleam/memo/src/gemo.gleam", 42).
-spec cache_size() -> integer().
cache_size() ->
_pipe = erlang:element(2, get_table()),
gemo_ffi:table_size(_pipe).
-file("/home/joe/Projects/gleam/memo/src/gemo.gleam", 52).
-spec cache_count() -> integer().
cache_count() ->
_pipe = erlang:element(2, get_table()),
gemo_ffi:table_count(_pipe).
-file("/home/joe/Projects/gleam/memo/src/gemo.gleam", 58).
-spec cache_density() -> float().
cache_density() ->
case begin
_pipe@1 = cache_count(),
erlang:float(_pipe@1)
end of
+0.0 -> +0.0;
-0.0 -> -0.0;
Gleam@denominator -> begin
_pipe = cache_size(),
erlang:float(_pipe)
end
/ Gleam@denominator
end.
-file("/home/joe/Projects/gleam/memo/src/gemo.gleam", 73).
-spec memoize0(fun(() -> LLO), fun(() -> LLO)) -> LLO.
memoize0(Func, Cb) ->
do_memoize(Func, {}, Cb).
-file("/home/joe/Projects/gleam/memo/src/gemo.gleam", 87).
-spec memoize1(fun((LLP) -> LLQ), LLP, fun(() -> LLQ)) -> LLQ.
memoize1(Func, Arg1, Cb) ->
do_memoize(Func, {Arg1}, Cb).
-file("/home/joe/Projects/gleam/memo/src/gemo.gleam", 92).
-spec memoize2(fun((LLR, LLS) -> LLT), LLR, LLS, fun(() -> LLT)) -> LLT.
memoize2(Func, Arg1, Arg2, Cb) ->
do_memoize(Func, {Arg1, Arg2}, Cb).
-file("/home/joe/Projects/gleam/memo/src/gemo.gleam", 97).
-spec memoize3(fun((LLU, LLV, LLW) -> LLX), LLU, LLV, LLW, fun(() -> LLX)) -> LLX.
memoize3(Func, Arg1, Arg2, Arg3, Cb) ->
do_memoize(Func, {Arg1, Arg2, Arg3}, Cb).
-file("/home/joe/Projects/gleam/memo/src/gemo.gleam", 108).
-spec memoize4(
fun((LLY, LLZ, LMA, LMB) -> LMC),
LLY,
LLZ,
LMA,
LMB,
fun(() -> LMC)
) -> LMC.
memoize4(Func, Arg1, Arg2, Arg3, Arg4, Cb) ->
do_memoize(Func, {Arg1, Arg2, Arg3, Arg4}, Cb).
-file("/home/joe/Projects/gleam/memo/src/gemo.gleam", 120).
-spec memoize5(
fun((LMD, LME, LMF, LMG, LMH) -> LMI),
LMD,
LME,
LMF,
LMG,
LMH,
fun(() -> LMI)
) -> LMI.
memoize5(Func, Arg1, Arg2, Arg3, Arg4, Arg5, Cb) ->
do_memoize(Func, {Arg1, Arg2, Arg3, Arg4, Arg5}, Cb).
-file("/home/joe/Projects/gleam/memo/src/gemo.gleam", 133).
-spec memoize6(
fun((LMJ, LMK, LML, LMM, LMN, LMO) -> LMP),
LMJ,
LMK,
LML,
LMM,
LMN,
LMO,
fun(() -> LMP)
) -> LMP.
memoize6(Func, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Cb) ->
do_memoize(Func, {Arg1, Arg2, Arg3, Arg4, Arg5, Arg6}, Cb).
-file("/home/joe/Projects/gleam/memo/src/gemo.gleam", 147).
-spec memoize7(
fun((LMQ, LMR, LMS, LMT, LMU, LMV, LMW) -> LMX),
LMQ,
LMR,
LMS,
LMT,
LMU,
LMV,
LMW,
fun(() -> LMX)
) -> LMX.
memoize7(Func, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Cb) ->
do_memoize(Func, {Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7}, Cb).
-file("/home/joe/Projects/gleam/memo/src/gemo.gleam", 162).
-spec memoize8(
fun((LMY, LMZ, LNA, LNB, LNC, LND, LNE, LNF) -> LNG),
LMY,
LMZ,
LNA,
LNB,
LNC,
LND,
LNE,
LNF,
fun(() -> LNG)
) -> LNG.
memoize8(Func, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Cb) ->
do_memoize(Func, {Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8}, Cb).
-file("/home/joe/Projects/gleam/memo/src/gemo.gleam", 178).
-spec memoize9(
fun((LNH, LNI, LNJ, LNK, LNL, LNM, LNN, LNO, LNP) -> LNQ),
LNH,
LNI,
LNJ,
LNK,
LNL,
LNM,
LNN,
LNO,
LNP,
fun(() -> LNQ)
) -> LNQ.
memoize9(Func, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Cb) ->
do_memoize(Func, {Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9}, Cb).
-file("/home/joe/Projects/gleam/memo/src/gemo.gleam", 195).
-spec memoize10(
fun((LNR, LNS, LNT, LNU, LNV, LNW, LNX, LNY, LNZ, LOA) -> LOB),
LNR,
LNS,
LNT,
LNU,
LNV,
LNW,
LNX,
LNY,
LNZ,
LOA,
fun(() -> LOB)
) -> LOB.
memoize10(Func, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Cb) ->
do_memoize(
Func,
{Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10},
Cb
).