aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/Foundation/include/Poco/UniqueExpireStrategy.h
diff options
context:
space:
mode:
authororivej <orivej@yandex-team.ru>2022-02-10 16:44:49 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:44:49 +0300
commit718c552901d703c502ccbefdfc3c9028d608b947 (patch)
tree46534a98bbefcd7b1f3faa5b52c138ab27db75b7 /contrib/libs/poco/Foundation/include/Poco/UniqueExpireStrategy.h
parente9656aae26e0358d5378e5b63dcac5c8dbe0e4d0 (diff)
downloadydb-718c552901d703c502ccbefdfc3c9028d608b947.tar.gz
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/poco/Foundation/include/Poco/UniqueExpireStrategy.h')
-rw-r--r--contrib/libs/poco/Foundation/include/Poco/UniqueExpireStrategy.h276
1 files changed, 138 insertions, 138 deletions
diff --git a/contrib/libs/poco/Foundation/include/Poco/UniqueExpireStrategy.h b/contrib/libs/poco/Foundation/include/Poco/UniqueExpireStrategy.h
index 6ae79945b1..b213caf543 100644
--- a/contrib/libs/poco/Foundation/include/Poco/UniqueExpireStrategy.h
+++ b/contrib/libs/poco/Foundation/include/Poco/UniqueExpireStrategy.h
@@ -1,138 +1,138 @@
-//
-// UniqueExpireStrategy.h
-//
-// Library: Foundation
-// Package: Cache
-// Module: UniqueExpireStrategy
-//
-// Definition of the UniqueExpireStrategy class.
-//
-// Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef Foundation_UniqueExpireStrategy_INCLUDED
-#define Foundation_UniqueExpireStrategy_INCLUDED
-
-
-#include "Poco/KeyValueArgs.h"
-#include "Poco/ValidArgs.h"
-#include "Poco/AbstractStrategy.h"
-#include "Poco/Bugcheck.h"
-#include "Poco/Timestamp.h"
-#include "Poco/EventArgs.h"
-#include <set>
-#include <map>
-
-
-namespace Poco {
-
-
-template <
- class TKey,
- class TValue
->
-class UniqueExpireStrategy: public AbstractStrategy<TKey, TValue>
- /// An UniqueExpireStrategy implements time based expiration of cache entries. In contrast
- /// to ExpireStrategy 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::Timestamp& getExpiration() const;
- ///
- /// which returns the absolute timepoint when the entry will be invalidated.
-{
-public:
- typedef std::multimap<Timestamp, TKey> TimeIndex;
- typedef typename TimeIndex::iterator IndexIterator;
- typedef typename TimeIndex::const_iterator ConstIndexIterator;
- typedef std::map<TKey, IndexIterator> Keys;
- typedef typename Keys::iterator Iterator;
-
-public:
- UniqueExpireStrategy()
- /// Create an unique expire strategy.
- {
- }
-
- ~UniqueExpireStrategy()
- {
- }
-
- void onAdd(const void*, const KeyValueArgs <TKey, TValue>& args)
- {
- // note: we have to insert even if the expire timepoint is in the past (for StrategyCollection classes to avoid inconsistency with LRU)
- // no problem: will be removed with next get
- const Timestamp& expire = args.value().getExpiration();
- IndexIterator it = _keyIndex.insert(std::make_pair(expire, args.key()));
- std::pair<Iterator, bool> stat = _keys.insert(std::make_pair(args.key(), it));
- if (!stat.second)
- {
- _keyIndex.erase(stat.first->second);
- stat.first->second = it;
- }
- }
-
- void onRemove(const void*, const TKey& key)
- {
- Iterator it = _keys.find(key);
- if (it != _keys.end())
- {
- _keyIndex.erase(it->second);
- _keys.erase(it);
- }
- }
-
- void onGet(const void*, const TKey& key)
- {
- // get triggers no changes in an expire
- }
-
- void onClear(const void*, const EventArgs& args)
- {
- _keys.clear();
- _keyIndex.clear();
- }
-
- void onIsValid(const void*, ValidArgs<TKey>& args)
- {
- Iterator it = _keys.find(args.key());
- if (it != _keys.end())
- {
- Timestamp now;
- if (it->second->first <= now)
- {
- args.invalidate();
- }
- }
- else //not found: probably removed by onReplace
- args.invalidate();
- }
-
- void onReplace(const void*, std::set<TKey>& elemsToRemove)
- {
- // Note: replace only informs the cache which elements
- // it would like to remove!
- // it does not remove them on its own!
- IndexIterator it = _keyIndex.begin();
- Timestamp now;
- while (it != _keyIndex.end() && it->first < now)
- {
- elemsToRemove.insert(it->second);
- ++it;
- }
- }
-
-protected:
- Keys _keys; /// For faster replacement of keys, the iterator points to the _keyIndex map
- TimeIndex _keyIndex; /// Maps time to key value
-};
-
-
-} // namespace Poco
-
-
-#endif // Foundation_UniqueExpireStrategy_INCLUDED
+//
+// UniqueExpireStrategy.h
+//
+// Library: Foundation
+// Package: Cache
+// Module: UniqueExpireStrategy
+//
+// Definition of the UniqueExpireStrategy class.
+//
+// Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef Foundation_UniqueExpireStrategy_INCLUDED
+#define Foundation_UniqueExpireStrategy_INCLUDED
+
+
+#include "Poco/KeyValueArgs.h"
+#include "Poco/ValidArgs.h"
+#include "Poco/AbstractStrategy.h"
+#include "Poco/Bugcheck.h"
+#include "Poco/Timestamp.h"
+#include "Poco/EventArgs.h"
+#include <set>
+#include <map>
+
+
+namespace Poco {
+
+
+template <
+ class TKey,
+ class TValue
+>
+class UniqueExpireStrategy: public AbstractStrategy<TKey, TValue>
+ /// An UniqueExpireStrategy implements time based expiration of cache entries. In contrast
+ /// to ExpireStrategy 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::Timestamp& getExpiration() const;
+ ///
+ /// which returns the absolute timepoint when the entry will be invalidated.
+{
+public:
+ typedef std::multimap<Timestamp, TKey> TimeIndex;
+ typedef typename TimeIndex::iterator IndexIterator;
+ typedef typename TimeIndex::const_iterator ConstIndexIterator;
+ typedef std::map<TKey, IndexIterator> Keys;
+ typedef typename Keys::iterator Iterator;
+
+public:
+ UniqueExpireStrategy()
+ /// Create an unique expire strategy.
+ {
+ }
+
+ ~UniqueExpireStrategy()
+ {
+ }
+
+ void onAdd(const void*, const KeyValueArgs <TKey, TValue>& args)
+ {
+ // note: we have to insert even if the expire timepoint is in the past (for StrategyCollection classes to avoid inconsistency with LRU)
+ // no problem: will be removed with next get
+ const Timestamp& expire = args.value().getExpiration();
+ IndexIterator it = _keyIndex.insert(std::make_pair(expire, args.key()));
+ std::pair<Iterator, bool> stat = _keys.insert(std::make_pair(args.key(), it));
+ if (!stat.second)
+ {
+ _keyIndex.erase(stat.first->second);
+ stat.first->second = it;
+ }
+ }
+
+ void onRemove(const void*, const TKey& key)
+ {
+ Iterator it = _keys.find(key);
+ if (it != _keys.end())
+ {
+ _keyIndex.erase(it->second);
+ _keys.erase(it);
+ }
+ }
+
+ void onGet(const void*, const TKey& key)
+ {
+ // get triggers no changes in an expire
+ }
+
+ void onClear(const void*, const EventArgs& args)
+ {
+ _keys.clear();
+ _keyIndex.clear();
+ }
+
+ void onIsValid(const void*, ValidArgs<TKey>& args)
+ {
+ Iterator it = _keys.find(args.key());
+ if (it != _keys.end())
+ {
+ Timestamp now;
+ if (it->second->first <= now)
+ {
+ args.invalidate();
+ }
+ }
+ else //not found: probably removed by onReplace
+ args.invalidate();
+ }
+
+ void onReplace(const void*, std::set<TKey>& elemsToRemove)
+ {
+ // Note: replace only informs the cache which elements
+ // it would like to remove!
+ // it does not remove them on its own!
+ IndexIterator it = _keyIndex.begin();
+ Timestamp now;
+ while (it != _keyIndex.end() && it->first < now)
+ {
+ elemsToRemove.insert(it->second);
+ ++it;
+ }
+ }
+
+protected:
+ Keys _keys; /// For faster replacement of keys, the iterator points to the _keyIndex map
+ TimeIndex _keyIndex; /// Maps time to key value
+};
+
+
+} // namespace Poco
+
+
+#endif // Foundation_UniqueExpireStrategy_INCLUDED