7 #include <boost/tuple/tuple.hpp>
15 : queue_id_(queue_id),
16 encoding_is_xmpp_(ribout->IsEncodingXmpp()),
43 bool need_tail_dequeue = (tail_upentry == &
tail_marker_);
44 queue_.push_back(*rt_update);
50 for (UpdateInfoSList::List::iterator iter = uinfo_slist->begin();
51 iter != uinfo_slist->end(); ++iter) {
52 iter->update = rt_update;
53 UpdatesByAttr::iterator set_iter;
55 tie(set_iter, result) =
attr_set_.insert(*iter);
58 return need_tail_dequeue;
68 for (UpdateInfoSList::List::iterator iter = uinfo_slist->begin();
69 iter != uinfo_slist->end(); ++iter) {
82 UpdatesByOrder::iterator iter =
queue_.iterator_to(*current_upentry);
83 while (++iter !=
queue_.end()) {
100 UpdatesByOrder::iterator iter =
queue_.iterator_to(*current_upentry);
101 if (++iter ==
queue_.end()) {
104 return iter.operator->();
131 UpdatesByAttr::iterator iter =
attr_set_.iterator_to(*current_uinfo);
163 queue_.insert(++
queue_.iterator_to(*rt_update), *marker);
187 UpdatesByOrder::iterator iter =
queue_.iterator_to(*rt_update);
189 for (iter++; iter !=
queue_.end() && iter->IsMarker(); iter++) {
191 queue_.insert(iter, *marker);
193 queue_.insert(++iter, *marker);
207 assert(!msplit.
empty());
209 split_marker->members = msplit;
213 UpdatesByOrder::iterator mpos =
queue_.iterator_to(*marker);
214 queue_.insert(mpos, *split_marker);
232 assert(!bitset.
empty());
276 if (
markers_.size() < (size_t)(bit + 1))
303 for (
size_t idx = 0; idx <
markers_.size(); ++idx) {
UpdateQueue(const RibOut *ribout, int queue_id)
RouteUpdate * NextUpdate(UpdateEntry *upentry)
const BgpAttr * attr() const
bool test(size_t pos) const
BitSet & reset(size_t pos)
void Reset(const BitSet &rhs)
UpdateEntry * NextEntry(UpdateEntry *upentry)
void MarkerMerge(UpdateMarker *dst_marker, UpdateMarker *src_marker, const RibPeerSet &bitset)
void AddMarker(UpdateMarker *marker, RouteUpdate *rt_update)
bool Enqueue(RouteUpdate *rt_update)
#define CHECK_INVARIANT(Cond)
void Dequeue(RouteUpdate *rt_update)
UpdateMarker * GetMarker(int bit)
bool CheckInvariants() const
void Set(const BitSet &rhs)
void AttrDequeue(UpdateInfo *current_uinfo)
size_t marker_count() const
size_t find_first() const
void MoveMarker(UpdateMarker *marker, RouteUpdate *rt_update)
size_t find_next(size_t pos) const
void set_tstamp(uint64_t tstamp)
UpdateMarker tail_marker_
UpdateInfo * AttrNext(UpdateInfo *current_uinfo)
void MarkerSplit(UpdateMarker *marker, const RibPeerSet &msplit)
UpdateInfoSList & Updates()