139 if (s.size == 0)
return;
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;
166 dummy1Pair =
_data->
get(item.parent);
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];
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;
219 dummy1Pair->first.parent =
_headKey;
222 dummy1Pair->first.parent = item.parent;
223 dummy2Pair =
_data->
get(item.parent);
224 dummy2Pair->second.push_back(champion);
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
TKEY _headKey
Definition: SwappyQueue.hpp:59