cache: MapCache: Introduce MapCache, thread-safe cache (key/value store)
This commit is contained in:
parent
b59e81a41d
commit
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
|
Loading…
Reference in New Issue
Block a user