Spaces:
Paused
Paused
template <typename Key, typename Value> | |
class SafeMap { | |
public: | |
void add(const Key& key, std::unique_ptr<Value> &value) { | |
std::unique_lock<std::shared_timed_mutex> lock(mutex_); | |
map_[key] = std::move(value); | |
} | |
Value* get(const Key& key) const { | |
std::shared_lock<std::shared_timed_mutex> lock(mutex_); | |
auto it = map_.find(key); | |
if (it != map_.end()) { | |
return it->second.get(); | |
} | |
return nullptr; | |
} | |
void remove(const Key& key) { | |
std::unique_lock<std::shared_timed_mutex> lock(mutex_); | |
map_.erase(key); | |
} | |
void clear() { | |
std::unique_lock<std::shared_timed_mutex> lock(mutex_); | |
map_.clear(); | |
} | |
typename std::map<Key, std::unique_ptr<Value>>::iterator begin() { | |
return map_.begin(); | |
} | |
typename std::map<Key, std::unique_ptr<Value>>::iterator end() { | |
return map_.end(); | |
} | |
protected: | |
mutable std::shared_timed_mutex mutex_; | |
std::map<Key, std::unique_ptr<Value>> map_; | |
}; | |
template <typename Key, typename Value> | |
class TcpConnMap : public SafeMap<Key, Value> { | |
public: | |
static TcpConnMap& getInstance() { | |
static TcpConnMap instance; // 在首次使用时创建 | |
return instance; | |
} | |
TcpConnMap(TcpConnMap const&) = delete; | |
void operator=(TcpConnMap const&) = delete; | |
private: | |
TcpConnMap() = default; | |
}; | |
template <typename Key, typename Value> | |
class UdpConnMap : public SafeMap<Key, Value> { | |
public: | |
static UdpConnMap& getInstance() { | |
static UdpConnMap instance; // 在首次使用时创建 | |
return instance; | |
} | |
UdpConnMap(UdpConnMap const&) = delete; | |
void operator=(UdpConnMap const&) = delete; | |
private: | |
UdpConnMap() = default; | |
}; | |