13 template<
typename Con,
typename Value>
22template<
typename Value, detail::QueueCompatible<Value> Con = container::Ring<Value>>
27 template<concepts::InputContainer Other>
35 struct Iterator :
public IteratorBase<Iterator, InputIteratorTag, Value, meta::ContainerSSizeType<Con>> {
44 constexpr auto operator*() const -> Value& {
return *m_base->
front(); }
46 constexpr void advance_one() { m_base->
pop(); }
49 constexpr friend auto operator==(Iterator
const& a, DefaultSentinel
const&) ->
bool {
50 return a.m_base->empty();
53 Queue* m_base {
nullptr };
67 constexpr auto front() {
return m_container.front(); }
68 constexpr auto front()
const {
return m_container.front(); }
71 requires(
requires { m_container.back(); })
73 return m_container.back();
75 constexpr auto back() const
76 requires(requires { m_container.back(); })
78 return m_container.back();
81 constexpr auto empty() const ->
bool {
return m_container.empty(); }
82 constexpr auto size() const
83 requires(
concepts::SizedContainer<Con>)
85 return m_container.size();
88 constexpr auto push(Value& value) ->
decltype(
auto)
91 return m_container.push_back(value);
94 constexpr auto push(Value
const& value) ->
decltype(
auto)
97 return m_container.push_back(value);
100 constexpr auto push(Value&& value) ->
decltype(
auto)
103 return m_container.push_back(util::move(value));
106 template<
typename... Args>
107 constexpr auto emplace(Args&&... args) ->
decltype(
auto)
108 requires(
requires { m_container.emplace_back(util::forward<Args>(args)...); })
110 return m_container.emplace_back(util::forward<Args>(args)...);
113 template<concepts::ContainerCompatible<Value> Other>
114 requires(
requires { m_container.append_container(util::forward<Other>(m_container)); })
116 return m_container.append_container(util::forward<Other>(
container));
119 constexpr auto pop() {
return m_container.pop_front(); }
121 constexpr auto begin() {
return Iterator(*
this); }
124 constexpr auto base() const -> Con const& {
return m_container; }
126 constexpr void clear() { m_container.clear(); }
136template<concepts::Container Con,
typename T = meta::ContainerValue<Con>>
137requires(detail::QueueCompatible<Con, T>)
140template<concepts::InputContainer Con,
typename T = meta::ContainerValue<Con>>
constexpr void clear()
Definition queue.h:126
constexpr auto push(Value &value) -> decltype(auto) requires(!concepts::CopyConstructible< Value > &&!concepts::MoveConstructible< Value >)
Definition queue.h:88
constexpr auto back()
Definition queue.h:70
constexpr friend auto tag_invoke(types::Tag< util::clone >, Queue const &self)
Definition queue.h:129
constexpr auto push(Value const &value) -> decltype(auto) requires(concepts::CopyConstructible< Value >)
Definition queue.h:94
constexpr auto begin()
Definition queue.h:121
constexpr auto push(Value &&value) -> decltype(auto) requires(concepts::MoveConstructible< Value >)
Definition queue.h:100
constexpr auto base() const -> Con const &
Definition queue.h:124
constexpr auto size() const
Definition queue.h:82
constexpr friend auto tag_invoke(types::Tag< util::create_in_place >, InPlaceType< Queue >, Other &&other)
Definition queue.h:29
constexpr auto empty() const -> bool
Definition queue.h:81
constexpr auto front()
Definition queue.h:67
constexpr auto back() const
Definition queue.h:75
auto operator=(Queue &&) -> Queue &=default
constexpr auto pop()
Definition queue.h:119
constexpr auto front() const
Definition queue.h:68
constexpr auto emplace(Args &&... args) -> decltype(auto) requires(
Definition queue.h:107
constexpr Queue(Con &&container)
Definition queue.h:61
constexpr auto push_container(Other &&container)
Definition queue.h:115
constexpr auto end()
Definition queue.h:122
Definition container_compatible.h:9
Definition operations.h:34
Definition operations.h:43
Definition any_storable.h:9
constexpr auto move
Definition move.h:38
constexpr auto to(Con &&container, Args &&... args)
Definition to.h:25
constexpr auto default_sentinel
Definition default_sentinel.h:6
Queue(Con) -> Queue< T, Con >
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
Definition zstring_parser.h:9
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto as_fallible
Definition as_fallible.h:26
constexpr auto try_infallible
Definition try_infallible.h:31
Definition iterator_base.h:14
Definition in_place_template.h:5
Definition in_place_type.h:5