4#ifndef _Stroika_Foundation_Cache_TimedCache_h_
5#define _Stroika_Foundation_Cache_TimedCache_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
14#include "Stroika/Foundation/Common/Common.h"
58 namespace TimedCacheSupport {
66 template <
typename KEY,
typename VALUE,
typename STRICT_INORDER_COMPARER = less<KEY>>
81 enum class PurgeSpoiledDataFlagType {
82 eAutomaticallyPurgeSpoiledData,
83 eDontAutomaticallyPurgeSpoiledData
89 enum class LookupMarksDataAsRefreshed {
90 eTreatFoundThroughLookupAsRefreshed,
91 eDontTreatFoundThroughLookupAsRefreshed
256 template <
typename KEY,
typename VALUE,
typename TRAITS = TimedCacheSupport::DefaultTraits<KEY, VALUE>>
263 "TraitsType::InOrderComparerType - comparer not valid IInOrderComparer- see "
264 "ComparisonRelationDeclaration<Common::ComparisonRelationType::eStrictInOrder, function<bool(T, T)>");
267 using LookupMarksDataAsRefreshed = TimedCacheSupport::LookupMarksDataAsRefreshed;
270 using PurgeSpoiledDataFlagType = TimedCacheSupport::PurgeSpoiledDataFlagType;
299 struct CacheElement {
346 PurgeSpoiledDataFlagType
purgeSpoiledData = PurgeSpoiledDataFlagType::eAutomaticallyPurgeSpoiledData);
357 PurgeSpoiledDataFlagType
purgeSpoiledData = PurgeSpoiledDataFlagType::eAutomaticallyPurgeSpoiledData);
369 nonvirtual
void clear ();
381 [[
deprecated (
"Since Stroika v3.0d1, use PurgeSpoiledData or count on Add's purgeSpoiledData parameter)")]] nonvirtual
void DoBookkeeping ()
402 nonvirtual
void ClearIfNeeded_ ();
403 nonvirtual
void ClearOld_ ();
426#include "TimedCache.inl"
time_point< RealtimeClock, DurationSeconds > TimePointSeconds
TimePointSeconds is a simpler approach to chrono::time_point, which doesn't require using templates e...
chrono::duration< double > DurationSeconds
chrono::duration<double> - a time span (length of time) measured in seconds, but high precision.
LRUCache implements a simple least-recently-used caching strategy, with optional hashing (of keys) to...
Keep track of a bunch of objects, each with an associated 'freshness' which meet a TimedCache-associa...
nonvirtual void SetMinimumAllowedFreshness(Time::Duration minimumAllowedFreshness)
nonvirtual void PurgeSpoiledData()
nonvirtual Traversal::Iterable< CacheElement > Elements() const
nonvirtual VALUE LookupValue(typename Common::ArgByValueType< KEY > key, const function< VALUE(typename Common::ArgByValueType< KEY >)> &cacheFiller, LookupMarksDataAsRefreshed successfulLookupRefreshesAcceesFlag=LookupMarksDataAsRefreshed::eDontTreatFoundThroughLookupAsRefreshed, PurgeSpoiledDataFlagType purgeSpoiledData=PurgeSpoiledDataFlagType::eAutomaticallyPurgeSpoiledData)
nonvirtual optional< VALUE > Lookup(typename Common::ArgByValueType< KEY > key, Time::TimePointSeconds *lastRefreshedAt=nullptr) const
Returns the value associated with argument 'key', or nullopt, if its missing (missing same as expired...
nonvirtual Time::Duration GetMinimumAllowedFreshness() const
nonvirtual void Add(typename Common::ArgByValueType< KEY > key, typename Common::ArgByValueType< VALUE > result, PurgeSpoiledDataFlagType purgeSpoiledData=PurgeSpoiledDataFlagType::eAutomaticallyPurgeSpoiledData)
NOT a real mutex - just a debugging infrastructure support tool so in debug builds can be assured thr...
Duration is a chrono::duration<double> (=.
Iterable<T> is a base class for containers which easily produce an Iterator<T> to traverse them.
conditional_t<(sizeof(CHECK_T)<=2 *sizeof(void *)) and is_trivially_copyable_v< CHECK_T >, CHECK_T, const CHECK_T & > ArgByValueType
This is an alias for 'T' - but how we want to pass it on stack as formal parameter.