4#include "Stroika/Foundation/Containers/Common.h"
13 template <
typename RESULT,
template <qStroika_
template_
template_BWA (
typename,
typename)>
class CACHE,
typename... ARGS>
14 requires (ICache<CACHE<tuple<ARGS...>, RESULT>, tuple<ARGS...>, RESULT>)
15 Memoizer<RESULT, CACHE, ARGS...>::Memoizer (
const function<RESULT (ARGS...)>& f, CACHE<tuple<ARGS...>, RESULT>&& cache)
17 , fCache_{forward<CACHE<tuple<ARGS...>, RESULT>> (cache)}
20 template <
typename RESULT,
template <qStroika_
template_
template_BWA (
typename,
typename)>
class CACHE,
typename... ARGS>
21 requires (ICache<CACHE<tuple<ARGS...>, RESULT>, tuple<ARGS...>, RESULT>)
25 return fCache_.LookupValue (make_tuple (args...), [&] (
const tuple<ARGS...>& t) {
return apply (fFunction_, t); });
34 template <
template <
typename...>
typename CACHE,
typename F,
typename Tuple>
35 struct memoizer_builder;
36 template <
template <
typename...>
typename CACHE,
typename F,
typename... Args>
37 struct memoizer_builder<CACHE, F,
std::tuple<Args...>> {
41 template <
template <qStroika_
template_
template_BWA (
typename,
typename)>
typename CACHE,
typename FUNCTION>
42 auto Factory::Memoizer::Make (FUNCTION&& f)
45 typename Private_::memoizer_builder<CACHE, FUNCTION, ArgsTuple>::type m (forward<FUNCTION> (f));
LRUCache implements a simple least-recently-used caching strategy, with optional hashing (of keys) to...
Cache the results of expensive computations transparently.
Extract the number of arguments, return type, and each individual argument type from a lambda or simp...