ProxyServerTcp / include /tcp_client_map.h
xukc
[fix]support tcp
2faa101
raw
history blame
1.24 kB
#ifndef PROXYSERVER_CONN_MAP_H
#define PROXYSERVER_CONN_MAP_H
#include <iostream>
#include <map>
#include <shared_mutex>
#include <mutex>
template <typename Key, typename Value>
class TcpClientMap {
public:
static TcpClientMap& getInstance() {
static TcpClientMap instance; // 在首次使用时创建
return instance;
}
TcpClientMap(TcpClientMap const&) = delete;
void operator=(TcpClientMap const&) = delete;
void add(const Key& key, const Value& value) {
std::unique_lock<std::shared_timed_mutex> lock(mutex_);
map_[key] = 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 (Value*)(&(it->second));
}
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();
}
private:
TcpClientMap() = default;
mutable std::shared_timed_mutex mutex_;
std::map<Key, Value> map_;
};
#endif //PROXYSERVER_CONN_MAP_H