ORIGINAL
Loading...
Searching...
No Matches
queue.h
Go to the documentation of this file.
1#ifndef QUEUE_H
2#define QUEUE_H
3
10
11#include "containerAdapter.h"
12#include "chain.h"
13#include <string>
14
15namespace original {
16
32 template<typename TYPE,
33 template <typename, typename> typename SERIAL = chain,
34 template <typename> typename ALLOC = allocator>
35 class queue final : public containerAdapter<TYPE, SERIAL, ALLOC> {
36 public:
44 explicit queue(const SERIAL<TYPE, ALLOC<TYPE>>& serial = SERIAL<TYPE, ALLOC<TYPE>>{});
45
52 queue(const std::initializer_list<TYPE>& lst);
53
59 queue(const queue& other);
60
67 queue& operator=(const queue& other);
68
75 queue(queue&& other) noexcept;
76
84 queue& operator=(queue&& other) noexcept;
85
92 void push(const TYPE& e);
93
102 TYPE pop();
103
111 TYPE head() const;
112
120 TYPE tail() const;
121
126 [[nodiscard]] std::string className() const override;
127 };
128}
129
130 template<typename TYPE,
131 template <typename, typename> typename SERIAL,
132 template <typename> typename ALLOC>
133 original::queue<TYPE, SERIAL, ALLOC>::queue(const SERIAL<TYPE, ALLOC<TYPE>>& serial)
134 : containerAdapter<TYPE, SERIAL, ALLOC>(serial) {}
135
136 template<typename TYPE,
137 template <typename, typename> typename SERIAL,
138 template <typename> typename ALLOC>
139 original::queue<TYPE, SERIAL, ALLOC>::queue(const std::initializer_list<TYPE> &lst)
140 : queue(SERIAL<TYPE, ALLOC<TYPE>>(lst)) {}
141
142 template<typename TYPE,
143 template <typename, typename> typename SERIAL,
144 template <typename> typename ALLOC>
146 : containerAdapter<TYPE, SERIAL, ALLOC>(other.serial_) {}
147
148 template<typename TYPE,
149 template <typename, typename> typename SERIAL,
150 template <typename> typename ALLOC>
152 if (this == &other) return *this;
153 this->serial_ = other.serial_;
154 return *this;
155 }
156
157 template<typename TYPE,
158 template <typename, typename> typename SERIAL,
159 template <typename> typename ALLOC>
161 {
162 this->operator=(std::move(other));
163 }
164
165 template<typename TYPE,
166 template <typename, typename> typename SERIAL,
167 template <typename> typename ALLOC>
169 {
170 if (this == &other)
171 return *this;
172
173 this->serial_ = std::move(other.serial_);
174 other.serial_ = SERIAL<TYPE, ALLOC<TYPE>>{};
175 return *this;
176 }
177
178 template<typename TYPE,
179 template <typename, typename> typename SERIAL,
180 template <typename> typename ALLOC>
181 auto original::queue<TYPE, SERIAL, ALLOC>::push(const TYPE& e) -> void {
182 this->serial_.pushEnd(e);
183 }
184
185 template<typename TYPE,
186 template <typename, typename> typename SERIAL,
187 template <typename> typename ALLOC>
189 return this->serial_.popBegin();
190 }
191
192 template<typename TYPE,
193 template <typename, typename> typename SERIAL,
194 template <typename> typename ALLOC>
196 return this->serial_.getBegin();
197 }
198
199 template<typename TYPE,
200 template <typename, typename> typename SERIAL,
201 template <typename> typename ALLOC>
203 return this->serial_.getEnd();
204 }
205
206 template<typename TYPE,
207 template <typename, typename> typename SERIAL,
208 template <typename> typename ALLOC>
210 return "queue";
211 }
212
213#endif //QUEUE_H
Non-cyclic doubly linked list implementation.
Default memory allocator using allocators utilities.
Definition allocator.h:154
Non-cyclic doubly linked list container.
Definition chain.h:36
chain< TYPE, allocator< TYPE > > serial_
Definition containerAdapter.h:60
containerAdapter(const chain< TYPE, allocator< TYPE > > &serial)
Definition containerAdapter.h:139
queue & operator=(const queue &other)
Copy assignment operator.
Definition queue.h:151
std::string className() const override
Gets class name identifier.
Definition queue.h:209
TYPE head() const
Accesses front element of the queue.
Definition queue.h:195
void push(const TYPE &e)
Inserts element at the back of the queue.
Definition queue.h:181
TYPE pop()
Removes and returns front element from the queue.
Definition queue.h:188
TYPE tail() const
Accesses back element of the queue.
Definition queue.h:202
queue(const SERIAL< TYPE, ALLOC< TYPE > > &serial=SERIAL< TYPE, ALLOC< TYPE > >{})
Constructs queue with specified underlying container and allocator.
Definition queue.h:133
Abstract base class for sequential containers with index-based access.
Definition serial.h:34
Base class for container adapters with common interfaces.
Main namespace for the project Original.
Definition algorithms.h:21