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