LeviLamina
Loading...
Searching...
No Matches
Containers.h
1#pragma once
2
3#include <functional>
4#include <map>
5#include <set>
6#include <shared_mutex>
7#include <string>
8#include <string_view>
9
10#include "ll/api/data/ConcurrentPriorityQueue.h"
11
12#include "concurrentqueue.h"
13#include "parallel_hashmap/btree.h"
14#include "parallel_hashmap/phmap.h"
15
16namespace ll {
17
18template <class... Ts>
19struct Overloaded : Ts... {
20 using Ts::operator()...;
21};
22template <class... Ts>
23struct TransparentOverloaded : Ts... {
24 using is_transparent = void;
25 using Ts::operator()...;
26};
27
28template <class Key, class... Rests>
29using DenseSet = ::phmap::parallel_flat_hash_set<Key, Rests...>;
30template <class Key, class Value, class... Rests>
31using DenseMap = ::phmap::parallel_flat_hash_map<Key, Value, Rests...>;
32
33template <class Key, class... Rests>
34using SmallDenseSet = ::phmap::flat_hash_set<Key, Rests...>;
35template <class Key, class Value, class... Rests>
36using SmallDenseMap = ::phmap::flat_hash_map<Key, Value, Rests...>;
37
38template <class Key, class... Rests>
39using DenseNodeSet = ::phmap::parallel_node_hash_set<Key, Rests...>;
40template <class Key, class Value, class... Rests>
41using DenseNodeMap = ::phmap::parallel_node_hash_map<Key, Value, Rests...>;
42
43template <class Key, class... Rests>
44using SmallDenseNodeSet = ::phmap::node_hash_set<Key, Rests...>;
45template <class Key, class Value, class... Rests>
46using SmallDenseNodeMap = ::phmap::node_hash_map<Key, Value, Rests...>;
47
48template <class Key, class... Rests>
49using OrderedSet = ::phmap::btree_set<Key, Rests...>;
50template <class Key, class Value, class... Rests>
51using OrderedMap = ::phmap::btree_map<Key, Value, Rests...>;
52
53template <class Key, class... Rests>
54using OrderedNodeSet = ::std::set<Key, Rests...>;
55template <class Key, class Value, class... Rests>
56using OrderedNodeMap = ::std::map<Key, Value, Rests...>;
57
58template <class Key, class... Rests>
59using OrderedMultiSet = ::phmap::btree_multiset<Key, Rests...>;
60template <class Key, class Value, class... Rests>
61using OrderedMultiMap = ::phmap::btree_multimap<Key, Value, Rests...>;
62
63template <class Key, class... Rests>
64using OrderedNodeMultiSet = ::std::multiset<Key, Rests...>;
65template <class Key, class Value, class... Rests>
66using OrderedNodeMultiMap = ::std::multimap<Key, Value, Rests...>;
67
68template <
69 class Key,
70 class Hash = ::phmap::priv::hash_default_hash<Key>,
71 class Eq = ::phmap::priv::hash_default_eq<Key>,
72 class Alloc = ::std::allocator<Key>,
73 size_t N = 4,
74 class Mutex = std::shared_mutex>
75using ConcurrentDenseSet = ::phmap::parallel_flat_hash_set<Key, Hash, Eq, Alloc, N, Mutex>;
76template <
77 class Key,
78 class Value,
79 class Hash = ::phmap::priv::hash_default_hash<Key>,
80 class Eq = ::phmap::priv::hash_default_eq<Key>,
81 class Alloc = ::std::allocator<::std::pair<Key const, Value>>,
82 size_t N = 4,
83 class Mutex = std::shared_mutex>
84using ConcurrentDenseMap = ::phmap::parallel_flat_hash_map<Key, Value, Hash, Eq, Alloc, N, Mutex>;
85
86template <
87 class Key,
88 class Hash = ::phmap::priv::hash_default_hash<Key>,
89 class Eq = ::phmap::priv::hash_default_eq<Key>,
90 class Alloc = ::std::allocator<Key>,
91 size_t N = 4,
92 class Mutex = std::shared_mutex>
93using ConcurrentDenseNodeSet = ::phmap::parallel_node_hash_set<Key, Hash, Eq, Alloc, N, Mutex>;
94template <
95 class Key,
96 class Value,
97 class Hash = ::phmap::priv::hash_default_hash<Key>,
98 class Eq = ::phmap::priv::hash_default_eq<Key>,
99 class Alloc = ::std::allocator<::std::pair<Key const, Value>>,
100 size_t N = 4,
101 class Mutex = std::shared_mutex>
102using ConcurrentDenseNodeMap = ::phmap::parallel_node_hash_map<Key, Value, Hash, Eq, Alloc, N, Mutex>;
103
104template <class Value>
105using StringMap = DenseMap<::std::string, Value>;
106template <class Value>
107using SmallStringMap = SmallDenseMap<::std::string, Value>;
108template <class Value>
109using StringNodeMap = DenseNodeMap<::std::string, Value>;
110template <class Value>
111using SmallStringNodeMap = SmallDenseNodeMap<::std::string, Value>;
112
113template <typename T>
114using ConcurrentQueue = moodycamel::ConcurrentQueue<T>;
115
116template <typename T, typename C = std::less<T>, typename A = std::allocator<T>>
118
119} // namespace ll
Definition ConcurrentPriorityQueue.h:208
Definition Containers.h:19
Definition Containers.h:23