14 std::vector<uint64_t> items;
22 for(uint64_t x : _items){
23 this->items.push_back(x);
30 return this->items.size();
32 uint64_t size_in_bytes()
const
34 return sizeof(std::vector<uint64_t>) + (this->items.capacity() *
sizeof(uint64_t));
37 uint64_t at(uint64_t pos)
const
39 return this->items[pos];
48 this->items.shrink_to_fit();
52 this->items.swap(item.items);
54 static std::string name()
56 return "plain integers";
58 uint64_t psum(uint64_t i)
const noexcept
61 assert(i < this->items.size());
63 for (uint64_t j = 0; j < this->items.size(); j++)
65 _sum += this->items[j];
75 uint64_t psum()
const noexcept
77 if (this->items.size() == 0)
83 return this->psum(this->items.size() - 1);
86 int64_t search(uint64_t x)
const noexcept
89 for (uint64_t i = 0; i < this->items.size(); i++)
91 _sum += this->items[i];
103 std::string to_string()
const
107 for (uint64_t i = 0; i < this->items.size(); i++)
109 s += std::to_string(this->items[i]);
110 if (i + 1 < this->items.size())
118 std::vector<uint64_t> to_value_vector()
const
120 std::vector<uint64_t> r;
121 for (uint64_t i : this->items)
127 std::vector<uint64_t> to_packed_vector()
const
129 return this->to_value_vector();
132 template<
typename VEC>
133 void to_values(VEC &output_vec)
const{
135 output_vec.resize(this->size());
136 for (uint64_t i = 0; i < this->size(); i++)
138 output_vec[i] = this->items[i];
143 void insert(uint64_t pos, uint64_t value)
145 assert(pos <= this->size());
146 this->items.insert(this->items.begin() + pos, value);
148 void remove(uint64_t pos)
150 assert(pos < this->size());
152 this->items.erase(this->items.begin() + pos);
154 void push_front(std::vector<uint64_t> &new_items)
156 std::vector<uint64_t> tmp;
157 for (uint64_t v : new_items)
161 for (uint64_t v : this->items)
165 this->items.swap(tmp);
167 void push_front(uint64_t new_item)
170 std::vector<uint64_t> tmp;
171 tmp.push_back(new_item);
172 for (uint64_t v : this->items)
176 this->items.swap(tmp);
179 void push_back(std::vector<uint64_t> &new_items)
181 for (uint64_t v : new_items)
183 this->items.push_back(v);
186 void push_back(uint64_t value)
188 this->items.push_back(value);
190 std::vector<uint64_t> pop_front(uint64_t len)
193 std::vector<uint64_t> tmp1, tmp2;
194 for (uint64_t i = 0; i < len; i++)
196 tmp1.push_back(this->items[i]);
198 for (uint64_t i = len; i < this->items.size(); i++)
200 tmp2.push_back(this->items[i]);
202 this->items.swap(tmp2);
205 std::vector<uint64_t> pop_back(uint64_t len)
208 std::vector<uint64_t> tmp1;
213 assert(this->items.size() > 0);
214 tmp1[k--] = this->items[this->items.size() - 1];
215 this->items.pop_back();
220 uint64_t reverse_psum(uint64_t i)
const
224 size_t size = this->items.size();
225 for (
size_t x = 0; x < len; x++)
227 sum += this->items[size - 1 - x];
232 uint64_t psum(uint64_t i, uint64_t j)
const
240 throw std::runtime_error(
"No implementation");
244 void increment(uint64_t i, int64_t delta)
246 this->items[i] += delta;
249 std::vector<uint64_t>::const_iterator begin()
const {
250 return this->items.begin();
253 std::vector<uint64_t>::const_iterator end()
const {
254 return this->items.end();
257 int64_t one_based_rank(uint64_t i, uint64_t c)
const {
258 return stool::StringFunctions::one_based_rank_query(this->items, i, c);
260 int64_t one_based_rank0(uint64_t i)
const {
261 return this->one_based_rank(0, i);
263 int64_t one_based_rank1(uint64_t i)
const {
264 return this->one_based_rank(1, i);
267 int64_t select(uint64_t i, uint64_t c)
const {
268 return stool::StringFunctions::select_query(this->items, i, c);
270 int64_t select0(uint64_t i)
const {
271 return this->select(0, i);
273 int64_t select1(uint64_t i)
const {
274 return this->select(1, i);
276 void sort_leaf_containers()