| 240 | } |
| 241 | |
| 242 | void PostingListCodecBitpacking::encode( |
| 243 | const PostingList & postings, size_t max_rowids_in_segment, TokenPostingsInfo & info, WriteBuffer & out) const |
| 244 | { |
| 245 | PostingListCodecBitpackingImpl impl(max_rowids_in_segment); |
| 246 | std::vector<uint32_t> rowids; |
| 247 | rowids.resize(postings.cardinality()); |
| 248 | postings.toUint32Array(rowids.data()); |
| 249 | |
| 250 | std::span<uint32_t> rowids_view(rowids.data(), rowids.size()); |
| 251 | while (rowids_view.size() >= BLOCK_SIZE) |
| 252 | { |
| 253 | auto front = rowids_view.first(BLOCK_SIZE); |
| 254 | impl.insert(front); |
| 255 | rowids_view = rowids_view.subspan(BLOCK_SIZE); |
| 256 | } |
| 257 | |
| 258 | if (!rowids_view.empty()) |
| 259 | { |
| 260 | for (auto rowid: rowids_view) |
| 261 | impl.insert(rowid); |
| 262 | } |
| 263 | impl.encode(out, info); |
| 264 | } |
| 265 | } |
| 266 | |