1*3e519524SHoward Hinnant// -*- C++ -*- 2*3e519524SHoward Hinnant//===--------------------------- queue ------------------------------------===// 3*3e519524SHoward Hinnant// 4*3e519524SHoward Hinnant// ��������������������The LLVM Compiler Infrastructure 5*3e519524SHoward Hinnant// 6*3e519524SHoward Hinnant// This file is distributed under the University of Illinois Open Source 7*3e519524SHoward Hinnant// License. See LICENSE.TXT for details. 8*3e519524SHoward Hinnant// 9*3e519524SHoward Hinnant//===----------------------------------------------------------------------===// 10*3e519524SHoward Hinnant 11*3e519524SHoward Hinnant#ifndef _LIBCPP_QUEUE 12*3e519524SHoward Hinnant#define _LIBCPP_QUEUE 13*3e519524SHoward Hinnant 14*3e519524SHoward Hinnant/* 15*3e519524SHoward Hinnant queue synopsis 16*3e519524SHoward Hinnant 17*3e519524SHoward Hinnantnamespace std 18*3e519524SHoward Hinnant{ 19*3e519524SHoward Hinnant 20*3e519524SHoward Hinnanttemplate <class T, class Container = deque<T>> 21*3e519524SHoward Hinnantclass queue 22*3e519524SHoward Hinnant{ 23*3e519524SHoward Hinnantpublic: 24*3e519524SHoward Hinnant typedef Container container_type; 25*3e519524SHoward Hinnant typedef typename container_type::value_type value_type; 26*3e519524SHoward Hinnant typedef typename container_type::reference reference; 27*3e519524SHoward Hinnant typedef typename container_type::const_reference const_reference; 28*3e519524SHoward Hinnant typedef typename container_type::size_type size_type; 29*3e519524SHoward Hinnant 30*3e519524SHoward Hinnantprotected: 31*3e519524SHoward Hinnant container_type c; 32*3e519524SHoward Hinnant 33*3e519524SHoward Hinnantpublic: 34*3e519524SHoward Hinnant queue(); 35*3e519524SHoward Hinnant explicit queue(const container_type& c); 36*3e519524SHoward Hinnant explicit queue(container_type&& c); 37*3e519524SHoward Hinnant queue(queue&& q); 38*3e519524SHoward Hinnant template <class Alloc> 39*3e519524SHoward Hinnant explicit queue(const Alloc& a); 40*3e519524SHoward Hinnant template <class Alloc> 41*3e519524SHoward Hinnant queue(const container_type& c, const Alloc& a); 42*3e519524SHoward Hinnant template <class Alloc> 43*3e519524SHoward Hinnant queue(container_type&& c, const Alloc& a); 44*3e519524SHoward Hinnant template <class Alloc> 45*3e519524SHoward Hinnant queue(queue&& q, const Alloc& a); 46*3e519524SHoward Hinnant 47*3e519524SHoward Hinnant queue& operator=(queue&& q); 48*3e519524SHoward Hinnant 49*3e519524SHoward Hinnant bool empty() const; 50*3e519524SHoward Hinnant size_type size() const; 51*3e519524SHoward Hinnant 52*3e519524SHoward Hinnant reference front(); 53*3e519524SHoward Hinnant const_reference front() const; 54*3e519524SHoward Hinnant reference back(); 55*3e519524SHoward Hinnant const_reference back() const; 56*3e519524SHoward Hinnant 57*3e519524SHoward Hinnant void push(const value_type& v); 58*3e519524SHoward Hinnant void push(value_type&& v); 59*3e519524SHoward Hinnant template <class... Args> void emplace(Args&&... args); 60*3e519524SHoward Hinnant void pop(); 61*3e519524SHoward Hinnant 62*3e519524SHoward Hinnant void swap(queue& q); 63*3e519524SHoward Hinnant}; 64*3e519524SHoward Hinnant 65*3e519524SHoward Hinnanttemplate <class T, class Container> 66*3e519524SHoward Hinnant bool operator==(const queue<T, Container>& x,const queue<T, Container>& y); 67*3e519524SHoward Hinnant 68*3e519524SHoward Hinnanttemplate <class T, class Container> 69*3e519524SHoward Hinnant bool operator< (const queue<T, Container>& x,const queue<T, Container>& y); 70*3e519524SHoward Hinnant 71*3e519524SHoward Hinnanttemplate <class T, class Container> 72*3e519524SHoward Hinnant bool operator!=(const queue<T, Container>& x,const queue<T, Container>& y); 73*3e519524SHoward Hinnant 74*3e519524SHoward Hinnanttemplate <class T, class Container> 75*3e519524SHoward Hinnant bool operator> (const queue<T, Container>& x,const queue<T, Container>& y); 76*3e519524SHoward Hinnant 77*3e519524SHoward Hinnanttemplate <class T, class Container> 78*3e519524SHoward Hinnant bool operator>=(const queue<T, Container>& x,const queue<T, Container>& y); 79*3e519524SHoward Hinnant 80*3e519524SHoward Hinnanttemplate <class T, class Container> 81*3e519524SHoward Hinnant bool operator<=(const queue<T, Container>& x,const queue<T, Container>& y); 82*3e519524SHoward Hinnant 83*3e519524SHoward Hinnanttemplate <class T, class Container> 84*3e519524SHoward Hinnant void swap(queue<T, Container>& x, queue<T, Container>& y); 85*3e519524SHoward Hinnant 86*3e519524SHoward Hinnanttemplate <class T, class Container = vector<T>, 87*3e519524SHoward Hinnant class Compare = less<typename Container::value_type>> 88*3e519524SHoward Hinnantclass priority_queue 89*3e519524SHoward Hinnant{ 90*3e519524SHoward Hinnantpublic: 91*3e519524SHoward Hinnant typedef Container container_type; 92*3e519524SHoward Hinnant typedef typename container_type::value_type value_type; 93*3e519524SHoward Hinnant typedef typename container_type::reference reference; 94*3e519524SHoward Hinnant typedef typename container_type::const_reference const_reference; 95*3e519524SHoward Hinnant typedef typename container_type::size_type size_type; 96*3e519524SHoward Hinnant 97*3e519524SHoward Hinnantprotected: 98*3e519524SHoward Hinnant container_type c; 99*3e519524SHoward Hinnant Compare comp; 100*3e519524SHoward Hinnant 101*3e519524SHoward Hinnantpublic: 102*3e519524SHoward Hinnant explicit priority_queue(const Compare& comp = Compare()); 103*3e519524SHoward Hinnant priority_queue(const Compare& comp, const container_type& c); 104*3e519524SHoward Hinnant explicit priority_queue(const Compare& comp, container_type&& c); 105*3e519524SHoward Hinnant template <class InputIterator> 106*3e519524SHoward Hinnant priority_queue(InputIterator first, InputIterator last, 107*3e519524SHoward Hinnant const Compare& comp = Compare()); 108*3e519524SHoward Hinnant template <class InputIterator> 109*3e519524SHoward Hinnant priority_queue(InputIterator first, InputIterator last, 110*3e519524SHoward Hinnant const Compare& comp, const container_type& c); 111*3e519524SHoward Hinnant template <class InputIterator> 112*3e519524SHoward Hinnant priority_queue(InputIterator first, InputIterator last, 113*3e519524SHoward Hinnant const Compare& comp, container_type&& c); 114*3e519524SHoward Hinnant priority_queue(priority_queue&& q); 115*3e519524SHoward Hinnant priority_queue& operator=(priority_queue&& q); 116*3e519524SHoward Hinnant template <class Alloc> 117*3e519524SHoward Hinnant explicit priority_queue(const Alloc& a); 118*3e519524SHoward Hinnant template <class Alloc> 119*3e519524SHoward Hinnant priority_queue(const Compare& comp, const Alloc& a); 120*3e519524SHoward Hinnant template <class Alloc> 121*3e519524SHoward Hinnant priority_queue(const Compare& comp, const container_type& c, 122*3e519524SHoward Hinnant const Alloc& a); 123*3e519524SHoward Hinnant template <class Alloc> 124*3e519524SHoward Hinnant priority_queue(const Compare& comp, container_type&& c, 125*3e519524SHoward Hinnant const Alloc& a); 126*3e519524SHoward Hinnant template <class Alloc> 127*3e519524SHoward Hinnant priority_queue(priority_queue&& q, const Alloc& a); 128*3e519524SHoward Hinnant 129*3e519524SHoward Hinnant bool empty() const; 130*3e519524SHoward Hinnant size_type size() const; 131*3e519524SHoward Hinnant const_reference top() const; 132*3e519524SHoward Hinnant 133*3e519524SHoward Hinnant void push(const value_type& v); 134*3e519524SHoward Hinnant void push(value_type&& v); 135*3e519524SHoward Hinnant template <class... Args> void emplace(Args&&... args); 136*3e519524SHoward Hinnant void pop(); 137*3e519524SHoward Hinnant 138*3e519524SHoward Hinnant void swap(priority_queue& q); 139*3e519524SHoward Hinnant}; 140*3e519524SHoward Hinnant 141*3e519524SHoward Hinnanttemplate <class T, class Container, class Compare> 142*3e519524SHoward Hinnant void swap(priority_queue<T, Container, Compare>& x, 143*3e519524SHoward Hinnant priority_queue<T, Container, Compare>& y); 144*3e519524SHoward Hinnant 145*3e519524SHoward Hinnant} // std 146*3e519524SHoward Hinnant 147*3e519524SHoward Hinnant*/ 148*3e519524SHoward Hinnant 149*3e519524SHoward Hinnant#include <__config> 150*3e519524SHoward Hinnant#include <deque> 151*3e519524SHoward Hinnant#include <vector> 152*3e519524SHoward Hinnant#include <functional> 153*3e519524SHoward Hinnant#include <algorithm> 154*3e519524SHoward Hinnant 155*3e519524SHoward Hinnant#pragma GCC system_header 156*3e519524SHoward Hinnant 157*3e519524SHoward Hinnant_LIBCPP_BEGIN_NAMESPACE_STD 158*3e519524SHoward Hinnant 159*3e519524SHoward Hinnanttemplate <class _Tp, class _Container> class queue; 160*3e519524SHoward Hinnant 161*3e519524SHoward Hinnanttemplate <class _Tp, class _Container> 162*3e519524SHoward Hinnantbool 163*3e519524SHoward Hinnantoperator==(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y); 164*3e519524SHoward Hinnant 165*3e519524SHoward Hinnanttemplate <class _Tp, class _Container> 166*3e519524SHoward Hinnantbool 167*3e519524SHoward Hinnantoperator< (const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y); 168*3e519524SHoward Hinnant 169*3e519524SHoward Hinnanttemplate <class _Tp, class _Container = deque<_Tp> > 170*3e519524SHoward Hinnantclass queue 171*3e519524SHoward Hinnant{ 172*3e519524SHoward Hinnantpublic: 173*3e519524SHoward Hinnant typedef _Container container_type; 174*3e519524SHoward Hinnant typedef typename container_type::value_type value_type; 175*3e519524SHoward Hinnant typedef typename container_type::reference reference; 176*3e519524SHoward Hinnant typedef typename container_type::const_reference const_reference; 177*3e519524SHoward Hinnant typedef typename container_type::size_type size_type; 178*3e519524SHoward Hinnant 179*3e519524SHoward Hinnantprotected: 180*3e519524SHoward Hinnant container_type c; 181*3e519524SHoward Hinnant 182*3e519524SHoward Hinnantpublic: 183*3e519524SHoward Hinnant queue() : c() {} 184*3e519524SHoward Hinnant explicit queue(const container_type& __c) : c(__c) {} 185*3e519524SHoward Hinnant#ifdef _LIBCPP_MOVE 186*3e519524SHoward Hinnant explicit queue(container_type&& __c) : c(_STD::move(__c)) {} 187*3e519524SHoward Hinnant queue(queue&& __q) : c(_STD::move(__q.c)) {} 188*3e519524SHoward Hinnant#endif 189*3e519524SHoward Hinnant template <class _Alloc> 190*3e519524SHoward Hinnant explicit queue(const _Alloc& __a, 191*3e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 192*3e519524SHoward Hinnant _Alloc>::value>::type* = 0) 193*3e519524SHoward Hinnant : c(__a) {} 194*3e519524SHoward Hinnant template <class _Alloc> 195*3e519524SHoward Hinnant queue(const queue& __q, const _Alloc& __a, 196*3e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 197*3e519524SHoward Hinnant _Alloc>::value>::type* = 0) 198*3e519524SHoward Hinnant : c(__q.c, __a) {} 199*3e519524SHoward Hinnant template <class _Alloc> 200*3e519524SHoward Hinnant queue(const container_type& __c, const _Alloc& __a, 201*3e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 202*3e519524SHoward Hinnant _Alloc>::value>::type* = 0) 203*3e519524SHoward Hinnant : c(__c, __a) {} 204*3e519524SHoward Hinnant#ifdef _LIBCPP_MOVE 205*3e519524SHoward Hinnant template <class _Alloc> 206*3e519524SHoward Hinnant queue(container_type&& __c, const _Alloc& __a, 207*3e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 208*3e519524SHoward Hinnant _Alloc>::value>::type* = 0) 209*3e519524SHoward Hinnant : c(_STD::move(__c), __a) {} 210*3e519524SHoward Hinnant template <class _Alloc> 211*3e519524SHoward Hinnant queue(queue&& __q, const _Alloc& __a, 212*3e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 213*3e519524SHoward Hinnant _Alloc>::value>::type* = 0) 214*3e519524SHoward Hinnant : c(_STD::move(__q.c), __a) {} 215*3e519524SHoward Hinnant 216*3e519524SHoward Hinnant queue& operator=(queue&& __q) 217*3e519524SHoward Hinnant { 218*3e519524SHoward Hinnant c = _STD::move(__q.c); 219*3e519524SHoward Hinnant return *this; 220*3e519524SHoward Hinnant } 221*3e519524SHoward Hinnant#endif 222*3e519524SHoward Hinnant 223*3e519524SHoward Hinnant bool empty() const {return c.empty();} 224*3e519524SHoward Hinnant size_type size() const {return c.size();} 225*3e519524SHoward Hinnant 226*3e519524SHoward Hinnant reference front() {return c.front();} 227*3e519524SHoward Hinnant const_reference front() const {return c.front();} 228*3e519524SHoward Hinnant reference back() {return c.back();} 229*3e519524SHoward Hinnant const_reference back() const {return c.back();} 230*3e519524SHoward Hinnant 231*3e519524SHoward Hinnant void push(const value_type& __v) {c.push_back(__v);} 232*3e519524SHoward Hinnant#ifdef _LIBCPP_MOVE 233*3e519524SHoward Hinnant void push(value_type&& __v) {c.push_back(_STD::move(__v));} 234*3e519524SHoward Hinnant template <class... _Args> 235*3e519524SHoward Hinnant void emplace(_Args&&... __args) 236*3e519524SHoward Hinnant {c.emplace_back(_STD::forward<_Args>(__args)...);} 237*3e519524SHoward Hinnant#endif 238*3e519524SHoward Hinnant void pop() {c.pop_front();} 239*3e519524SHoward Hinnant 240*3e519524SHoward Hinnant void swap(queue& __q) 241*3e519524SHoward Hinnant { 242*3e519524SHoward Hinnant using _STD::swap; 243*3e519524SHoward Hinnant swap(c, __q.c); 244*3e519524SHoward Hinnant } 245*3e519524SHoward Hinnant 246*3e519524SHoward Hinnant template <class _T1, class _C1> 247*3e519524SHoward Hinnant friend 248*3e519524SHoward Hinnant bool 249*3e519524SHoward Hinnant operator==(const queue<_T1, _C1>& __x,const queue<_T1, _C1>& __y); 250*3e519524SHoward Hinnant 251*3e519524SHoward Hinnant template <class _T1, class _C1> 252*3e519524SHoward Hinnant friend 253*3e519524SHoward Hinnant bool 254*3e519524SHoward Hinnant operator< (const queue<_T1, _C1>& __x,const queue<_T1, _C1>& __y); 255*3e519524SHoward Hinnant}; 256*3e519524SHoward Hinnant 257*3e519524SHoward Hinnanttemplate <class _Tp, class _Container> 258*3e519524SHoward Hinnantinline 259*3e519524SHoward Hinnantbool 260*3e519524SHoward Hinnantoperator==(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 261*3e519524SHoward Hinnant{ 262*3e519524SHoward Hinnant return __x.c == __y.c; 263*3e519524SHoward Hinnant} 264*3e519524SHoward Hinnant 265*3e519524SHoward Hinnanttemplate <class _Tp, class _Container> 266*3e519524SHoward Hinnantinline 267*3e519524SHoward Hinnantbool 268*3e519524SHoward Hinnantoperator< (const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 269*3e519524SHoward Hinnant{ 270*3e519524SHoward Hinnant return __x.c < __y.c; 271*3e519524SHoward Hinnant} 272*3e519524SHoward Hinnant 273*3e519524SHoward Hinnanttemplate <class _Tp, class _Container> 274*3e519524SHoward Hinnantinline 275*3e519524SHoward Hinnantbool 276*3e519524SHoward Hinnantoperator!=(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 277*3e519524SHoward Hinnant{ 278*3e519524SHoward Hinnant return !(__x == __y); 279*3e519524SHoward Hinnant} 280*3e519524SHoward Hinnant 281*3e519524SHoward Hinnanttemplate <class _Tp, class _Container> 282*3e519524SHoward Hinnantinline 283*3e519524SHoward Hinnantbool 284*3e519524SHoward Hinnantoperator> (const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 285*3e519524SHoward Hinnant{ 286*3e519524SHoward Hinnant return __y < __x; 287*3e519524SHoward Hinnant} 288*3e519524SHoward Hinnant 289*3e519524SHoward Hinnanttemplate <class _Tp, class _Container> 290*3e519524SHoward Hinnantinline 291*3e519524SHoward Hinnantbool 292*3e519524SHoward Hinnantoperator>=(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 293*3e519524SHoward Hinnant{ 294*3e519524SHoward Hinnant return !(__x < __y); 295*3e519524SHoward Hinnant} 296*3e519524SHoward Hinnant 297*3e519524SHoward Hinnanttemplate <class _Tp, class _Container> 298*3e519524SHoward Hinnantinline 299*3e519524SHoward Hinnantbool 300*3e519524SHoward Hinnantoperator<=(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 301*3e519524SHoward Hinnant{ 302*3e519524SHoward Hinnant return !(__y < __x); 303*3e519524SHoward Hinnant} 304*3e519524SHoward Hinnant 305*3e519524SHoward Hinnanttemplate <class _Tp, class _Container> 306*3e519524SHoward Hinnantinline 307*3e519524SHoward Hinnantvoid 308*3e519524SHoward Hinnantswap(queue<_Tp, _Container>& __x, queue<_Tp, _Container>& __y) 309*3e519524SHoward Hinnant{ 310*3e519524SHoward Hinnant __x.swap(__y); 311*3e519524SHoward Hinnant} 312*3e519524SHoward Hinnant 313*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Alloc> 314*3e519524SHoward Hinnantstruct uses_allocator<queue<_Tp, _Container>, _Alloc> 315*3e519524SHoward Hinnant : public uses_allocator<_Container, _Alloc> 316*3e519524SHoward Hinnant{ 317*3e519524SHoward Hinnant}; 318*3e519524SHoward Hinnant 319*3e519524SHoward Hinnanttemplate <class _Tp, class _Container = vector<_Tp>, 320*3e519524SHoward Hinnant class _Compare = less<typename _Container::value_type> > 321*3e519524SHoward Hinnantclass priority_queue 322*3e519524SHoward Hinnant{ 323*3e519524SHoward Hinnantpublic: 324*3e519524SHoward Hinnant typedef _Container container_type; 325*3e519524SHoward Hinnant typedef _Compare value_compare; 326*3e519524SHoward Hinnant typedef typename container_type::value_type value_type; 327*3e519524SHoward Hinnant typedef typename container_type::reference reference; 328*3e519524SHoward Hinnant typedef typename container_type::const_reference const_reference; 329*3e519524SHoward Hinnant typedef typename container_type::size_type size_type; 330*3e519524SHoward Hinnant 331*3e519524SHoward Hinnantprotected: 332*3e519524SHoward Hinnant container_type c; 333*3e519524SHoward Hinnant value_compare comp; 334*3e519524SHoward Hinnant 335*3e519524SHoward Hinnantpublic: 336*3e519524SHoward Hinnant explicit priority_queue(const value_compare& __comp = value_compare()) 337*3e519524SHoward Hinnant : c(), comp(__comp) {} 338*3e519524SHoward Hinnant priority_queue(const value_compare& __comp, const container_type& __c); 339*3e519524SHoward Hinnant#ifdef _LIBCPP_MOVE 340*3e519524SHoward Hinnant explicit priority_queue(const value_compare& __comp, container_type&& __c); 341*3e519524SHoward Hinnant#endif 342*3e519524SHoward Hinnant template <class _InputIter> 343*3e519524SHoward Hinnant priority_queue(_InputIter __f, _InputIter __l, 344*3e519524SHoward Hinnant const value_compare& __comp = value_compare()); 345*3e519524SHoward Hinnant template <class _InputIter> 346*3e519524SHoward Hinnant priority_queue(_InputIter __f, _InputIter __l, 347*3e519524SHoward Hinnant const value_compare& __comp, const container_type& __c); 348*3e519524SHoward Hinnant#ifdef _LIBCPP_MOVE 349*3e519524SHoward Hinnant template <class _InputIter> 350*3e519524SHoward Hinnant priority_queue(_InputIter __f, _InputIter __l, 351*3e519524SHoward Hinnant const value_compare& __comp, container_type&& __c); 352*3e519524SHoward Hinnant priority_queue(priority_queue&& __q); 353*3e519524SHoward Hinnant priority_queue& operator=(priority_queue&& __q); 354*3e519524SHoward Hinnant#endif 355*3e519524SHoward Hinnant template <class _Alloc> 356*3e519524SHoward Hinnant explicit priority_queue(const _Alloc& __a, 357*3e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 358*3e519524SHoward Hinnant _Alloc>::value>::type* = 0); 359*3e519524SHoward Hinnant template <class _Alloc> 360*3e519524SHoward Hinnant priority_queue(const value_compare& __comp, const _Alloc& __a, 361*3e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 362*3e519524SHoward Hinnant _Alloc>::value>::type* = 0); 363*3e519524SHoward Hinnant template <class _Alloc> 364*3e519524SHoward Hinnant priority_queue(const value_compare& __comp, const container_type& __c, 365*3e519524SHoward Hinnant const _Alloc& __a, 366*3e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 367*3e519524SHoward Hinnant _Alloc>::value>::type* = 0); 368*3e519524SHoward Hinnant template <class _Alloc> 369*3e519524SHoward Hinnant priority_queue(const priority_queue& __q, const _Alloc& __a, 370*3e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 371*3e519524SHoward Hinnant _Alloc>::value>::type* = 0); 372*3e519524SHoward Hinnant#ifdef _LIBCPP_MOVE 373*3e519524SHoward Hinnant template <class _Alloc> 374*3e519524SHoward Hinnant priority_queue(const value_compare& __comp, container_type&& __c, 375*3e519524SHoward Hinnant const _Alloc& __a, 376*3e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 377*3e519524SHoward Hinnant _Alloc>::value>::type* = 0); 378*3e519524SHoward Hinnant template <class _Alloc> 379*3e519524SHoward Hinnant priority_queue(priority_queue&& __q, const _Alloc& __a, 380*3e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 381*3e519524SHoward Hinnant _Alloc>::value>::type* = 0); 382*3e519524SHoward Hinnant#endif 383*3e519524SHoward Hinnant 384*3e519524SHoward Hinnant bool empty() const {return c.empty();} 385*3e519524SHoward Hinnant size_type size() const {return c.size();} 386*3e519524SHoward Hinnant const_reference top() const {return c.front();} 387*3e519524SHoward Hinnant 388*3e519524SHoward Hinnant void push(const value_type& __v); 389*3e519524SHoward Hinnant#ifdef _LIBCPP_MOVE 390*3e519524SHoward Hinnant void push(value_type&& __v); 391*3e519524SHoward Hinnant template <class... _Args> void emplace(_Args&&... __args); 392*3e519524SHoward Hinnant#endif 393*3e519524SHoward Hinnant void pop(); 394*3e519524SHoward Hinnant 395*3e519524SHoward Hinnant void swap(priority_queue& __q); 396*3e519524SHoward Hinnant}; 397*3e519524SHoward Hinnant 398*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 399*3e519524SHoward Hinnantinline 400*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(const _Compare& __comp, 401*3e519524SHoward Hinnant const container_type& __c) 402*3e519524SHoward Hinnant : c(__c), 403*3e519524SHoward Hinnant comp(__comp) 404*3e519524SHoward Hinnant{ 405*3e519524SHoward Hinnant _STD::make_heap(c.begin(), c.end(), comp); 406*3e519524SHoward Hinnant} 407*3e519524SHoward Hinnant 408*3e519524SHoward Hinnant#ifdef _LIBCPP_MOVE 409*3e519524SHoward Hinnant 410*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 411*3e519524SHoward Hinnantinline 412*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp, 413*3e519524SHoward Hinnant container_type&& __c) 414*3e519524SHoward Hinnant : c(_STD::move(__c)), 415*3e519524SHoward Hinnant comp(__comp) 416*3e519524SHoward Hinnant{ 417*3e519524SHoward Hinnant _STD::make_heap(c.begin(), c.end(), comp); 418*3e519524SHoward Hinnant} 419*3e519524SHoward Hinnant 420*3e519524SHoward Hinnant#endif 421*3e519524SHoward Hinnant 422*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 423*3e519524SHoward Hinnanttemplate <class _InputIter> 424*3e519524SHoward Hinnantinline 425*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(_InputIter __f, _InputIter __l, 426*3e519524SHoward Hinnant const value_compare& __comp) 427*3e519524SHoward Hinnant : c(__f, __l), 428*3e519524SHoward Hinnant comp(__comp) 429*3e519524SHoward Hinnant{ 430*3e519524SHoward Hinnant _STD::make_heap(c.begin(), c.end(), comp); 431*3e519524SHoward Hinnant} 432*3e519524SHoward Hinnant 433*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 434*3e519524SHoward Hinnanttemplate <class _InputIter> 435*3e519524SHoward Hinnantinline 436*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(_InputIter __f, _InputIter __l, 437*3e519524SHoward Hinnant const value_compare& __comp, 438*3e519524SHoward Hinnant const container_type& __c) 439*3e519524SHoward Hinnant : c(__c), 440*3e519524SHoward Hinnant comp(__comp) 441*3e519524SHoward Hinnant{ 442*3e519524SHoward Hinnant c.insert(c.end(), __f, __l); 443*3e519524SHoward Hinnant _STD::make_heap(c.begin(), c.end(), comp); 444*3e519524SHoward Hinnant} 445*3e519524SHoward Hinnant 446*3e519524SHoward Hinnant#ifdef _LIBCPP_MOVE 447*3e519524SHoward Hinnant 448*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 449*3e519524SHoward Hinnanttemplate <class _InputIter> 450*3e519524SHoward Hinnantinline 451*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(_InputIter __f, _InputIter __l, 452*3e519524SHoward Hinnant const value_compare& __comp, 453*3e519524SHoward Hinnant container_type&& __c) 454*3e519524SHoward Hinnant : c(_STD::move(__c)), 455*3e519524SHoward Hinnant comp(__comp) 456*3e519524SHoward Hinnant{ 457*3e519524SHoward Hinnant c.insert(c.end(), __f, __l); 458*3e519524SHoward Hinnant _STD::make_heap(c.begin(), c.end(), comp); 459*3e519524SHoward Hinnant} 460*3e519524SHoward Hinnant 461*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 462*3e519524SHoward Hinnantinline 463*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(priority_queue&& __q) 464*3e519524SHoward Hinnant : c(_STD::move(__q.c)), 465*3e519524SHoward Hinnant comp(_STD::move(__q.comp)) 466*3e519524SHoward Hinnant{ 467*3e519524SHoward Hinnant} 468*3e519524SHoward Hinnant 469*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 470*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>& 471*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::operator=(priority_queue&& __q) 472*3e519524SHoward Hinnant{ 473*3e519524SHoward Hinnant c = _STD::move(__q.c); 474*3e519524SHoward Hinnant comp = _STD::move(__q.comp); 475*3e519524SHoward Hinnant return *this; 476*3e519524SHoward Hinnant} 477*3e519524SHoward Hinnant 478*3e519524SHoward Hinnant#endif 479*3e519524SHoward Hinnant 480*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 481*3e519524SHoward Hinnanttemplate <class _Alloc> 482*3e519524SHoward Hinnantinline 483*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(const _Alloc& __a, 484*3e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 485*3e519524SHoward Hinnant _Alloc>::value>::type*) 486*3e519524SHoward Hinnant : c(__a) 487*3e519524SHoward Hinnant{ 488*3e519524SHoward Hinnant} 489*3e519524SHoward Hinnant 490*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 491*3e519524SHoward Hinnanttemplate <class _Alloc> 492*3e519524SHoward Hinnantinline 493*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp, 494*3e519524SHoward Hinnant const _Alloc& __a, 495*3e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 496*3e519524SHoward Hinnant _Alloc>::value>::type*) 497*3e519524SHoward Hinnant : c(__a), 498*3e519524SHoward Hinnant comp(__comp) 499*3e519524SHoward Hinnant{ 500*3e519524SHoward Hinnant} 501*3e519524SHoward Hinnant 502*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 503*3e519524SHoward Hinnanttemplate <class _Alloc> 504*3e519524SHoward Hinnantinline 505*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp, 506*3e519524SHoward Hinnant const container_type& __c, 507*3e519524SHoward Hinnant const _Alloc& __a, 508*3e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 509*3e519524SHoward Hinnant _Alloc>::value>::type*) 510*3e519524SHoward Hinnant : c(__c, __a), 511*3e519524SHoward Hinnant comp(__comp) 512*3e519524SHoward Hinnant{ 513*3e519524SHoward Hinnant _STD::make_heap(c.begin(), c.end(), comp); 514*3e519524SHoward Hinnant} 515*3e519524SHoward Hinnant 516*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 517*3e519524SHoward Hinnanttemplate <class _Alloc> 518*3e519524SHoward Hinnantinline 519*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(const priority_queue& __q, 520*3e519524SHoward Hinnant const _Alloc& __a, 521*3e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 522*3e519524SHoward Hinnant _Alloc>::value>::type*) 523*3e519524SHoward Hinnant : c(__q.c, __a), 524*3e519524SHoward Hinnant comp(__q.comp) 525*3e519524SHoward Hinnant{ 526*3e519524SHoward Hinnant _STD::make_heap(c.begin(), c.end(), comp); 527*3e519524SHoward Hinnant} 528*3e519524SHoward Hinnant 529*3e519524SHoward Hinnant#ifdef _LIBCPP_MOVE 530*3e519524SHoward Hinnant 531*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 532*3e519524SHoward Hinnanttemplate <class _Alloc> 533*3e519524SHoward Hinnantinline 534*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp, 535*3e519524SHoward Hinnant container_type&& __c, 536*3e519524SHoward Hinnant const _Alloc& __a, 537*3e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 538*3e519524SHoward Hinnant _Alloc>::value>::type*) 539*3e519524SHoward Hinnant : c(_STD::move(__c), __a), 540*3e519524SHoward Hinnant comp(__comp) 541*3e519524SHoward Hinnant{ 542*3e519524SHoward Hinnant _STD::make_heap(c.begin(), c.end(), comp); 543*3e519524SHoward Hinnant} 544*3e519524SHoward Hinnant 545*3e519524SHoward Hinnant 546*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 547*3e519524SHoward Hinnanttemplate <class _Alloc> 548*3e519524SHoward Hinnantinline 549*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(priority_queue&& __q, 550*3e519524SHoward Hinnant const _Alloc& __a, 551*3e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 552*3e519524SHoward Hinnant _Alloc>::value>::type*) 553*3e519524SHoward Hinnant : c(_STD::move(__q.c), __a), 554*3e519524SHoward Hinnant comp(_STD::move(__q.comp)) 555*3e519524SHoward Hinnant{ 556*3e519524SHoward Hinnant _STD::make_heap(c.begin(), c.end(), comp); 557*3e519524SHoward Hinnant} 558*3e519524SHoward Hinnant 559*3e519524SHoward Hinnant#endif 560*3e519524SHoward Hinnant 561*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 562*3e519524SHoward Hinnantinline 563*3e519524SHoward Hinnantvoid 564*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::push(const value_type& __v) 565*3e519524SHoward Hinnant{ 566*3e519524SHoward Hinnant c.push_back(__v); 567*3e519524SHoward Hinnant _STD::push_heap(c.begin(), c.end(), comp); 568*3e519524SHoward Hinnant} 569*3e519524SHoward Hinnant 570*3e519524SHoward Hinnant#ifdef _LIBCPP_MOVE 571*3e519524SHoward Hinnant 572*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 573*3e519524SHoward Hinnantinline 574*3e519524SHoward Hinnantvoid 575*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::push(value_type&& __v) 576*3e519524SHoward Hinnant{ 577*3e519524SHoward Hinnant c.push_back(_STD::move(__v)); 578*3e519524SHoward Hinnant _STD::push_heap(c.begin(), c.end(), comp); 579*3e519524SHoward Hinnant} 580*3e519524SHoward Hinnant 581*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 582*3e519524SHoward Hinnanttemplate <class... _Args> 583*3e519524SHoward Hinnantinline 584*3e519524SHoward Hinnantvoid 585*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::emplace(_Args&&... __args) 586*3e519524SHoward Hinnant{ 587*3e519524SHoward Hinnant c.emplace_back(_STD::forward<_Args>(__args)...); 588*3e519524SHoward Hinnant _STD::push_heap(c.begin(), c.end(), comp); 589*3e519524SHoward Hinnant} 590*3e519524SHoward Hinnant 591*3e519524SHoward Hinnant#endif 592*3e519524SHoward Hinnant 593*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 594*3e519524SHoward Hinnantinline 595*3e519524SHoward Hinnantvoid 596*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::pop() 597*3e519524SHoward Hinnant{ 598*3e519524SHoward Hinnant _STD::pop_heap(c.begin(), c.end(), comp); 599*3e519524SHoward Hinnant c.pop_back(); 600*3e519524SHoward Hinnant} 601*3e519524SHoward Hinnant 602*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 603*3e519524SHoward Hinnantinline 604*3e519524SHoward Hinnantvoid 605*3e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::swap(priority_queue& __q) 606*3e519524SHoward Hinnant{ 607*3e519524SHoward Hinnant using _STD::swap; 608*3e519524SHoward Hinnant swap(c, __q.c); 609*3e519524SHoward Hinnant swap(comp, __q.comp); 610*3e519524SHoward Hinnant} 611*3e519524SHoward Hinnant 612*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 613*3e519524SHoward Hinnantinline 614*3e519524SHoward Hinnantvoid 615*3e519524SHoward Hinnantswap(priority_queue<_Tp, _Container, _Compare>& __x, 616*3e519524SHoward Hinnant priority_queue<_Tp, _Container, _Compare>& __y) 617*3e519524SHoward Hinnant{ 618*3e519524SHoward Hinnant __x.swap(__y); 619*3e519524SHoward Hinnant} 620*3e519524SHoward Hinnant 621*3e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare, class _Alloc> 622*3e519524SHoward Hinnantstruct uses_allocator<priority_queue<_Tp, _Container, _Compare>, _Alloc> 623*3e519524SHoward Hinnant : public uses_allocator<_Container, _Alloc> 624*3e519524SHoward Hinnant{ 625*3e519524SHoward Hinnant}; 626*3e519524SHoward Hinnant 627*3e519524SHoward Hinnant_LIBCPP_END_NAMESPACE_STD 628*3e519524SHoward Hinnant 629*3e519524SHoward Hinnant#endif // _LIBCPP_QUEUE 630