19#include "pw_async2/context.h"
20#include "pw_async2/poll.h"
21#include "pw_async2/try.h"
22#include "pw_containers/inline_deque.h"
23#include "pw_containers/internal/async_count_and_capacity.h"
24#include "pw_containers/internal/raw_storage.h"
25#include "pw_toolchain/constexpr_tag.h"
32template <
typename T,
typename SizeType,
size_t kCapacity>
33class BasicInlineAsyncDeque;
39template <
typename T,
size_t kCapacity = containers::
internal::kGenericSized>
42template <
typename ValueType,
44 size_t kCapacity = containers::internal::kGenericSized>
46 :
public containers::internal::RawStorage<
47 BasicInlineAsyncDeque<ValueType,
49 containers::internal::kGenericSized>,
55 containers::internal::kGenericSized>;
58 using typename Base::const_iterator;
59 using typename Base::const_pointer;
60 using typename Base::const_reference;
61 using typename Base::difference_type;
62 using typename Base::iterator;
63 using typename Base::pointer;
64 using typename Base::reference;
65 using typename Base::size_type;
66 using typename Base::value_type;
73 Base::assign(count, value);
82 typename InputIterator,
83 typename = containers::internal::EnableIfInputIterator<InputIterator>>
85 Base::assign(start, finish);
94 template <
size_t kOtherCapacity>
102 *
this = std::move(other);
106 template <
size_t kOtherCapacity>
110 *
this = std::move(other);
119 template <
typename T,
typename = containers::
internal::EnableIfIterable<T>>
136 const std::initializer_list<value_type>& list) {
137 Base::operator=(list);
143 Base::operator=(
static_cast<const Base&
>(other));
150 template <
size_t kOtherCapacity>
153 Base::operator=(
static_cast<const Base&
>(other));
159 Base::operator=(
static_cast<Base&&
>(std::move(other)));
164 template <
size_t kOtherCapacity>
168 Base::operator=(
static_cast<Base&&
>(std::move(other)));
174 static constexpr size_type max_size() {
return capacity(); }
175 static constexpr size_type capacity() {
return kCapacity; }
186template <
typename ValueType,
typename SizeType>
189 containers::internal::kGenericSized>
192 containers::internal::AsyncCountAndCapacity<SizeType>,
193 containers::internal::kGenericSized> {
198 containers::internal::kGenericSized>;
201 using typename Base::const_iterator;
202 using typename Base::const_pointer;
203 using typename Base::const_reference;
204 using typename Base::difference_type;
205 using typename Base::iterator;
206 using typename Base::pointer;
207 using typename Base::reference;
208 using typename Base::size_type;
209 using typename Base::value_type;
212 Base::assign(other.begin(), other.end());
218 for (
auto&& item : other) {
219 Base::emplace_back(std::move(item));
225 using Base::operator=;
229 return Base::count_and_capacity().PendHasSpace(context, num);
234 return Base::count_and_capacity().PendNotEmpty(context);
243 ~BasicInlineAsyncDeque() =
default;
246 static constexpr bool kFixedCapacity =
true;
Definition: inline_async_deque.h:193
Definition: inline_async_deque.h:51
Definition: async_count_and_capacity.h:35
Definition: inline_deque.h:77
BasicInlineAsyncDeque(InputIterator start, InputIterator finish)
Copy constructs from an iterator.
Definition: inline_async_deque.h:84
BasicInlineAsyncDeque(const BasicInlineAsyncDeque< ValueType, SizeType, kOtherCapacity > &other)
Definition: inline_async_deque.h:95
async2::Poll PendHasSpace(async2::Context &context, size_type num=1)
Returns Pending until space for num elements is available.
Definition: inline_async_deque.h:228
BasicInlineAsyncDeque(BasicInlineAsyncDeque< ValueType, SizeType, kOtherCapacity > &&other) noexcept
Move constructs for mismatched capacity.
Definition: inline_async_deque.h:107
BasicInlineAsyncDeque(const BasicInlineAsyncDeque &other)
Copy constructs for matching capacity.
Definition: inline_async_deque.h:89
BasicInlineAsyncDeque & operator=(BasicInlineAsyncDeque &&other) noexcept
Move assigns for matching capacity.
Definition: inline_async_deque.h:158
BasicInlineAsyncDeque & operator=(BasicInlineAsyncDeque< ValueType, SizeType, kOtherCapacity > &&other) noexcept
Move assigns for mismatched capacity.
Definition: inline_async_deque.h:165
BasicInlineAsyncDeque & operator=(const BasicInlineAsyncDeque &other)
Copy assigns for matching capacity.
Definition: inline_async_deque.h:142
constexpr BasicInlineAsyncDeque() noexcept=default
Constructs with zero elements.
BasicInlineAsyncDeque(BasicInlineAsyncDeque &&other) noexcept
Move constructs for matching capacity.
Definition: inline_async_deque.h:101
BasicInlineAsyncDeque(const T &other)
Copy constructor for arbitrary iterables.
Definition: inline_async_deque.h:120
BasicInlineAsyncDeque(size_type count)
Constructs with count default-initialized elements.
Definition: inline_async_deque.h:77
BasicInlineAsyncDeque & operator=(const std::initializer_list< value_type > &list)
Copy assigns from list.
Definition: inline_async_deque.h:135
BasicInlineAsyncDeque & operator=(const BasicInlineAsyncDeque< ValueType, SizeType, kOtherCapacity > &other)
Definition: inline_async_deque.h:151
async2::Poll PendNotEmpty(async2::Context &context)
Returns Pending until an element is available.
Definition: inline_async_deque.h:233
BasicInlineAsyncDeque(const std::initializer_list< value_type > &list)
Copy constructs from an initializer list.
Definition: inline_async_deque.h:114
The Pigweed namespace.
Definition: alignment.h:27