diff options
Diffstat (limited to 'api/logic/RWStorage.h')
-rw-r--r-- | api/logic/RWStorage.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/api/logic/RWStorage.h b/api/logic/RWStorage.h new file mode 100644 index 00000000..b1598ca4 --- /dev/null +++ b/api/logic/RWStorage.h @@ -0,0 +1,60 @@ +#pragma once +template <typename K, typename V> +class RWStorage +{ +public: + void add(K key, V value) + { + QWriteLocker l(&lock); + cache[key] = value; + stale_entries.remove(key); + } + V get(K key) + { + QReadLocker l(&lock); + if(cache.contains(key)) + { + return cache[key]; + } + else return V(); + } + bool get(K key, V& value) + { + QReadLocker l(&lock); + if(cache.contains(key)) + { + value = cache[key]; + return true; + } + else return false; + } + bool has(K key) + { + QReadLocker l(&lock); + return cache.contains(key); + } + bool stale(K key) + { + QReadLocker l(&lock); + if(!cache.contains(key)) + return true; + return stale_entries.contains(key); + } + void setStale(K key) + { + QReadLocker l(&lock); + if(cache.contains(key)) + { + stale_entries.insert(key); + } + } + void clear() + { + QWriteLocker l(&lock); + cache.clear(); + } +private: + QReadWriteLock lock; + QMap<K, V> cache; + QSet<K> stale_entries; +};
\ No newline at end of file |