expiring_set.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #pragma once
  2. #include <util/generic/hash.h>
  3. #include <util/datetime/base.h>
  4. #include <queue>
  5. namespace NYT {
  6. ////////////////////////////////////////////////////////////////////////////////
  7. //! Maintains a set of items that expire after a certain time.
  8. template <class TItem, class THash = THash<TItem>, class TEqual = TEqualTo<TItem>>
  9. class TExpiringSet
  10. {
  11. public:
  12. void SetTtl(TDuration ttl);
  13. void Insert(TInstant now, const TItem& item);
  14. template <class TItems>
  15. void InsertMany(TInstant now, const TItems& items);
  16. void Remove(const TItem& item);
  17. void Expire(TInstant now);
  18. void Clear();
  19. template <class TItemLike>
  20. bool Contains(const TItemLike& item) const;
  21. int GetSize() const;
  22. private:
  23. TDuration Ttl_;
  24. struct TItemPack
  25. {
  26. std::vector<TItem> Items;
  27. TInstant Deadline;
  28. bool operator<(const TItemPack& other) const;
  29. };
  30. THashMap<TItem, TInstant, THash, TEqual> ItemToDeadline_;
  31. std::priority_queue<TItemPack> ExpirationQueue_;
  32. };
  33. ////////////////////////////////////////////////////////////////////////////////
  34. } // namespace NYT
  35. #define EXPIRING_SET_INL_H_
  36. #include "expiring_set-inl.h"
  37. #undef EXPIRING_SET_INL_H_