cache: MapCache: Introduce MapCache, thread-safe cache (key/value store)
This commit is contained in:
orang tua
b59e81a41d
melakukan
e970ba1682
1
cache/mapcache.cpp
vendored
Normal file
1
cache/mapcache.cpp
vendored
Normal file
@ -0,0 +1 @@
|
||||
#include "mapcache.h"
|
37
cache/mapcache.h
vendored
Normal file
37
cache/mapcache.h
vendored
Normal file
@ -0,0 +1,37 @@
|
||||
#ifndef MAPCACHE_H
|
||||
#define MAPCACHE_H
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <shared_mutex>
|
||||
|
||||
/* Thread-Safe Key-Value store */
|
||||
template <class T> class MapCache
|
||||
{
|
||||
private:
|
||||
std::map<std::string, T> cache;
|
||||
mutable std::shared_mutex sharedMutex;
|
||||
|
||||
public:
|
||||
std::optional<T> find(const std::string &key) const
|
||||
{
|
||||
std::shared_lock<std::shared_mutex> lock(this->sharedMutex);
|
||||
auto it = this->cache.find(key);
|
||||
if(it != this->cache.end())
|
||||
{
|
||||
return it->second;
|
||||
}
|
||||
return {};
|
||||
}
|
||||
void set(const std::string &key, const T &val)
|
||||
{
|
||||
std::lock_guard<std::shared_mutex> lock{sharedMutex};
|
||||
this->cache[key] = val;
|
||||
}
|
||||
void clear()
|
||||
{
|
||||
std::lock_guard<std::shared_mutex> lock{sharedMutex};
|
||||
this->cache.clear();
|
||||
}
|
||||
};
|
||||
|
||||
#endif // MAPCACHE_H
|
Memuat…
Reference in New Issue
Block a user