void grow()

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());
  }