void shift_to_front()

in fatal/container/circular_queue.h [278:301]


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

    FATAL_ASSUME_POSITIVE(size_);
    auto const original = real_index(size_ - 1);
    FATAL_ASSUME_LT(original, queue_.size());

    if (offset_) {
      --offset_;
    } else {
      offset_ = queue_.size() - 1;
    }
    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_[offset_].value),
        std::move(from)
      );
      from.~value_type();
    }
  }