SkyWay Linux SDK
読み取り中…
検索中…
一致する文字列を見つけられません
room_domain_cache_manager.hpp
1//
2// © NTT DOCOMO BUSINESS, Inc. All Rights Reserved.
3//
4
5#ifndef SKYWAY_ROOM_ROOM_DOMAIN_CACHE_MANAGER_HPP
6#define SKYWAY_ROOM_ROOM_DOMAIN_CACHE_MANAGER_HPP
7
8#include <map>
9#include <mutex>
10#include <unordered_map>
11
12#include "skyway/room/interface/room_domain_cache_manager.hpp"
13
14namespace skyway {
15namespace room {
16
18template <typename T>
19class RoomDomainCacheManager : public interface::RoomDomainCacheManager<T> {
20public:
21 ~RoomDomainCacheManager();
22 void CacheRoomDomainInstance(const std::string& id, std::shared_ptr<T> instance) override;
23 std::shared_ptr<T> FindCachedRoomDomainInstance(const std::string& id) override;
24 void RemoveCachedRoomDomainInstance(const std::string& id) override;
25
26private:
27 void ClearExpiredDeletedInstanceIds();
28 std::mutex mtx_;
29 std::unordered_map<std::string, std::shared_ptr<T>> cached_room_domain_instances_;
30
31 std::unordered_map<std::string, std::chrono::steady_clock::time_point>
32 deleted_room_domain_instance_ids_by_id_;
33 std::multimap<std::chrono::steady_clock::time_point, std::string>
34 deleted_room_domain_instance_ids_by_time_;
35
36public:
37 friend class RoomDomainCacheManagerTest;
38};
40
41} // namespace room
42} // namespace skyway
43
44#endif /* SKYWAY_ROOM_ROOM_DOMAIN_CACHE_MANAGER_HPP */