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