sl@0: // (C) Copyright Jeremy Siek 2004 sl@0: // Distributed under the Boost Software License, Version 1.0. (See sl@0: // accompanying file LICENSE_1_0.txt or copy at sl@0: // http://www.boost.org/LICENSE_1_0.txt) sl@0: sl@0: #ifndef BOOST_QUEUE_HPP sl@0: #define BOOST_QUEUE_HPP sl@0: sl@0: #include sl@0: #include sl@0: sl@0: namespace boost { sl@0: sl@0: template > sl@0: class queue; sl@0: sl@0: template sl@0: inline bool operator==(const queue<_Tp, _Seq>&, const queue<_Tp, _Seq>&); sl@0: sl@0: template sl@0: inline bool operator<(const queue<_Tp, _Seq>&, const queue<_Tp, _Seq>&); sl@0: sl@0: sl@0: template sl@0: class queue { sl@0: sl@0: #ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS sl@0: template sl@0: friend bool operator== (const queue<_Tp1, _Seq1>&, sl@0: const queue<_Tp1, _Seq1>&); sl@0: template sl@0: friend bool operator< (const queue<_Tp1, _Seq1>&, sl@0: const queue<_Tp1, _Seq1>&); sl@0: #endif sl@0: public: sl@0: typedef typename _Sequence::value_type value_type; sl@0: typedef typename _Sequence::size_type size_type; sl@0: typedef _Sequence container_type; sl@0: sl@0: typedef typename _Sequence::reference reference; sl@0: typedef typename _Sequence::const_reference const_reference; sl@0: #ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS sl@0: protected: sl@0: #endif sl@0: _Sequence c; sl@0: public: sl@0: queue() : c() {} sl@0: explicit queue(const _Sequence& __c) : c(__c) {} sl@0: sl@0: bool empty() const { return c.empty(); } sl@0: size_type size() const { return c.size(); } sl@0: reference front() { return c.front(); } sl@0: const_reference front() const { return c.front(); } sl@0: reference top() { return c.front(); } sl@0: const_reference top() const { return c.front(); } sl@0: reference back() { return c.back(); } sl@0: const_reference back() const { return c.back(); } sl@0: void push(const value_type& __x) { c.push_back(__x); } sl@0: void pop() { c.pop_front(); } sl@0: sl@0: void swap(queue& other) sl@0: { sl@0: using std::swap; sl@0: swap(c, other.c); sl@0: } sl@0: }; sl@0: sl@0: template sl@0: bool sl@0: operator==(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y) sl@0: { sl@0: return __x.c == __y.c; sl@0: } sl@0: sl@0: template sl@0: bool sl@0: operator<(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y) sl@0: { sl@0: return __x.c < __y.c; sl@0: } sl@0: sl@0: template sl@0: bool sl@0: operator!=(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y) sl@0: { sl@0: return !(__x == __y); sl@0: } sl@0: sl@0: template sl@0: bool sl@0: operator>(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y) sl@0: { sl@0: return __y < __x; sl@0: } sl@0: sl@0: template sl@0: bool sl@0: operator<=(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y) sl@0: { sl@0: return !(__y < __x); sl@0: } sl@0: sl@0: template sl@0: bool sl@0: operator>=(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y) sl@0: { sl@0: return !(__x < __y); sl@0: } sl@0: sl@0: template sl@0: inline void sl@0: swap(queue<_Tp, _Sequence>& __x, queue<_Tp, _Sequence>& __y) sl@0: { __x.swap(__y); } sl@0: sl@0: } /* namespace boost */ sl@0: sl@0: #endif /* BOOST_QUEUE_HPP */