cache: MapCache: Introduce MapCache, thread-safe cache (key/value store)

Этот коммит содержится в:
Albert S. 2021-10-08 00:08:00 +02:00
родитель b59e81a41d
Коммит e970ba1682
2 изменённых файлов: 38 добавлений и 0 удалений

1
cache/mapcache.cpp поставляемый Обычный файл
Просмотреть файл

@ -0,0 +1 @@
#include "mapcache.h"

37
cache/mapcache.h поставляемый Обычный файл
Просмотреть файл

@ -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