8#include <unordered_map>
61 cache.reserve(sizeHint);
82 throw std::runtime_error(
"id: "+
id+
", already use in PriorityStore");
86 auto pos = std::upper_bound
97 return p < r.first.priority;
100 cache.insert(pos, std::pair(
Info(
id, priority), s));
109 auto pos = std::find_if
113 [
id](std::pair<Info, T> v)
115 return v.first.id == id;
118 if (pos !=
cache.end())
130 add(element.first,
id, newPriority);
143 std::multimap<Priority, ElementId> & oids
146 std::vector<std::pair<Info, T>> s;
147 s.reserve(oids.size());
148 for (
const auto &
id : oids)
150 s.push_back(std::pair(
Info(
id.second,
id.first),
idToElement[
id.second].first));
157 typename std::vector<std::pair<Info, T>>::const_iterator
begin()
const {
return cache.cbegin(); }
158 typename std::vector<std::pair<Info, T>>::const_iterator
end()
const {
return cache.cend(); }
167 std::unordered_map<ElementId, std::pair<T, Priority>>
idToElement;
169 std::vector<std::pair<Info, T>>
cache;
Store elements in a priority ordering, with identities.
Definition priorityStore.h:32
std::vector< std::pair< Info, T > > vectorise(std::multimap< Priority, ElementId > &oids)
Return a vector from overriding priorities.
Definition priorityStore.h:142
bool hasId(const ElementId id) const
Definition priorityStore.h:162
virtual void add(T s, ElementId id, Priority priority=0)
Insert an element.
Definition priorityStore.h:78
std::vector< std::pair< Info, T > >::const_iterator end() const
Definition priorityStore.h:158
void updatePriority(ElementId id, Priority newPriority)
Definition priorityStore.h:124
uint64_t size() const
Definition priorityStore.h:160
virtual void remove(ElementId id)
Definition priorityStore.h:103
T & operator[](ElementId id)
Definition priorityStore.h:155
PriorityStore(uint64_t sizeHint=8)
Construct a new Priority Store with a reserved size.
Definition priorityStore.h:58
virtual void clear()
Definition priorityStore.h:64
std::vector< std::pair< Info, T > > cache
Definition priorityStore.h:169
std::vector< std::pair< Info, T > >::const_iterator begin() const
Definition priorityStore.h:157
std::unordered_map< ElementId, std::pair< T, Priority > > idToElement
Definition priorityStore.h:167
uint64_t Priority
A priority for an element.
Definition priorityStore.h:21
std::string ElementId
User name for an Element.
Definition priorityStore.h:15
Combine an id and a priority.
Definition priorityStore.h:40
Info()
Definition priorityStore.h:45
Priority priority
Definition priorityStore.h:50
ElementId id
Definition priorityStore.h:49
Info(ElementId i, Priority p)
Definition priorityStore.h:41