#pragma once #include "byte_size.h" #include #include #include namespace NSQLComplete { namespace NPrivate { template concept CHashable = requires(const T& x) { { THash()(x) } -> std::convertible_to; }; template concept CCacheKey = std::regular && CHashable && CByteSized; template concept CCacheValue = std::copyable && CByteSized; }; // namespace NPrivate template class ICache: public TThrRefBase { public: using TPtr = TIntrusivePtr; struct TEntry { TMaybe Value = Nothing(); bool IsExpired = true; }; ~ICache() override = default; virtual NThreading::TFuture Get(const TKey& key) const = 0; virtual NThreading::TFuture Update(const TKey& key, TValue value) const = 0; }; } // namespace NSQLComplete