#pragma once #include #include #include namespace NYT { //////////////////////////////////////////////////////////////////////////////// //! Maintains a set of items that expire after a certain time. template , class TEqual = TEqualTo> class TExpiringSet { public: void SetTtl(TDuration ttl); void Insert(TInstant now, const TItem& item); template void InsertMany(TInstant now, const TItems& items); void Remove(const TItem& item); void Expire(TInstant now); void Clear(); template bool Contains(const TItemLike& item) const; int GetSize() const; private: TDuration Ttl_; struct TItemPack { std::vector Items; TInstant Deadline; bool operator<(const TItemPack& other) const; }; THashMap ItemToDeadline_; std::priority_queue ExpirationQueue_; }; //////////////////////////////////////////////////////////////////////////////// } // namespace NYT #define EXPIRING_SET_INL_H_ #include "expiring_set-inl.h" #undef EXPIRING_SET_INL_H_