xref: /dflybsd-src/contrib/gcc-4.7/libstdc++-v3/include/profile/deque (revision 04febcfb30580676d3e95f58a16c5137ee478b32)
1*e4b17023SJohn Marino// Profiling deque implementation -*- C++ -*-
2*e4b17023SJohn Marino
3*e4b17023SJohn Marino// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
4*e4b17023SJohn Marino//
5*e4b17023SJohn Marino// This file is part of the GNU ISO C++ Library.  This library is free
6*e4b17023SJohn Marino// software; you can redistribute it and/or modify it under the
7*e4b17023SJohn Marino// terms of the GNU General Public License as published by the
8*e4b17023SJohn Marino// Free Software Foundation; either version 3, or (at your option)
9*e4b17023SJohn Marino// any later version.
10*e4b17023SJohn Marino
11*e4b17023SJohn Marino// This library is distributed in the hope that it will be useful,
12*e4b17023SJohn Marino// but WITHOUT ANY WARRANTY; without even the implied warranty of
13*e4b17023SJohn Marino// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*e4b17023SJohn Marino// GNU General Public License for more details.
15*e4b17023SJohn Marino
16*e4b17023SJohn Marino// Under Section 7 of GPL version 3, you are granted additional
17*e4b17023SJohn Marino// permissions described in the GCC Runtime Library Exception, version
18*e4b17023SJohn Marino// 3.1, as published by the Free Software Foundation.
19*e4b17023SJohn Marino
20*e4b17023SJohn Marino// You should have received a copy of the GNU General Public License and
21*e4b17023SJohn Marino// a copy of the GCC Runtime Library Exception along with this program;
22*e4b17023SJohn Marino// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23*e4b17023SJohn Marino// <http://www.gnu.org/licenses/>.
24*e4b17023SJohn Marino
25*e4b17023SJohn Marino/** @file profile/deque
26*e4b17023SJohn Marino *  This file is a GNU profile extension to the Standard C++ Library.
27*e4b17023SJohn Marino */
28*e4b17023SJohn Marino
29*e4b17023SJohn Marino#ifndef _GLIBCXX_PROFILE_DEQUE
30*e4b17023SJohn Marino#define _GLIBCXX_PROFILE_DEQUE 1
31*e4b17023SJohn Marino
32*e4b17023SJohn Marino#include <deque>
33*e4b17023SJohn Marino
34*e4b17023SJohn Marinonamespace std _GLIBCXX_VISIBILITY(default)
35*e4b17023SJohn Marino{
36*e4b17023SJohn Marinonamespace __profile
37*e4b17023SJohn Marino{
38*e4b17023SJohn Marino  /// Class std::deque wrapper with performance instrumentation.
39*e4b17023SJohn Marino  template<typename _Tp, typename _Allocator = std::allocator<_Tp> >
40*e4b17023SJohn Marino    class deque
41*e4b17023SJohn Marino    : public _GLIBCXX_STD_C::deque<_Tp, _Allocator>
42*e4b17023SJohn Marino    {
43*e4b17023SJohn Marino      typedef  _GLIBCXX_STD_C::deque<_Tp, _Allocator> _Base;
44*e4b17023SJohn Marino
45*e4b17023SJohn Marino    public:
46*e4b17023SJohn Marino      typedef typename _Base::reference             reference;
47*e4b17023SJohn Marino      typedef typename _Base::const_reference       const_reference;
48*e4b17023SJohn Marino
49*e4b17023SJohn Marino      typedef typename _Base::iterator             iterator;
50*e4b17023SJohn Marino      typedef typename _Base::const_iterator       const_iterator;
51*e4b17023SJohn Marino      typedef typename _Base::reverse_iterator     reverse_iterator;
52*e4b17023SJohn Marino      typedef typename _Base::const_reverse_iterator const_reverse_iterator;
53*e4b17023SJohn Marino
54*e4b17023SJohn Marino      typedef typename _Base::size_type             size_type;
55*e4b17023SJohn Marino      typedef typename _Base::difference_type       difference_type;
56*e4b17023SJohn Marino
57*e4b17023SJohn Marino      typedef _Tp				    value_type;
58*e4b17023SJohn Marino      typedef _Allocator			    allocator_type;
59*e4b17023SJohn Marino      typedef typename _Base::pointer               pointer;
60*e4b17023SJohn Marino      typedef typename _Base::const_pointer         const_pointer;
61*e4b17023SJohn Marino
62*e4b17023SJohn Marino      // 23.2.1.1 construct/copy/destroy:
63*e4b17023SJohn Marino      explicit
64*e4b17023SJohn Marino      deque(const _Allocator& __a = _Allocator())
65*e4b17023SJohn Marino      : _Base(__a) { }
66*e4b17023SJohn Marino
67*e4b17023SJohn Marino#ifdef __GXX_EXPERIMENTAL_CXX0X__
68*e4b17023SJohn Marino      explicit
69*e4b17023SJohn Marino      deque(size_type __n)
70*e4b17023SJohn Marino      : _Base(__n) { }
71*e4b17023SJohn Marino
72*e4b17023SJohn Marino      deque(size_type __n, const _Tp& __value,
73*e4b17023SJohn Marino	    const _Allocator& __a = _Allocator())
74*e4b17023SJohn Marino      : _Base(__n, __value, __a) { }
75*e4b17023SJohn Marino#else
76*e4b17023SJohn Marino      explicit
77*e4b17023SJohn Marino      deque(size_type __n, const _Tp& __value = _Tp(),
78*e4b17023SJohn Marino	    const _Allocator& __a = _Allocator())
79*e4b17023SJohn Marino      : _Base(__n, __value, __a) { }
80*e4b17023SJohn Marino#endif
81*e4b17023SJohn Marino
82*e4b17023SJohn Marino      template<class _InputIterator>
83*e4b17023SJohn Marino        deque(_InputIterator __first, _InputIterator __last,
84*e4b17023SJohn Marino	      const _Allocator& __a = _Allocator())
85*e4b17023SJohn Marino	: _Base(__first, __last, __a)
86*e4b17023SJohn Marino        { }
87*e4b17023SJohn Marino
88*e4b17023SJohn Marino      deque(const deque& __x)
89*e4b17023SJohn Marino      : _Base(__x) { }
90*e4b17023SJohn Marino
91*e4b17023SJohn Marino      deque(const _Base& __x)
92*e4b17023SJohn Marino      : _Base(__x) { }
93*e4b17023SJohn Marino
94*e4b17023SJohn Marino#ifdef __GXX_EXPERIMENTAL_CXX0X__
95*e4b17023SJohn Marino      deque(deque&& __x)
96*e4b17023SJohn Marino      : _Base(std::move(__x))
97*e4b17023SJohn Marino      { }
98*e4b17023SJohn Marino
99*e4b17023SJohn Marino      deque(initializer_list<value_type> __l,
100*e4b17023SJohn Marino	    const allocator_type& __a = allocator_type())
101*e4b17023SJohn Marino      : _Base(__l, __a) { }
102*e4b17023SJohn Marino#endif
103*e4b17023SJohn Marino
104*e4b17023SJohn Marino      ~deque() _GLIBCXX_NOEXCEPT { }
105*e4b17023SJohn Marino
106*e4b17023SJohn Marino      deque&
107*e4b17023SJohn Marino      operator=(const deque& __x)
108*e4b17023SJohn Marino      {
109*e4b17023SJohn Marino	*static_cast<_Base*>(this) = __x;
110*e4b17023SJohn Marino	return *this;
111*e4b17023SJohn Marino      }
112*e4b17023SJohn Marino
113*e4b17023SJohn Marino#ifdef __GXX_EXPERIMENTAL_CXX0X__
114*e4b17023SJohn Marino      deque&
115*e4b17023SJohn Marino      operator=(deque&& __x)
116*e4b17023SJohn Marino      {
117*e4b17023SJohn Marino	// NB: DR 1204.
118*e4b17023SJohn Marino	// NB: DR 675.
119*e4b17023SJohn Marino	this->clear();
120*e4b17023SJohn Marino	this->swap(__x);
121*e4b17023SJohn Marino	return *this;
122*e4b17023SJohn Marino      }
123*e4b17023SJohn Marino
124*e4b17023SJohn Marino      deque&
125*e4b17023SJohn Marino      operator=(initializer_list<value_type> __l)
126*e4b17023SJohn Marino      {
127*e4b17023SJohn Marino	*static_cast<_Base*>(this) = __l;
128*e4b17023SJohn Marino	return *this;
129*e4b17023SJohn Marino      }
130*e4b17023SJohn Marino#endif
131*e4b17023SJohn Marino
132*e4b17023SJohn Marino      template<class _InputIterator>
133*e4b17023SJohn Marino        void
134*e4b17023SJohn Marino        assign(_InputIterator __first, _InputIterator __last)
135*e4b17023SJohn Marino        {
136*e4b17023SJohn Marino	  _Base::assign(__first, __last);
137*e4b17023SJohn Marino	}
138*e4b17023SJohn Marino
139*e4b17023SJohn Marino      void
140*e4b17023SJohn Marino      assign(size_type __n, const _Tp& __t)
141*e4b17023SJohn Marino      {
142*e4b17023SJohn Marino	_Base::assign(__n, __t);
143*e4b17023SJohn Marino      }
144*e4b17023SJohn Marino
145*e4b17023SJohn Marino#ifdef __GXX_EXPERIMENTAL_CXX0X__
146*e4b17023SJohn Marino      void
147*e4b17023SJohn Marino      assign(initializer_list<value_type> __l)
148*e4b17023SJohn Marino      {
149*e4b17023SJohn Marino	_Base::assign(__l);
150*e4b17023SJohn Marino      }
151*e4b17023SJohn Marino#endif
152*e4b17023SJohn Marino
153*e4b17023SJohn Marino      using _Base::get_allocator;
154*e4b17023SJohn Marino
155*e4b17023SJohn Marino      // iterators:
156*e4b17023SJohn Marino      iterator
157*e4b17023SJohn Marino      begin() _GLIBCXX_NOEXCEPT
158*e4b17023SJohn Marino      { return iterator(_Base::begin()); }
159*e4b17023SJohn Marino
160*e4b17023SJohn Marino      const_iterator
161*e4b17023SJohn Marino      begin() const _GLIBCXX_NOEXCEPT
162*e4b17023SJohn Marino      { return const_iterator(_Base::begin()); }
163*e4b17023SJohn Marino
164*e4b17023SJohn Marino      iterator
165*e4b17023SJohn Marino      end() _GLIBCXX_NOEXCEPT
166*e4b17023SJohn Marino      { return iterator(_Base::end()); }
167*e4b17023SJohn Marino
168*e4b17023SJohn Marino      const_iterator
169*e4b17023SJohn Marino      end() const _GLIBCXX_NOEXCEPT
170*e4b17023SJohn Marino      { return const_iterator(_Base::end()); }
171*e4b17023SJohn Marino
172*e4b17023SJohn Marino      reverse_iterator
173*e4b17023SJohn Marino      rbegin() _GLIBCXX_NOEXCEPT
174*e4b17023SJohn Marino      { return reverse_iterator(end()); }
175*e4b17023SJohn Marino
176*e4b17023SJohn Marino      const_reverse_iterator
177*e4b17023SJohn Marino      rbegin() const _GLIBCXX_NOEXCEPT
178*e4b17023SJohn Marino      { return const_reverse_iterator(end()); }
179*e4b17023SJohn Marino
180*e4b17023SJohn Marino      reverse_iterator
181*e4b17023SJohn Marino      rend() _GLIBCXX_NOEXCEPT
182*e4b17023SJohn Marino      { return reverse_iterator(begin()); }
183*e4b17023SJohn Marino
184*e4b17023SJohn Marino      const_reverse_iterator
185*e4b17023SJohn Marino      rend() const _GLIBCXX_NOEXCEPT
186*e4b17023SJohn Marino      { return const_reverse_iterator(begin()); }
187*e4b17023SJohn Marino
188*e4b17023SJohn Marino#ifdef __GXX_EXPERIMENTAL_CXX0X__
189*e4b17023SJohn Marino      const_iterator
190*e4b17023SJohn Marino      cbegin() const noexcept
191*e4b17023SJohn Marino      { return const_iterator(_Base::begin()); }
192*e4b17023SJohn Marino
193*e4b17023SJohn Marino      const_iterator
194*e4b17023SJohn Marino      cend() const noexcept
195*e4b17023SJohn Marino      { return const_iterator(_Base::end()); }
196*e4b17023SJohn Marino
197*e4b17023SJohn Marino      const_reverse_iterator
198*e4b17023SJohn Marino      crbegin() const noexcept
199*e4b17023SJohn Marino      { return const_reverse_iterator(end()); }
200*e4b17023SJohn Marino
201*e4b17023SJohn Marino      const_reverse_iterator
202*e4b17023SJohn Marino      crend() const noexcept
203*e4b17023SJohn Marino      { return const_reverse_iterator(begin()); }
204*e4b17023SJohn Marino#endif
205*e4b17023SJohn Marino
206*e4b17023SJohn Marino      // 23.2.1.2 capacity:
207*e4b17023SJohn Marino      using _Base::size;
208*e4b17023SJohn Marino      using _Base::max_size;
209*e4b17023SJohn Marino
210*e4b17023SJohn Marino#ifdef __GXX_EXPERIMENTAL_CXX0X__
211*e4b17023SJohn Marino      void
212*e4b17023SJohn Marino      resize(size_type __sz)
213*e4b17023SJohn Marino      {
214*e4b17023SJohn Marino	_Base::resize(__sz);
215*e4b17023SJohn Marino      }
216*e4b17023SJohn Marino
217*e4b17023SJohn Marino      void
218*e4b17023SJohn Marino      resize(size_type __sz, const _Tp& __c)
219*e4b17023SJohn Marino      {
220*e4b17023SJohn Marino	_Base::resize(__sz, __c);
221*e4b17023SJohn Marino      }
222*e4b17023SJohn Marino#else
223*e4b17023SJohn Marino      void
224*e4b17023SJohn Marino      resize(size_type __sz, _Tp __c = _Tp())
225*e4b17023SJohn Marino      {
226*e4b17023SJohn Marino	_Base::resize(__sz, __c);
227*e4b17023SJohn Marino      }
228*e4b17023SJohn Marino#endif
229*e4b17023SJohn Marino
230*e4b17023SJohn Marino#ifdef __GXX_EXPERIMENTAL_CXX0X__
231*e4b17023SJohn Marino      using _Base::shrink_to_fit;
232*e4b17023SJohn Marino#endif
233*e4b17023SJohn Marino
234*e4b17023SJohn Marino      using _Base::empty;
235*e4b17023SJohn Marino
236*e4b17023SJohn Marino      // element access:
237*e4b17023SJohn Marino      reference
238*e4b17023SJohn Marino      operator[](size_type __n)
239*e4b17023SJohn Marino      {
240*e4b17023SJohn Marino	return _M_base()[__n];
241*e4b17023SJohn Marino      }
242*e4b17023SJohn Marino
243*e4b17023SJohn Marino      const_reference
244*e4b17023SJohn Marino      operator[](size_type __n) const
245*e4b17023SJohn Marino      {
246*e4b17023SJohn Marino	return _M_base()[__n];
247*e4b17023SJohn Marino      }
248*e4b17023SJohn Marino
249*e4b17023SJohn Marino      using _Base::at;
250*e4b17023SJohn Marino
251*e4b17023SJohn Marino      reference
252*e4b17023SJohn Marino      front()
253*e4b17023SJohn Marino      {
254*e4b17023SJohn Marino	return _Base::front();
255*e4b17023SJohn Marino      }
256*e4b17023SJohn Marino
257*e4b17023SJohn Marino      const_reference
258*e4b17023SJohn Marino      front() const
259*e4b17023SJohn Marino      {
260*e4b17023SJohn Marino	return _Base::front();
261*e4b17023SJohn Marino      }
262*e4b17023SJohn Marino
263*e4b17023SJohn Marino      reference
264*e4b17023SJohn Marino      back()
265*e4b17023SJohn Marino      {
266*e4b17023SJohn Marino	return _Base::back();
267*e4b17023SJohn Marino      }
268*e4b17023SJohn Marino
269*e4b17023SJohn Marino      const_reference
270*e4b17023SJohn Marino      back() const
271*e4b17023SJohn Marino      {
272*e4b17023SJohn Marino	return _Base::back();
273*e4b17023SJohn Marino      }
274*e4b17023SJohn Marino
275*e4b17023SJohn Marino      // 23.2.1.3 modifiers:
276*e4b17023SJohn Marino      void
277*e4b17023SJohn Marino      push_front(const _Tp& __x)
278*e4b17023SJohn Marino      {
279*e4b17023SJohn Marino	_Base::push_front(__x);
280*e4b17023SJohn Marino      }
281*e4b17023SJohn Marino
282*e4b17023SJohn Marino      void
283*e4b17023SJohn Marino      push_back(const _Tp& __x)
284*e4b17023SJohn Marino      {
285*e4b17023SJohn Marino	_Base::push_back(__x);
286*e4b17023SJohn Marino      }
287*e4b17023SJohn Marino
288*e4b17023SJohn Marino#ifdef __GXX_EXPERIMENTAL_CXX0X__
289*e4b17023SJohn Marino      void
290*e4b17023SJohn Marino      push_front(_Tp&& __x)
291*e4b17023SJohn Marino      { emplace_front(std::move(__x)); }
292*e4b17023SJohn Marino
293*e4b17023SJohn Marino      void
294*e4b17023SJohn Marino      push_back(_Tp&& __x)
295*e4b17023SJohn Marino      { emplace_back(std::move(__x)); }
296*e4b17023SJohn Marino
297*e4b17023SJohn Marino      template<typename... _Args>
298*e4b17023SJohn Marino        void
299*e4b17023SJohn Marino        emplace_front(_Args&&... __args)
300*e4b17023SJohn Marino	{
301*e4b17023SJohn Marino	  _Base::emplace_front(std::forward<_Args>(__args)...);
302*e4b17023SJohn Marino	}
303*e4b17023SJohn Marino
304*e4b17023SJohn Marino      template<typename... _Args>
305*e4b17023SJohn Marino        void
306*e4b17023SJohn Marino        emplace_back(_Args&&... __args)
307*e4b17023SJohn Marino	{
308*e4b17023SJohn Marino	  _Base::emplace_back(std::forward<_Args>(__args)...);
309*e4b17023SJohn Marino	}
310*e4b17023SJohn Marino
311*e4b17023SJohn Marino      template<typename... _Args>
312*e4b17023SJohn Marino        iterator
313*e4b17023SJohn Marino        emplace(iterator __position, _Args&&... __args)
314*e4b17023SJohn Marino	{
315*e4b17023SJohn Marino	  typename _Base::iterator __res = _Base::emplace(__position,
316*e4b17023SJohn Marino					    std::forward<_Args>(__args)...);
317*e4b17023SJohn Marino	  return iterator(__res);
318*e4b17023SJohn Marino	}
319*e4b17023SJohn Marino#endif
320*e4b17023SJohn Marino
321*e4b17023SJohn Marino      iterator
322*e4b17023SJohn Marino      insert(iterator __position, const _Tp& __x)
323*e4b17023SJohn Marino      {
324*e4b17023SJohn Marino	typename _Base::iterator __res = _Base::insert(__position, __x);
325*e4b17023SJohn Marino	return iterator(__res);
326*e4b17023SJohn Marino      }
327*e4b17023SJohn Marino
328*e4b17023SJohn Marino#ifdef __GXX_EXPERIMENTAL_CXX0X__
329*e4b17023SJohn Marino      iterator
330*e4b17023SJohn Marino      insert(iterator __position, _Tp&& __x)
331*e4b17023SJohn Marino      { return emplace(__position, std::move(__x)); }
332*e4b17023SJohn Marino
333*e4b17023SJohn Marino      void
334*e4b17023SJohn Marino      insert(iterator __p, initializer_list<value_type> __l)
335*e4b17023SJohn Marino      {
336*e4b17023SJohn Marino	_Base::insert(__p, __l);
337*e4b17023SJohn Marino      }
338*e4b17023SJohn Marino#endif
339*e4b17023SJohn Marino
340*e4b17023SJohn Marino      void
341*e4b17023SJohn Marino      insert(iterator __position, size_type __n, const _Tp& __x)
342*e4b17023SJohn Marino      {
343*e4b17023SJohn Marino	_Base::insert(__position, __n, __x);
344*e4b17023SJohn Marino      }
345*e4b17023SJohn Marino
346*e4b17023SJohn Marino      template<class _InputIterator>
347*e4b17023SJohn Marino        void
348*e4b17023SJohn Marino        insert(iterator __position,
349*e4b17023SJohn Marino	       _InputIterator __first, _InputIterator __last)
350*e4b17023SJohn Marino        {
351*e4b17023SJohn Marino	  _Base::insert(__position, __first, __last);
352*e4b17023SJohn Marino	}
353*e4b17023SJohn Marino
354*e4b17023SJohn Marino      void
355*e4b17023SJohn Marino      pop_front()
356*e4b17023SJohn Marino      {
357*e4b17023SJohn Marino	_Base::pop_front();
358*e4b17023SJohn Marino      }
359*e4b17023SJohn Marino
360*e4b17023SJohn Marino      void
361*e4b17023SJohn Marino      pop_back()
362*e4b17023SJohn Marino      {
363*e4b17023SJohn Marino	_Base::pop_back();
364*e4b17023SJohn Marino      }
365*e4b17023SJohn Marino
366*e4b17023SJohn Marino      iterator
367*e4b17023SJohn Marino      erase(iterator __position)
368*e4b17023SJohn Marino      {
369*e4b17023SJohn Marino	if (__position == begin() || __position == end()-1)
370*e4b17023SJohn Marino	  {
371*e4b17023SJohn Marino	    return iterator(_Base::erase(__position));
372*e4b17023SJohn Marino	  }
373*e4b17023SJohn Marino	else
374*e4b17023SJohn Marino	  {
375*e4b17023SJohn Marino	    typename _Base::iterator __res = _Base::erase(__position);
376*e4b17023SJohn Marino	    return iterator(__res);
377*e4b17023SJohn Marino	  }
378*e4b17023SJohn Marino      }
379*e4b17023SJohn Marino
380*e4b17023SJohn Marino      iterator
381*e4b17023SJohn Marino      erase(iterator __first, iterator __last)
382*e4b17023SJohn Marino      {
383*e4b17023SJohn Marino	// _GLIBCXX_RESOLVE_LIB_DEFECTS
384*e4b17023SJohn Marino	// 151. can't currently clear() empty container
385*e4b17023SJohn Marino        return iterator(_Base::erase(__first, __last));
386*e4b17023SJohn Marino      }
387*e4b17023SJohn Marino
388*e4b17023SJohn Marino      void
389*e4b17023SJohn Marino      swap(deque& __x)
390*e4b17023SJohn Marino      {
391*e4b17023SJohn Marino	_Base::swap(__x);
392*e4b17023SJohn Marino      }
393*e4b17023SJohn Marino
394*e4b17023SJohn Marino      void
395*e4b17023SJohn Marino      clear() _GLIBCXX_NOEXCEPT
396*e4b17023SJohn Marino      {
397*e4b17023SJohn Marino	_Base::clear();
398*e4b17023SJohn Marino      }
399*e4b17023SJohn Marino
400*e4b17023SJohn Marino      _Base&
401*e4b17023SJohn Marino      _M_base() _GLIBCXX_NOEXCEPT       { return *this; }
402*e4b17023SJohn Marino
403*e4b17023SJohn Marino      const _Base&
404*e4b17023SJohn Marino      _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
405*e4b17023SJohn Marino    };
406*e4b17023SJohn Marino
407*e4b17023SJohn Marino  template<typename _Tp, typename _Alloc>
408*e4b17023SJohn Marino    inline bool
409*e4b17023SJohn Marino    operator==(const deque<_Tp, _Alloc>& __lhs,
410*e4b17023SJohn Marino	       const deque<_Tp, _Alloc>& __rhs)
411*e4b17023SJohn Marino    { return __lhs._M_base() == __rhs._M_base(); }
412*e4b17023SJohn Marino
413*e4b17023SJohn Marino  template<typename _Tp, typename _Alloc>
414*e4b17023SJohn Marino    inline bool
415*e4b17023SJohn Marino    operator!=(const deque<_Tp, _Alloc>& __lhs,
416*e4b17023SJohn Marino	       const deque<_Tp, _Alloc>& __rhs)
417*e4b17023SJohn Marino    { return __lhs._M_base() != __rhs._M_base(); }
418*e4b17023SJohn Marino
419*e4b17023SJohn Marino  template<typename _Tp, typename _Alloc>
420*e4b17023SJohn Marino    inline bool
421*e4b17023SJohn Marino    operator<(const deque<_Tp, _Alloc>& __lhs,
422*e4b17023SJohn Marino	      const deque<_Tp, _Alloc>& __rhs)
423*e4b17023SJohn Marino    { return __lhs._M_base() < __rhs._M_base(); }
424*e4b17023SJohn Marino
425*e4b17023SJohn Marino  template<typename _Tp, typename _Alloc>
426*e4b17023SJohn Marino    inline bool
427*e4b17023SJohn Marino    operator<=(const deque<_Tp, _Alloc>& __lhs,
428*e4b17023SJohn Marino	       const deque<_Tp, _Alloc>& __rhs)
429*e4b17023SJohn Marino    { return __lhs._M_base() <= __rhs._M_base(); }
430*e4b17023SJohn Marino
431*e4b17023SJohn Marino  template<typename _Tp, typename _Alloc>
432*e4b17023SJohn Marino    inline bool
433*e4b17023SJohn Marino    operator>=(const deque<_Tp, _Alloc>& __lhs,
434*e4b17023SJohn Marino	       const deque<_Tp, _Alloc>& __rhs)
435*e4b17023SJohn Marino    { return __lhs._M_base() >= __rhs._M_base(); }
436*e4b17023SJohn Marino
437*e4b17023SJohn Marino  template<typename _Tp, typename _Alloc>
438*e4b17023SJohn Marino    inline bool
439*e4b17023SJohn Marino    operator>(const deque<_Tp, _Alloc>& __lhs,
440*e4b17023SJohn Marino	      const deque<_Tp, _Alloc>& __rhs)
441*e4b17023SJohn Marino    { return __lhs._M_base() > __rhs._M_base(); }
442*e4b17023SJohn Marino
443*e4b17023SJohn Marino  template<typename _Tp, typename _Alloc>
444*e4b17023SJohn Marino    inline void
445*e4b17023SJohn Marino    swap(deque<_Tp, _Alloc>& __lhs, deque<_Tp, _Alloc>& __rhs)
446*e4b17023SJohn Marino    { __lhs.swap(__rhs); }
447*e4b17023SJohn Marino
448*e4b17023SJohn Marino} // namespace __profile
449*e4b17023SJohn Marino} // namespace std
450*e4b17023SJohn Marino
451*e4b17023SJohn Marino#endif
452