3#ifndef pRC_CORE_CONTAINER_DEQUE_H
4#define pRC_CORE_CONTAINER_DEQUE_H
13 template<
class T, Size N>
28 constexpr auto size()
const
33 constexpr decltype(
auto)
front(
Index const position = 0) &&
35 return move(*
this)[position];
38 constexpr decltype(
auto)
front(
Index const position = 0)
const &&
40 return move(*
this)[position];
43 constexpr decltype(
auto)
front(
Index const position = 0) &
45 return operator[](position);
48 constexpr decltype(
auto)
front(
Index const position = 0)
const &
50 return operator[](position);
53 constexpr decltype(
auto)
back(
Index const position = 0) &&
55 return move(*
this)[mSize - position - 1];
58 constexpr decltype(
auto)
back(
Index const position = 0)
const &&
60 return move(*
this)[mSize - position - 1];
63 constexpr decltype(
auto)
back(
Index const position = 0) &
65 return operator[](mSize - position - 1);
68 constexpr decltype(
auto)
back(
Index const position = 0)
const &
70 return operator[](mSize - position - 1);
80 template<IsConvertible<T> R>
88 template<IsConvertible<T> R>
99 front() = move(element);
106 front() = move(element);
110 template<
class... Args>
115 front() =
T(forward<Args>(args)...);
119 template<
class... Args>
124 front() =
T(forward<Args>(args)...);
134 template<IsConvertible<T> R>
142 template<IsConvertible<T> R>
153 back() = move(element);
160 back() = move(element);
164 template<
class... Args>
169 back() =
T(forward<Args>(args)...);
173 template<
class... Args>
178 back() =
T(forward<Args>(args)...);
189 constexpr decltype(
auto)
operator[](
Index const position) &&
191 return move(mData)[getIndex(position)];
194 constexpr decltype(
auto)
operator[](
Index const position)
const &&
196 return move(mData)[getIndex(position)];
199 constexpr decltype(
auto)
operator[](
Index const position) &
201 return mData[getIndex(position)];
204 constexpr decltype(
auto)
operator[](
Index const position)
const &
206 return mData[getIndex(position)];
209 constexpr auto getIndex(
Index const position)
const
213 if(position >= mSize)
221 return (mNext + N - 1 - position) % N;
229 constexpr auto updatePushFront()
233 mSize =
min(mSize + 1, N);
234 mNext = (mNext + 1) % N;
238 constexpr auto updatePopFront()
251 mNext = (mNext - 1) % N;
255 constexpr auto updatePushBack()
261 mNext = (mNext - 1) % N;
263 mSize =
min(mSize + 1, N);
267 constexpr auto updatePopBack()
295 []<
class U,
Size N>(
Deque<U, N> const &&)
constexpr auto pushBack(T &&element) &&
Definition deque.hpp:150
constexpr auto & emplaceBack(Args &&...args) &
Definition deque.hpp:175
constexpr auto & pushFront(T &&element) &
Definition deque.hpp:103
constexpr auto emplaceBack(Args &&...args) &&
Definition deque.hpp:166
constexpr auto size() const
Definition deque.hpp:28
constexpr Deque & operator=(Deque const &) &=default
constexpr decltype(auto) front(Index const position=0) const &
Definition deque.hpp:48
constexpr Deque(Deque &&)=default
constexpr Deque()=default
constexpr auto & emplaceFront(Args &&...args) &
Definition deque.hpp:121
constexpr auto & pushBack(R const &element) &
Definition deque.hpp:143
constexpr auto & pushBack(T &&element) &
Definition deque.hpp:157
constexpr decltype(auto) front(Index const position=0) &&
Definition deque.hpp:33
constexpr auto emplaceFront(Args &&...args) &&
Definition deque.hpp:112
constexpr decltype(auto) front(Index const position=0) &
Definition deque.hpp:43
constexpr Deque(Deque const &)=default
constexpr decltype(auto) back(Index const position=0) const &&
Definition deque.hpp:58
constexpr auto & clear() &
Definition deque.hpp:73
static constexpr auto Capacity
Definition deque.hpp:18
constexpr decltype(auto) back(Index const position=0) &
Definition deque.hpp:63
constexpr auto & popFront() &
Definition deque.hpp:128
constexpr auto pushFront(T &&element) &&
Definition deque.hpp:96
constexpr Deque & operator=(Deque &&) &=default
constexpr auto & pushFront(R const &element) &
Definition deque.hpp:89
constexpr auto pushFront(R const &element) &&
Definition deque.hpp:81
constexpr decltype(auto) back(Index const position=0) const &
Definition deque.hpp:68
constexpr auto & popBack() &
Definition deque.hpp:182
constexpr decltype(auto) back(Index const position=0) &&
Definition deque.hpp:53
constexpr decltype(auto) front(Index const position=0) const &&
Definition deque.hpp:38
constexpr auto pushBack(R const &element) &&
Definition deque.hpp:135
Definition concepts.hpp:37
Definition concepts.hpp:19
pRC::Float<> T
Definition externs_nonTT.hpp:1
static void error(Xs &&...args)
Definition log.hpp:14
Definition cholesky.hpp:10
Size Index
Definition basics.hpp:32
std::size_t Size
Definition basics.hpp:31
static constexpr decltype(auto) min(X &&a)
Definition min.hpp:13
CommonArray< Allocation::Stack, T, Ns... > StackArray
Definition declarations.hpp:15
constexpr auto cDebugLevel
Definition config.hpp:48
#define BEGIN_IGNORE_DIAGNOSTIC_GCC(warning)
Definition pragma.hpp:42
#define END_IGNORE_DIAGNOSTIC_GCC
Definition pragma.hpp:43