| 241 | OrderedBin* CreateOrderedBin() const override; |
| 242 | |
| 243 | void FinishLoad() override { |
| 244 | // get total non zero size |
| 245 | size_t pair_cnt = 0; |
| 246 | for (size_t i = 0; i < push_buffers_.size(); ++i) { |
| 247 | pair_cnt += push_buffers_[i].size(); |
| 248 | } |
| 249 | std::vector<std::pair<data_size_t, VAL_T>>& idx_val_pairs = push_buffers_[0]; |
| 250 | idx_val_pairs.reserve(pair_cnt); |
| 251 | |
| 252 | for (size_t i = 1; i < push_buffers_.size(); ++i) { |
| 253 | idx_val_pairs.insert(idx_val_pairs.end(), push_buffers_[i].begin(), push_buffers_[i].end()); |
| 254 | push_buffers_[i].clear(); |
| 255 | push_buffers_[i].shrink_to_fit(); |
| 256 | } |
| 257 | // sort by data index |
| 258 | std::sort(idx_val_pairs.begin(), idx_val_pairs.end(), |
| 259 | [](const std::pair<data_size_t, VAL_T>& a, const std::pair<data_size_t, VAL_T>& b) { |
| 260 | return a.first < b.first; |
| 261 | }); |
| 262 | // load delta array |
| 263 | LoadFromPair(idx_val_pairs); |
| 264 | } |
| 265 | |
| 266 | void LoadFromPair(const std::vector<std::pair<data_size_t, VAL_T>>& idx_val_pairs) { |
| 267 | deltas_.clear(); |