5#include "containerAdapter.h"
9 template<
typename TYPE,
template <
typename>
typename SERIAL =
chain>
10 class stack final :
public containerAdapter<TYPE, SERIAL> {
12 explicit stack(
const SERIAL<TYPE>&
serial = SERIAL<TYPE>{});
13 stack(
const std::initializer_list<TYPE>& lst);
14 stack(
const stack& other);
15 stack& operator=(
const stack& other);
16 stack(stack&& other)
noexcept;
17 stack& operator=(stack&& other)
noexcept;
18 bool operator==(
const stack& other)
const;
19 void push(
const TYPE& e);
22 [[nodiscard]] std::string className()
const override;
26 template<
typename TYPE,
template <
typename>
typename SERIAL>
27 original::stack<TYPE, SERIAL>::stack(
const SERIAL<TYPE>& serial)
28 : containerAdapter<TYPE, SERIAL>(serial) {}
30 template<
typename TYPE,
template <
typename>
typename SERIAL>
31 original::stack<TYPE, SERIAL>::stack(
const std::initializer_list<TYPE> &lst)
32 :
stack(SERIAL<TYPE>(lst)) {}
34 template<
typename TYPE,
template <
typename>
typename SERIAL>
35 original::stack<TYPE, SERIAL>::stack(
const stack& other)
38 template<
typename TYPE,
template <
typename>
typename SERIAL>
39 auto original::stack<TYPE, SERIAL>::operator=(
const stack& other) ->
stack& {
40 if (
this == &other)
return *
this;
41 this->serial_ = other.serial_;
45 template <
typename TYPE,
template <
typename>
class SERIAL>
46 original::stack<TYPE, SERIAL>::stack(
stack&& other) noexcept :
stack()
48 this->operator=(std::move(other));
51 template <
typename TYPE,
template <
typename>
class SERIAL>
52 auto original::stack<TYPE, SERIAL>::operator=(
stack&& other)
noexcept ->
stack&
57 this->serial_ = std::move(other.serial_);
58 other.serial_ = SERIAL<TYPE>{};
62 template<
typename TYPE,
template <
typename>
typename SERIAL>
63 auto original::stack<TYPE, SERIAL>::operator==(
const stack& other)
const ->
bool {
64 return this->serial_ == other.serial_;
67 template<
typename TYPE,
template <
typename>
typename SERIAL>
68 auto original::stack<TYPE, SERIAL>::push(
const TYPE& e) ->
void {
69 this->serial_.pushEnd(e);
72 template<
typename TYPE,
template <
typename>
typename SERIAL>
73 auto original::stack<TYPE, SERIAL>::pop() -> TYPE {
74 return this->serial_.popEnd();
77 template<
typename TYPE,
template <
typename>
typename SERIAL>
78 auto original::stack<TYPE, SERIAL>::top() const -> TYPE {
79 return this->serial_.getEnd();
82 template<
typename TYPE,
template <
typename>
typename SERIAL>
83 std::string original::stack<TYPE, SERIAL>::className()
const {
Definition containerAdapter.h:10