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 // To prevent memory leaks, we keep track of deleted instances.
32 // For efficient searching, two types of containers are used: search by ID and search by
33 // time.
34 std::unordered_map<std::string, std::chrono::steady_clock::time_point>
35 deleted_room_domain_instance_ids_by_id_;
36 std::multimap<std::chrono::steady_clock::time_point, std::string>
37 deleted_room_domain_instance_ids_by_time_;
38
39public:
40 friend class RoomDomainCacheManagerTest;
41};
43
44} // namespace room
45} // namespace skyway
46
47#endif /* SKYWAY_ROOM_ROOM_DOMAIN_CACHE_MANAGER_HPP */