]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // (C) Copyright Jeremy Siek 2004 |
2 | // Distributed under the Boost Software License, Version 1.0. (See | |
3 | // accompanying file LICENSE_1_0.txt or copy at | |
4 | // http://www.boost.org/LICENSE_1_0.txt) | |
5 | ||
6 | #ifndef BOOST_QUEUE_HPP | |
7 | #define BOOST_QUEUE_HPP | |
8 | ||
9 | #include <deque> | |
10 | #include <algorithm> | |
11 | ||
12 | namespace boost { | |
13 | ||
14 | template <class _Tp, | |
15 | class _Sequence = std::deque<_Tp> > | |
16 | class queue; | |
17 | ||
18 | template <class _Tp, class _Seq> | |
19 | inline bool operator==(const queue<_Tp, _Seq>&, const queue<_Tp, _Seq>&); | |
20 | ||
21 | template <class _Tp, class _Seq> | |
22 | inline bool operator<(const queue<_Tp, _Seq>&, const queue<_Tp, _Seq>&); | |
23 | ||
24 | ||
25 | template <class _Tp, class _Sequence> | |
26 | class queue { | |
27 | ||
28 | #ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS | |
29 | template <class _Tp1, class _Seq1> | |
30 | friend bool operator== (const queue<_Tp1, _Seq1>&, | |
31 | const queue<_Tp1, _Seq1>&); | |
32 | template <class _Tp1, class _Seq1> | |
33 | friend bool operator< (const queue<_Tp1, _Seq1>&, | |
34 | const queue<_Tp1, _Seq1>&); | |
35 | #endif | |
36 | public: | |
37 | typedef typename _Sequence::value_type value_type; | |
38 | typedef typename _Sequence::size_type size_type; | |
39 | typedef _Sequence container_type; | |
40 | ||
41 | typedef typename _Sequence::reference reference; | |
42 | typedef typename _Sequence::const_reference const_reference; | |
43 | #ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS | |
44 | protected: | |
45 | #endif | |
46 | _Sequence c; | |
47 | public: | |
48 | queue() : c() {} | |
49 | explicit queue(const _Sequence& __c) : c(__c) {} | |
50 | ||
51 | bool empty() const { return c.empty(); } | |
52 | size_type size() const { return c.size(); } | |
53 | reference front() { return c.front(); } | |
54 | const_reference front() const { return c.front(); } | |
55 | reference top() { return c.front(); } | |
56 | const_reference top() const { return c.front(); } | |
57 | reference back() { return c.back(); } | |
58 | const_reference back() const { return c.back(); } | |
59 | void push(const value_type& __x) { c.push_back(__x); } | |
60 | void pop() { c.pop_front(); } | |
61 | ||
62 | void swap(queue& other) | |
63 | { | |
64 | using std::swap; | |
65 | swap(c, other.c); | |
66 | } | |
67 | }; | |
68 | ||
69 | template <class _Tp, class _Sequence> | |
70 | bool | |
71 | operator==(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y) | |
72 | { | |
73 | return __x.c == __y.c; | |
74 | } | |
75 | ||
76 | template <class _Tp, class _Sequence> | |
77 | bool | |
78 | operator<(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y) | |
79 | { | |
80 | return __x.c < __y.c; | |
81 | } | |
82 | ||
83 | template <class _Tp, class _Sequence> | |
84 | bool | |
85 | operator!=(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y) | |
86 | { | |
87 | return !(__x == __y); | |
88 | } | |
89 | ||
90 | template <class _Tp, class _Sequence> | |
91 | bool | |
92 | operator>(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y) | |
93 | { | |
94 | return __y < __x; | |
95 | } | |
96 | ||
97 | template <class _Tp, class _Sequence> | |
98 | bool | |
99 | operator<=(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y) | |
100 | { | |
101 | return !(__y < __x); | |
102 | } | |
103 | ||
104 | template <class _Tp, class _Sequence> | |
105 | bool | |
106 | operator>=(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y) | |
107 | { | |
108 | return !(__x < __y); | |
109 | } | |
110 | ||
111 | template <class _Tp, class _Sequence> | |
112 | inline void | |
113 | swap(queue<_Tp, _Sequence>& __x, queue<_Tp, _Sequence>& __y) | |
114 | { __x.swap(__y); } | |
115 | ||
116 | } /* namespace boost */ | |
117 | ||
118 | #endif /* BOOST_QUEUE_HPP */ |