aboutsummaryrefslogtreecommitdiff
path: root/src/util/container.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/container.h')
-rw-r--r--src/util/container.h56
1 files changed, 35 insertions, 21 deletions
diff --git a/src/util/container.h b/src/util/container.h
index 7be04459d..2ad2bbfc7 100644
--- a/src/util/container.h
+++ b/src/util/container.h
@@ -33,18 +33,21 @@ with this program; if not, write to the Free Software Foundation, Inc.,
Queue with unique values with fast checking of value existence
*/
-template <typename Value> class UniqueQueue
+template<typename Value>
+class UniqueQueue
{
public:
+
/*
Does nothing if value is already queued.
Return value:
true: value added
false: value already exists
*/
- bool push_back(const Value &value)
+ bool push_back(const Value& value)
{
- if (m_set.insert(value).second) {
+ if (m_set.insert(value).second)
+ {
m_queue.push(value);
return true;
}
@@ -57,16 +60,23 @@ public:
m_queue.pop();
}
- const Value &front() const { return m_queue.front(); }
+ const Value& front() const
+ {
+ return m_queue.front();
+ }
- u32 size() const { return m_queue.size(); }
+ u32 size() const
+ {
+ return m_queue.size();
+ }
private:
std::set<Value> m_set;
std::queue<Value> m_queue;
};
-template <typename Key, typename Value> class MutexedMap
+template<typename Key, typename Value>
+class MutexedMap
{
public:
MutexedMap() = default;
@@ -80,7 +90,8 @@ public:
bool get(const Key &name, Value *result) const
{
MutexAutoLock lock(m_mutex);
- typename std::map<Key, Value>::const_iterator n = m_values.find(name);
+ typename std::map<Key, Value>::const_iterator n =
+ m_values.find(name);
if (n == m_values.end())
return false;
if (result)
@@ -92,8 +103,9 @@ public:
{
MutexAutoLock lock(m_mutex);
std::vector<Value> result;
- for (typename std::map<Key, Value>::const_iterator it = m_values.begin();
- it != m_values.end(); ++it) {
+ for (typename std::map<Key, Value>::const_iterator
+ it = m_values.begin();
+ it != m_values.end(); ++it){
result.push_back(it->second);
}
return result;
@@ -106,12 +118,14 @@ private:
mutable std::mutex m_mutex;
};
+
// Thread-safe Double-ended queue
-template <typename T> class MutexedQueue
+template<typename T>
+class MutexedQueue
{
public:
- template <typename Key, typename U, typename Caller, typename CallerData>
+ template<typename Key, typename U, typename Caller, typename CallerData>
friend class RequestQueue;
MutexedQueue() = default;
@@ -130,8 +144,8 @@ public:
}
/* this version of pop_front returns a empty element of T on timeout.
- * Make sure default constructor of T creates a recognizable "empty" element
- */
+ * Make sure default constructor of T creates a recognizable "empty" element
+ */
T pop_frontNoEx(u32 wait_time_max_ms)
{
if (m_signal.wait(wait_time_max_ms)) {
@@ -169,7 +183,7 @@ public:
return t;
}
- T pop_back(u32 wait_time_max_ms = 0)
+ T pop_back(u32 wait_time_max_ms=0)
{
if (m_signal.wait(wait_time_max_ms)) {
MutexAutoLock lock(m_mutex);
@@ -183,8 +197,8 @@ public:
}
/* this version of pop_back returns a empty element of T on timeout.
- * Make sure default constructor of T creates a recognizable "empty" element
- */
+ * Make sure default constructor of T creates a recognizable "empty" element
+ */
T pop_backNoEx(u32 wait_time_max_ms)
{
if (m_signal.wait(wait_time_max_ms)) {
@@ -219,7 +233,8 @@ protected:
Semaphore m_signal;
};
-template <typename K, typename V> class LRUCache
+template<typename K, typename V>
+class LRUCache
{
public:
LRUCache(size_t limit, void (*cache_miss)(void *data, const K &key, V *dest),
@@ -259,7 +274,8 @@ public:
entry.first = m_queue.begin();
} else {
// cache miss -- enter into cache
- cache_entry_t &entry = m_map[key];
+ cache_entry_t &entry =
+ m_map[key];
ret = &entry.second;
m_cache_miss(m_cache_miss_data, key, &entry.second);
@@ -275,13 +291,11 @@ public:
}
return ret;
}
-
private:
void (*m_cache_miss)(void *data, const K &key, V *dest);
void *m_cache_miss_data;
size_t m_limit;
- typedef typename std::template pair<typename std::template list<K>::iterator, V>
- cache_entry_t;
+ typedef typename std::template pair<typename std::template list<K>::iterator, V> cache_entry_t;
typedef std::template map<K, cache_entry_t> cache_type;
cache_type m_map;
// we can't use std::deque here, because its iterators get invalidated