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));
158 if (
m_signal.wait(wait_time_max_ms)) {
161 T t = std::move(
m_queue.front());
171 if (
m_signal.wait(wait_time_max_ms)) {
174 T t = std::move(
m_queue.front());
188 T t = std::move(
m_queue.front());
195 if (
m_signal.wait(wait_time_max_ms)) {
198 T t = std::move(
m_queue.back());
211 if (
m_signal.wait(wait_time_max_ms)) {
214 T t = std::move(
m_queue.back());
228 T t = std::move(
m_queue.back());
235 return IterationHelper(
this);
243 q->getMutex().unlock();
244 q->getSignal().post();
247 auto begin() {
return q->getQueue().begin(); }
248 auto end() {
return q->getQueue().end(); }
250 auto erase(
typename std::deque<T>::iterator it) {
251 return q->getQueue().erase(it);
256 q->getMutex().lock();
276template<
typename K,
typename V>
280 LRUCache(
size_t limit,
void (*cache_miss)(
void *data,
const K &key, V *dest),
302 typename cache_type::iterator it =
m_map.find(key);
304 if (it !=
m_map.end()) {
338 typedef typename std::template pair<typename std::template list<K>::iterator, V>
cache_entry_t;
360template<
typename K,
typename V>
365 static_assert(std::is_default_constructible<V>::value,
366 "Value type must be default constructible");
367 static_assert(std::is_constructible<bool, V>::value,
368 "Value type must be convertible to bool");
369 static_assert(std::is_move_assignable<V>::value,
370 "Value type must be move-assignable");
388 const V &
get(const K &key)
const {
390 auto it =
m_new.find(key);
391 if (it !=
m_new.end())
404 void put(
const K &key,
const V &value) {
421 void put(
const K &key, V &&value) {
432 m_new[key] = std::move(value);
441 auto it =
m_new.find(key);
442 if (it !=
m_new.end()) {
443 ret = std::move(it->second);
451 ret = std::move(it->second);
472 assert(
m_new.empty());
477 n += !it.second ? 0 : 1;
494 auto iter() {
return IterationHelper(
this); }
510 static constexpr size_t unknown =
static_cast<size_t>(-1);
515 if (!
m_new.empty()) {
538 assert(
m->m_iterating);
540 if (!
m->m_iterating) {
542 m->collect_garbage();
546 auto begin() {
return m->m_values.cbegin(); }
547 auto end() {
return m->m_values.cend(); }
551 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:66
size_t m_limit
Definition container.h:337
cache_type m_map
Definition container.h:340
LRUCache(size_t limit, void(*cache_miss)(void *data, const K &key, V *dest), void *data)
Definition container.h:280
void setLimit(size_t limit)
Definition container.h:288
void * m_cache_miss_data
Definition container.h:336
const V * lookupCache(K key)
Definition container.h:300
void invalidate()
Definition container.h:294
std::list< K > m_queue
Definition container.h:342
std::template pair< typename std::template list< K >::iterator, V > cache_entry_t
Definition container.h:338
std::template map< K, cache_entry_t > cache_type
Definition container.h:339
void(* m_cache_miss)(void *data, const K &key, V *dest)
Definition container.h:335
Definition container.h:362
const void *& get(const u16 &key) const
Definition container.h:388
size_t m_garbage
Definition container.h:563
void * mapped_type
Definition container.h:373
~ModifySafeMap()
Definition container.h:380
u16 key_type
Definition container.h:372
void clear()
Definition container.h:496
size_t size() const
Definition container.h:466
auto iter()
Definition container.h:494
void put(const K &key, V &&value)
Definition container.h:421
ModifySafeMap()
Definition container.h:375
V take(const K &key)
Definition container.h:438
static constexpr size_t GC_MIN_SIZE
Definition container.h:565
static constexpr size_t unknown
Definition container.h:510
void put(const K &key, const V &value)
Definition container.h:404
void collect_garbage()
Definition container.h:522
bool empty() const
Definition container.h:482
bool remove(const K &key)
Definition container.h:461
std::map< u16, void * > m_values
Definition container.h:559
unsigned int m_iterating
Definition container.h:561
static const void * null_value
Definition container.h:507
void merge_new()
Definition container.h:513
std::map< u16, void * > m_new
Definition container.h:560
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
friend class RequestQueue
Definition container.h:129
bool empty() const
Definition container.h:133
void push_back(T &&t)
Definition container.h:146
std::deque< MeshUpdateResult > m_queue
Definition container.h:267
Semaphore m_signal
Definition container.h:269
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:265
std::mutex m_mutex
Definition container.h:268
auto iterLocked()
Definition container.h:233
Semaphore & getSignal()
Definition container.h:263
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:262
Definition semaphore.h:18
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
ModifySafeMap< K, V > * m
Definition container.h:555
IterationHelper(ModifySafeMap< K, V > *parent)
Definition container.h:550
~IterationHelper()
Definition container.h:537
auto end()
Definition container.h:547
auto begin()
Definition container.h:546
auto end()
Definition container.h:248
auto erase(typename std::deque< T >::iterator it)
Definition container.h:250
IterationHelper(MutexedQueue< T > *parent)
Definition container.h:255
~IterationHelper()
Definition container.h:242
auto begin()
Definition container.h:247
MutexedQueue< T > * q
Definition container.h:259