AccessExpireStrategy.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. //
  2. // AccessExpireStrategy.h
  3. //
  4. // $Id: //poco/1.4/Foundation/include/Poco/AccessExpireStrategy.h#1 $
  5. //
  6. // Library: Foundation
  7. // Package: Cache
  8. // Module: AccessExpireStrategy
  9. //
  10. // Definition of the AccessExpireStrategy class.
  11. //
  12. // Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
  13. // and Contributors.
  14. //
  15. // SPDX-License-Identifier: BSL-1.0
  16. //
  17. #ifndef Foundation_AccessExpireStrategy_INCLUDED
  18. #define Foundation_AccessExpireStrategy_INCLUDED
  19. #include "Poco/KeyValueArgs.h"
  20. #include "Poco/ValidArgs.h"
  21. #include "Poco/ExpireStrategy.h"
  22. #include "Poco/Bugcheck.h"
  23. #include "Poco/Timestamp.h"
  24. #include "Poco/EventArgs.h"
  25. #include <set>
  26. #include <map>
  27. namespace Poco {
  28. template <
  29. class TKey,
  30. class TValue
  31. >
  32. class AccessExpireStrategy: public ExpireStrategy<TKey, TValue>
  33. /// An AccessExpireStrategy implements time and access based expiration of cache entries
  34. {
  35. public:
  36. AccessExpireStrategy(Timestamp::TimeDiff expireTimeInMilliSec): ExpireStrategy<TKey, TValue>(expireTimeInMilliSec)
  37. /// Create an expire strategy. Note that the smallest allowed caching time is 25ms.
  38. /// Anything lower than that is not useful with current operating systems.
  39. {
  40. }
  41. ~AccessExpireStrategy()
  42. {
  43. }
  44. void onGet(const void*, const TKey& key)
  45. {
  46. // get triggers an update to the expiration time
  47. typename ExpireStrategy<TKey, TValue>::Iterator it = this->_keys.find(key);
  48. if (it != this->_keys.end())
  49. {
  50. this->_keyIndex.erase(it->second);
  51. Timestamp now;
  52. typename ExpireStrategy<TKey, TValue>::IndexIterator itIdx =
  53. this->_keyIndex.insert(typename ExpireStrategy<TKey, TValue>::TimeIndex::value_type(now, key));
  54. it->second = itIdx;
  55. }
  56. }
  57. };
  58. } // namespace Poco
  59. #endif // Foundation_AccessExpireStrategy_INCLUDED