26 #ifndef SHORE_CONTAINER_RLE_QUEUE_HPP__
27 #define SHORE_CONTAINER_RLE_QUEUE_HPP__
47 bool operator()(
const size_t ofs,
48 const std::pair<size_t,value_type> &p)
52 bool operator()(
const std::pair<size_t,value_type> &p,
57 bool operator()(
const std::pair<size_t,value_type> &p1,
58 const std::pair<size_t,value_type> &p2)
60 return p1.first<p2.first;
65 std::deque<std::pair<size_t,value_type> > m_endofs_and_values;
68 uint64_t m_off_offset;
83 return empty()?0:(m_endofs_and_values.back().first-m_off_offset);
89 return m_endofs_and_values.empty();
95 m_endofs_and_values.clear();
104 const std::deque<size_t>::const_iterator ub=
105 std::upper_bound(m_endofs_and_values.begin(),m_endofs_and_values.end(),
106 idx+m_off_offset,m_cmp);
114 return m_endofs_and_values.front().second;
120 return m_endofs_and_values.back().second;
128 m_endofs_and_values.push_back(std::make_pair(1,v));
130 else if(m_endofs_and_values.back()==v)
132 m_endofs_and_values.back().first+=1;
136 m_endofs_and_values.push_back(std::make_pair(m_endofs_and_values.back().first+1,v));
144 if(m_off_offset==m_endofs_and_values.front().first)
146 m_endofs_and_values.pop_front();
155 --m_endofs_and_values.back().first;
156 if(m_endofs_and_values.size()==1)
158 if(m_endofs_and_values.back().first==m_off_offset)
163 if(m_endofs_and_values.back().first
164 ==m_endofs_and_values[m_endofs_and_values.size()-2].first)
166 m_endofs_and_values.pop_back();
174 #endif // SHORE_CONTAINER_RLE_QUEUE_HPP__