aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/Foundation/include/Poco/UniqueAccessExpireCache.h
diff options
context:
space:
mode:
authorDevtools Arcadia <arcadia-devtools@yandex-team.ru>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/libs/poco/Foundation/include/Poco/UniqueAccessExpireCache.h
downloadydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/libs/poco/Foundation/include/Poco/UniqueAccessExpireCache.h')
-rw-r--r--contrib/libs/poco/Foundation/include/Poco/UniqueAccessExpireCache.h73
1 files changed, 73 insertions, 0 deletions
diff --git a/contrib/libs/poco/Foundation/include/Poco/UniqueAccessExpireCache.h b/contrib/libs/poco/Foundation/include/Poco/UniqueAccessExpireCache.h
new file mode 100644
index 0000000000..a2d58f6433
--- /dev/null
+++ b/contrib/libs/poco/Foundation/include/Poco/UniqueAccessExpireCache.h
@@ -0,0 +1,73 @@
+//
+// UniqueAccessExpireCache.h
+//
+// Library: Foundation
+// Package: Cache
+// Module: UniqueAccessExpireCache
+//
+// Definition of the UniqueAccessExpireCache class.
+//
+// Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef Foundation_UniqueAccessExpireCache_INCLUDED
+#define Foundation_UniqueAccessExpireCache_INCLUDED
+
+
+#include "Poco/AbstractCache.h"
+#include "Poco/UniqueAccessExpireStrategy.h"
+
+
+namespace Poco {
+
+
+template <
+ class TKey,
+ class TValue,
+ class TMutex = FastMutex,
+ class TEventMutex = FastMutex
+>
+class UniqueAccessExpireCache: public AbstractCache<TKey, TValue, UniqueAccessExpireStrategy<TKey, TValue>, TMutex, TEventMutex>
+ /// An UniqueAccessExpireCache caches entries for a given time span. In contrast
+ /// to ExpireCache which only allows to set a per cache expiration value, it allows to define
+ /// expiration per CacheEntry.
+ /// Each TValue object must thus offer the following method:
+ ///
+ /// const Poco::Timespan& getTimeout() const;
+ ///
+ /// which returns the relative timespan for how long the entry should be valid without being accessed!
+ /// The absolute expire timepoint is calculated as now() + getTimeout().
+ /// Accessing an object will update this absolute expire timepoint.
+ /// You can use the Poco::AccessExpirationDecorator to add the getExpiration
+ /// method to values that do not have a getExpiration function.
+ ///
+ /// Be careful when using an UniqueAccessExpireCache. A cache is often used
+ /// like cache.has(x) followed by cache.get x). Note that it could happen
+ /// that the "has" call works, then the current execution thread gets descheduled, time passes,
+ /// the entry gets invalid, thus leading to an empty SharedPtr being returned
+ /// when "get" is invoked.
+{
+public:
+ UniqueAccessExpireCache():
+ AbstractCache<TKey, TValue, UniqueAccessExpireStrategy<TKey, TValue>, TMutex, TEventMutex>(UniqueAccessExpireStrategy<TKey, TValue>())
+ {
+ }
+
+ ~UniqueAccessExpireCache()
+ {
+ }
+
+private:
+ UniqueAccessExpireCache(const UniqueAccessExpireCache& aCache);
+ UniqueAccessExpireCache& operator = (const UniqueAccessExpireCache& aCache);
+};
+
+
+} // namespace Poco
+
+
+#endif // Foundation_UniqueAccessExpireCache_INCLUDED