// // AccessExpireStrategy.h // // Library: Foundation // Package: Cache // Module: AccessExpireStrategy // // Definition of the AccessExpireStrategy class. // // Copyright (c) 2006, Applied Informatics Software Engineering GmbH. // and Contributors. // // SPDX-License-Identifier: BSL-1.0 // #ifndef Foundation_AccessExpireStrategy_INCLUDED #define Foundation_AccessExpireStrategy_INCLUDED #include #include #include "Poco/Bugcheck.h" #include "Poco/EventArgs.h" #include "Poco/ExpireStrategy.h" #include "Poco/KeyValueArgs.h" #include "Poco/Timestamp.h" #include "Poco/ValidArgs.h" namespace Poco { template class AccessExpireStrategy : public ExpireStrategy /// An AccessExpireStrategy implements time and access based expiration of cache entries { public: AccessExpireStrategy(Timestamp::TimeDiff expireTimeInMilliSec) : ExpireStrategy(expireTimeInMilliSec) /// Create an expire strategy. Note that the smallest allowed caching time is 25ms. /// Anything lower than that is not useful with current operating systems. { } ~AccessExpireStrategy() { } void onGet(const void *, const TKey & key) { // get triggers an update to the expiration time typename ExpireStrategy::Iterator it = this->_keys.find(key); if (it != this->_keys.end()) { if (!it->second->first.isElapsed(this->_expireTime)) // don't extend if already expired { this->_keyIndex.erase(it->second); Timestamp now; typename ExpireStrategy::IndexIterator itIdx = this->_keyIndex.insert(typename ExpireStrategy::TimeIndex::value_type(now, key)); it->second = itIdx; } } } }; } // namespace Poco #endif // Foundation_AccessExpireStrategy_INCLUDED