15#include <unordered_set>
24template<
typename Value>
37 if (
m_set.insert(value).second)
67 std::unordered_set<Value>
m_set;
75template<
typename Key,
typename Value>
81 void set(
const Key &name,
const Value &value)
87 bool get(
const Key &name, Value *result)
const
101 std::vector<Value> result;
104 result.push_back(it->second);
128 template<
typename Key,
typename U,
typename Caller,
typename CallerData>
149 m_queue.push_back(std::move(t));
161 T t = std::move(
m_queue.front());
174 T t = std::move(
m_queue.front());
188 T t = std::move(
m_queue.front());
198 T t = std::move(
m_queue.back());
214 T t = std::move(
m_queue.back());
228 T t = std::move(
m_queue.back());
247template<
typename K,
typename V>
251 LRUCache(
size_t limit,
void (*cache_miss)(
void *data,
const K &key, V *dest),
273 typename cache_type::iterator it =
m_map.find(key);
275 if (it !=
m_map.end()) {
309 typedef typename std::template pair<typename std::template list<K>::iterator, V>
cache_entry_t;
331template<
typename K,
typename V>
336 static_assert(std::is_default_constructible<V>::value,
337 "Value type must be default constructible");
338 static_assert(std::is_constructible<bool, V>::value,
339 "Value type must be convertible to bool");
340 static_assert(std::is_move_assignable<V>::value,
341 "Value type must be move-assignable");
359 const V &
get(const K &key)
const {
361 auto it =
m_new.find(key);
362 if (it !=
m_new.end())
375 void put(
const K &key,
const V &value) {
392 void put(
const K &key, V &&value) {
403 m_new[key] = std::move(value);
412 auto it =
m_new.find(key);
413 if (it !=
m_new.end()) {
414 ret = std::move(it->second);
422 ret = std::move(it->second);
443 assert(
m_new.empty());
448 n += !it.second ? 0 : 1;
481 static constexpr size_t unknown =
static_cast<size_t>(-1);
486 if (!
m_new.empty()) {
509 assert(
m->m_iterating);
511 if (!
m->m_iterating) {
513 m->collect_garbage();
517 auto begin() {
return m->m_values.cbegin(); }
518 auto end() {
return m->m_values.cend(); }
522 assert(
m->m_iterating < std::numeric_limits<
decltype(
m_iterating)>::max());
#define DISABLE_CLASS_COPY(C)
Definition basic_macros.h:26
#define ALLOW_CLASS_MOVE(C)
Definition basic_macros.h:32
Definition exceptions.h:60
Definition container.h:249
size_t m_limit
Definition container.h:308
cache_type m_map
Definition container.h:311
LRUCache(size_t limit, void(*cache_miss)(void *data, const K &key, V *dest), void *data)
Definition container.h:251
void setLimit(size_t limit)
Definition container.h:259
void * m_cache_miss_data
Definition container.h:307
const V * lookupCache(K key)
Definition container.h:271
void invalidate()
Definition container.h:265
std::list< K > m_queue
Definition container.h:313
std::template pair< typename std::template list< K >::iterator, V > cache_entry_t
Definition container.h:309
std::template map< K, cache_entry_t > cache_type
Definition container.h:310
void(* m_cache_miss)(void *data, const K &key, V *dest)
Definition container.h:306
Definition container.h:333
const V & get(const K &key) const
Definition container.h:359
size_t m_garbage
Definition container.h:534
V mapped_type
Definition container.h:344
~ModifySafeMap()
Definition container.h:351
K key_type
Definition container.h:343
void clear()
Definition container.h:467
size_t size() const
Definition container.h:437
auto iter()
Definition container.h:465
void put(const K &key, V &&value)
Definition container.h:392
ModifySafeMap()
Definition container.h:346
V take(const K &key)
Definition container.h:409
static constexpr size_t GC_MIN_SIZE
Definition container.h:536
static constexpr size_t unknown
Definition container.h:481
void put(const K &key, const V &value)
Definition container.h:375
void collect_garbage()
Definition container.h:493
bool empty() const
Definition container.h:453
bool remove(const K &key)
Definition container.h:432
std::map< K, V > m_values
Definition container.h:530
unsigned int m_iterating
Definition container.h:532
static const V null_value
Definition container.h:478
void merge_new()
Definition container.h:484
std::map< K, V > m_new
Definition container.h:531
Definition container.h:77
std::vector< Value > getValues() const
Definition container.h:98
bool get(const Key &name, Value *result) const
Definition container.h:87
std::map< Key, Value > m_values
Definition container.h:115
std::mutex m_mutex
Definition container.h:116
void set(const Key &name, const Value &value)
Definition container.h:81
void clear()
Definition container.h:108
Definition container.h:126
bool empty() const
Definition container.h:133
void push_back(T &&t)
Definition container.h:146
std::deque< T > m_queue
Definition container.h:238
Semaphore m_signal
Definition container.h:240
T pop_front(u32 wait_time_max_ms)
Definition container.h:169
T pop_back(u32 wait_time_max_ms=0)
Definition container.h:193
T pop_frontNoEx()
Definition container.h:182
T pop_backNoEx()
Definition container.h:222
std::deque< T > & getQueue()
Definition container.h:236
std::mutex m_mutex
Definition container.h:239
T pop_backNoEx(u32 wait_time_max_ms)
Definition container.h:209
T pop_frontNoEx(u32 wait_time_max_ms)
Definition container.h:156
void push_back(const T &t)
Definition container.h:139
std::mutex & getMutex()
Definition container.h:234
Notes for RequestQueue usage.
Definition thread.h:95
Definition semaphore.h:18
void post(unsigned int num=1)
Definition semaphore.cpp:70
void wait()
Definition semaphore.cpp:85
Definition container.h:26
size_t size() const
Definition container.h:56
void pop_front()
Definition container.h:45
bool push_back(const Value &value)
Definition container.h:35
std::queue< Value > m_queue
Definition container.h:68
const Value & front() const
Definition container.h:51
bool empty() const
Definition container.h:61
std::unordered_set< Value > m_set
Definition container.h:67
#define sanity_check(expr)
Definition debug.h:55
std::lock_guard< std::mutex > MutexAutoLock
Definition mutex_auto_lock.h:31
Definition container.h:506
ModifySafeMap< K, V > * m
Definition container.h:526
IterationHelper(ModifySafeMap< K, V > *parent)
Definition container.h:521
~IterationHelper()
Definition container.h:508
auto end()
Definition container.h:518
auto begin()
Definition container.h:517