-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstack.hpp
More file actions
129 lines (108 loc) · 3.04 KB
/
stack.hpp
File metadata and controls
129 lines (108 loc) · 3.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* stack.hpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: davidzh <davidzh@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/07/17 15:31:23 by tyamcha #+# #+# */
/* Updated: 2022/09/11 19:43:14 by davidzh ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef STACK_HPP
# define STACK_HPP
# include <deque>
namespace ft
{
template<typename _Tp, typename _Sequence = std::deque<_Tp> >
class stack
{
typedef typename _Sequence::value_type _Sequence_value_type;
template<typename _Tp1, typename _Seq1>
friend bool
operator==(const stack<_Tp1, _Seq1>&, const stack<_Tp1, _Seq1>&);
template<typename _Tp1, typename _Seq1>
friend bool
operator<(const stack<_Tp1, _Seq1>&, const stack<_Tp1, _Seq1>&);
public:
typedef typename _Sequence::value_type value_type;
typedef typename _Sequence::reference reference;
typedef typename _Sequence::const_reference const_reference;
typedef typename _Sequence::size_type size_type;
typedef _Sequence container_type;
protected:
_Sequence c;
public:
explicit
stack(const _Sequence& c = _Sequence())
: c(c)
{}
bool
empty (void) const
{
return (c.empty());
}
size_type
size (void) const
{
return (c.size());
}
reference
top (void)
{
return (c.back());
}
const_reference
top (void) const
{
return (c.back());
}
void
push(const value_type& x)
{
c.push_back(x);
}
void
pop (void)
{
c.pop_back();
}
};
template<typename _Tp, typename _Seq>
inline bool
operator==(const stack<_Tp, _Seq>& x, const stack<_Tp, _Seq>& y)
{
return (x.c == y.c);
}
template<typename _Tp, typename _Seq>
inline bool
operator<(const stack<_Tp, _Seq>& x, const stack<_Tp, _Seq>& y)
{
return (x.c < y.c);
}
template<typename _Tp, typename _Seq>
inline bool
operator!=(const stack<_Tp, _Seq>& x, const stack<_Tp, _Seq>& y)
{
return (!(x == y));
}
template<typename _Tp, typename _Seq>
inline bool
operator>(const stack<_Tp, _Seq>& x, const stack<_Tp, _Seq>& y)
{
return (y < x);
}
template<typename _Tp, typename _Seq>
inline bool
operator<=(const stack<_Tp, _Seq>& x, const stack<_Tp, _Seq>& y)
{
return (!(y < x));
}
template<typename _Tp, typename _Seq>
inline bool
operator>=(const stack<_Tp, _Seq>& x, const stack<_Tp, _Seq>& y)
{
return (!(x < y));
}
}
#endif