| 472 | } |
| 473 | |
| 474 | void push_back(const T value) |
| 475 | { |
| 476 | BOOST_ASSERT_MSG(value <= T{(1ULL << Bits) - 1}, "Value too big for packed storage."); |
| 477 | |
| 478 | auto internal_index = get_internal_index(num_elements); |
| 479 | |
| 480 | while (internal_index.lower_word + 1 >= vec.size()) |
| 481 | { |
| 482 | allocate_blocks(1); |
| 483 | } |
| 484 | |
| 485 | set_value(internal_index, value); |
| 486 | num_elements++; |
| 487 | |
| 488 | BOOST_ASSERT(static_cast<T>(back()) == value); |
| 489 | } |
| 490 | |
| 491 | std::size_t size() const { return num_elements; } |
| 492 |