4#ifndef _Stroika_Foundation_Cache_SynchronizedTimedCache_h_
5#define _Stroika_Foundation_Cache_SynchronizedTimedCache_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
10#include <shared_mutex>
12#include "Stroika/Foundation/Cache/TimedCache.h"
33 template <
typename KEY,
typename VALUE,
typename TRAITS = TimedCacheSupport::DefaultTraits<KEY, VALUE>>
39 using LookupMarksDataAsRefreshed =
typename inherited::LookupMarksDataAsRefreshed;
42 using PurgeSpoiledDataFlagType =
typename inherited::PurgeSpoiledDataFlagType;
45 using CacheElement =
typename inherited::CacheElement;
95 bool fHoldWriteLockDuringCacheFill{
false};
128 PurgeSpoiledDataFlagType
purgeSpoiledData = PurgeSpoiledDataFlagType::eAutomaticallyPurgeSpoiledData);
135 TimedCacheSupport::PurgeSpoiledDataFlagType
purgeSpoiledData = PurgeSpoiledDataFlagType::eAutomaticallyPurgeSpoiledData);
148 nonvirtual
void clear ();
157 [[
deprecated (
"Since Stroika v3.0d1, use PurgeSpoiledData or count on Add's purgeSpoiledData parameter)")]] nonvirtual
void DoBookkeeping ()
171 mutable shared_timed_mutex fMutex_;
181#include "SynchronizedTimedCache.inl"
time_point< RealtimeClock, DurationSeconds > TimePointSeconds
TimePointSeconds is a simpler approach to chrono::time_point, which doesn't require using templates e...
LRUCache implements a simple least-recently-used caching strategy, with optional hashing (of keys) to...
nonvirtual void PurgeSpoiledData()
nonvirtual void Add(typename Common::ArgByValueType< KEY > key, typename Common::ArgByValueType< VALUE > result, TimedCacheSupport::PurgeSpoiledDataFlagType purgeSpoiledData=PurgeSpoiledDataFlagType::eAutomaticallyPurgeSpoiledData)
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 void SetMinimumAllowedFreshness(Time::Duration minimumAllowedFreshness)
nonvirtual void Remove(typename Common::ArgByValueType< KEY > key)
nonvirtual Time::Duration GetMinimumAllowedFreshness() const
nonvirtual optional< VALUE > Lookup(typename Common::ArgByValueType< KEY > key, Time::TimePointSeconds *lastRefreshedAt=nullptr) const
nonvirtual Traversal::Iterable< CacheElement > Elements() const
Keep track of a bunch of objects, each with an associated 'freshness' which meet a TimedCache-associa...
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.