Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
Deque.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4
6
8
10
11 /*
12 ********************************************************************************
13 *********************************** Deque<T> ***********************************
14 ********************************************************************************
15 */
16 template <typename T>
18 : inherited{Factory::Deque_Factory<T>::Default () ()}
19 {
20 _AssertRepValidType ();
21 }
22 template <typename T>
23 inline Deque<T>::Deque (const initializer_list<value_type>& src)
24 : Deque{}
25 {
26 this->AddAllToTail (src);
27 _AssertRepValidType ();
28 }
29#if !qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
30 template <typename T>
31 template <IIterableOfTo<T> ITERABLE_OF_ADDABLE>
32 inline Deque<T>::Deque (ITERABLE_OF_ADDABLE&& src)
33 requires (not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, Deque<T>>)
34 : Deque{}
35 {
36 this->AddAllToTail (forward<ITERABLE_OF_ADDABLE> (src));
37 _AssertRepValidType ();
38 }
39#endif
40 template <typename T>
41 inline Deque<T>::Deque (const shared_ptr<_IRep>& src) noexcept
42 : inherited{(RequireExpression (src != nullptr), src)}
43 {
44 _AssertRepValidType ();
45 }
46 template <typename T>
47 inline Deque<T>::Deque (shared_ptr<_IRep>&& src) noexcept
48 : inherited{(RequireExpression (src != nullptr), move (src))}
49 {
50 _AssertRepValidType ();
51 }
52 template <typename T>
53 template <IInputIterator<T> ITERATOR_OF_ADDABLE>
54 inline Deque<T>::Deque (ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end)
55 : Deque{}
56 {
57 this->AddAllToTail (forward<ITERATOR_OF_ADDABLE> (start), forward<ITERATOR_OF_ADDABLE> (end));
58 _AssertRepValidType ();
59 }
60 template <typename T>
61 inline void Deque<T>::AddHead (ArgByValueType<value_type> item)
62 {
63 _SafeReadWriteRepAccessor<_IRep>{this}._GetWriteableRep ().AddHead (item);
64 }
65 template <typename T>
66 inline void Deque<T>::push_front (ArgByValueType<value_type> item)
67 {
68 AddHead (item);
69 }
70 template <typename T>
72 {
73 return _SafeReadWriteRepAccessor<_IRep>{this}._GetWriteableRep ().RemoveTail ();
74 }
75 template <typename T>
77 {
78 return RemoveTail ();
79 }
80 template <typename T>
81 inline auto Deque<T>::Tail () const -> value_type
82 {
83 return _SafeReadRepAccessor<_IRep>{this}._ConstGetRep ().Tail ();
84 }
85 template <typename T>
86 inline T Deque<T>::back () const
87 {
88 return Tail ();
89 }
90 template <typename T>
91 inline void Deque<T>::_AssertRepValidType () const
92 {
94 _SafeReadRepAccessor<_IRep>{this};
95 }
96 }
97
98}
#define qStroika_Foundation_Debug_AssertionsChecked
The qStroika_Foundation_Debug_AssertionsChecked flag determines if assertions are checked and validat...
Definition Assertions.h:48
#define RequireExpression(c)
Definition Assertions.h:267
typename inherited::value_type value_type
Definition Deque.h:69
nonvirtual value_type RemoveTail()
Definition Deque.inl:71
nonvirtual void AddHead(ArgByValueType< value_type > item)
Definition Deque.inl:61
nonvirtual void push_front(ArgByValueType< value_type > item)
Definition Deque.inl:66
A Queue is a first-in-first-out (FIFO) data structure, where elements are arranged in well-ordered fa...
Definition Queue.h:95
nonvirtual void AddAllToTail(ITERABLE_OF_ADDABLE &&s)
static constexpr default_sentinel_t end() noexcept
Support for ranged for, and STL syntax in general.