in fatal/container/circular_queue.h [126:154]
void grow() {
FATAL_ASSUME_EQ(size_, queue_.size());
queue_type grown;
grown.resize(queue_.empty() ? 1 : queue_.size() * growth_rate::value);
FATAL_ASSUME_LT(size_, grown.size());
auto destination = grown.begin();
for (auto chunk: chunks()) {
for(auto i = chunk.first; i < chunk.second; ++i, ++destination) {
new (std::addressof(destination->value)) value_type(
std::move(queue_[i].value)
);
queue_[i].value.~value_type();
}
}
FATAL_ASSUME_NOT_NEGATIVE(std::distance(grown.begin(), destination));
FATAL_ASSUME_EQ(
size_,
static_cast<size_type>(std::distance(grown.begin(), destination))
);
queue_ = std::move(grown);
offset_ = 0;
FATAL_ASSUME_LT(size_, queue_.size());
}