DNSName domain;
ComboAddress master;
bool force;
- uint8_t priority;
- uint64_t sortHelper;
+ std::pair<uint8_t, uint64_t> priorityAndOrder;
bool operator<(const SuckRequest& b) const
{
return tie(domain, master) < tie(b.domain, b.master);
}
};
-struct suckQueueCmp
-{
- bool operator()(const SuckRequest& a, const SuckRequest& b) const {
- if (a.priority == b.priority) {
- return a.sortHelper < b.sortHelper;
- }
- return a.priority < b.priority;
- };
-};
-
struct IDTag{};
struct QueueTag{};
typedef multi_index_container<
SuckRequest,
indexed_by<
- ordered_non_unique<tag<QueueTag>, identity<SuckRequest>, suckQueueCmp>,
+ ordered_unique<tag<QueueTag>, member<SuckRequest,std::pair<uint8_t,uint64_t>,&SuckRequest::priorityAndOrder>>,
ordered_unique<tag<IDTag>, identity<SuckRequest> >
>
> UniQueue;
sr.domain = domain;
sr.master = master;
sr.force = force;
- sr.priority = priority;
- sr.sortHelper = d_sorthelper++;
+ sr.priorityAndOrder.first = priority;
+ sr.priorityAndOrder.second = d_sorthelper++;
pair<UniQueue::iterator, bool> res;
res=d_suckdomains.insert(sr);
// bit weird, but ok
return;
}
- nameindex.modify(iter, [priority = priority, sorthelper = sr.sortHelper] (SuckRequest& so) {
- if (priority < so.priority) {
- so.priority = priority;
- so.sortHelper = sorthelper;
+ nameindex.modify(iter, [priorityAndOrder = sr.priorityAndOrder] (SuckRequest& so) {
+ if (priorityAndOrder.first < so.priorityAndOrder.first) {
+ so.priorityAndOrder = priorityAndOrder;
}
});
}