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