1 #ifndef __SWAPPY_QUEUE_HPP__
2 #define __SWAPPY_QUEUE_HPP__ 1
41 int MASKLENGTH = (2* 4*16384)
83 if (p ==
nullptr)
return false;
96 bool top (TKEY & resultkey,
Item & result) {
100 resultkey = _headKey;
101 return get(_headKey, result);
120 if (p->first.prio == item.
prio) {
121 _data->
set(key, item);
139 if (s.
size == 0)
return;
142 if (key == _headKey) {
143 _data->
del(_headKey);
153 if (dummy2Pair ==
nullptr)
return;
156 Item item = dummy2Pair->first;
157 std::vector<TKEY> siblings(dummy2Pair->second);
161 std::vector<TKEY> newsiblings;
162 std::vector<TKEY> winners;
165 if (key != _headKey) {
168 for (
auto n : dummy1Pair->second) {
169 if (n != key) newsiblings.push_back(n);
171 _data->
set(item.
parent, dummy1Pair->first, newsiblings);
175 for (uint64_t i=0; i < siblings.size(); i+=2) {
176 if ((i+1) >= siblings.size()) {
178 winners.push_back(siblings[i]);
180 dummy1Pair = _data->
get(siblings[i]);
181 dummy2Pair = _data->
get(siblings[i+1]);
182 if (dummy1Pair->first.prio < dummy2Pair->first.prio) {
183 winners.push_back(siblings[i]);
184 dummy2Pair->first.parent = siblings[i];
185 dummy1Pair->second.push_back(siblings[i+1]);
188 winners.push_back(siblings[i+1]);
189 dummy1Pair->first.parent = siblings[i+1];
190 dummy2Pair->second.push_back(siblings[i]);
197 if (winners.size() > 0) {
198 champion = winners[0];
199 dummy1Pair = _data->
get(champion);
201 for (uint64_t i=1; i < winners.size(); ++i) {
202 dummy2Pair = _data->
get(winners[i]);
203 if (dummy2Pair->first.prio < dummy1Pair->first.prio) {
205 dummy2Pair->second.push_back(champion);
206 dummy1Pair->first.parent = winners[i];
207 champion = winners[i];
208 dummy1Pair = dummy2Pair;
210 dummy1Pair->second.push_back(winners[i]);
211 dummy2Pair->first.parent = champion;
216 if (key == _headKey) {
218 dummy1Pair = _data->
get(_headKey);
219 dummy1Pair->first.parent = _headKey;
221 dummy1Pair = _data->
get(champion);
222 dummy1Pair->first.parent = item.
parent;
224 dummy2Pair->second.push_back(champion);
240 _data->
set(key, item, std::vector<TKEY>(0));
245 if (item.
prio < headpair->first.prio) {
247 std::vector<TKEY> siblings;
248 siblings.push_back(_headKey);
249 _data->
set(key, item, siblings);
251 headpair->first.parent = key;
252 _data->
set(_headKey, headpair->first);
257 _data->
set(key, item, std::vector<TKEY>(0));
259 headpair->second.push_back(key);
260 _data->
set(_headKey, headpair->first, headpair->second);
Definition: SwappyItems.hpp:49
std::pair< TVALUE, std::vector< TKEY > > Data
Definition: SwappyItems.hpp:52
Data * get(const TKEY &key)
Definition: SwappyItems.hpp:188
bool del(const TKEY &key)
Definition: SwappyItems.hpp:211
struct statistic_s getStatistic(void)
Definition: SwappyItems.hpp:288
bool set(TKEY key, TVALUE value)
Definition: SwappyItems.hpp:123
Definition: SwappyQueue.hpp:43
void insert(TKEY key, Item &item)
Definition: SwappyQueue.hpp:235
Heap * _data
Definition: SwappyQueue.hpp:58
void del(TKEY key)
Definition: SwappyQueue.hpp:137
bool get(TKEY key, Item &result)
Definition: SwappyQueue.hpp:80
TKEY _headKey
Definition: SwappyQueue.hpp:59
bool set(TKEY key, Item &item)
Definition: SwappyQueue.hpp:113
bool top(TKEY &resultkey, Item &result)
Definition: SwappyQueue.hpp:96
SwappyQueue(void)
Definition: SwappyQueue.hpp:63
~SwappyQueue(void)
Definition: SwappyQueue.hpp:68
bool empty
Definition: SwappyQueue.hpp:46
SwappyItems< TKEY, Item, EACHFILE, OLDIES, RAMSIZE, BLOOMBITS, MASKLENGTH > Heap
Definition: SwappyQueue.hpp:56
Definition: SwappyItems.hpp:54
uint64_t size
Definition: SwappyItems.hpp:55
Definition: SwappyQueue.hpp:48
TKEY parent
Definition: SwappyQueue.hpp:51
uint64_t prio
Definition: SwappyQueue.hpp:50
TVALUE data
Definition: SwappyQueue.hpp:49