-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 ).