void shift_to_back()

in fatal/container/circular_queue.h [357:378]


  void shift_to_back(Shifter &&shifter = Shifter()) {
    assert(!queue_.empty());

    auto const original = offset_;
    auto const destination = loose_real_index(size_);

    FATAL_ASSUME_LT(offset_, queue_.size());
    if (++offset_ == queue_.size()) {
      offset_ = 0;
    }
    FATAL_ASSUME_LT(offset_, queue_.size());

    FATAL_ASSUME_LE(size_, queue_.size());
    if (size_ < queue_.size()) {
      auto &from = queue_[original].value;
      shifter(
        std::addressof(queue_[destination].value),
        std::move(from)
      );
      from.~value_type();
    }
  }