13e519524SHoward Hinnant// -*- C++ -*- 23e519524SHoward Hinnant//===--------------------------- queue ------------------------------------===// 33e519524SHoward Hinnant// 4*57b08b09SChandler Carruth// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5*57b08b09SChandler Carruth// See https://llvm.org/LICENSE.txt for license information. 6*57b08b09SChandler Carruth// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 73e519524SHoward Hinnant// 83e519524SHoward Hinnant//===----------------------------------------------------------------------===// 93e519524SHoward Hinnant 103e519524SHoward Hinnant#ifndef _LIBCPP_QUEUE 113e519524SHoward Hinnant#define _LIBCPP_QUEUE 123e519524SHoward Hinnant 133e519524SHoward Hinnant/* 143e519524SHoward Hinnant queue synopsis 153e519524SHoward Hinnant 163e519524SHoward Hinnantnamespace std 173e519524SHoward Hinnant{ 183e519524SHoward Hinnant 193e519524SHoward Hinnanttemplate <class T, class Container = deque<T>> 203e519524SHoward Hinnantclass queue 213e519524SHoward Hinnant{ 223e519524SHoward Hinnantpublic: 233e519524SHoward Hinnant typedef Container container_type; 243e519524SHoward Hinnant typedef typename container_type::value_type value_type; 253e519524SHoward Hinnant typedef typename container_type::reference reference; 263e519524SHoward Hinnant typedef typename container_type::const_reference const_reference; 273e519524SHoward Hinnant typedef typename container_type::size_type size_type; 283e519524SHoward Hinnant 293e519524SHoward Hinnantprotected: 303e519524SHoward Hinnant container_type c; 313e519524SHoward Hinnant 323e519524SHoward Hinnantpublic: 336971d826SHoward Hinnant queue() = default; 346971d826SHoward Hinnant ~queue() = default; 356971d826SHoward Hinnant 366971d826SHoward Hinnant queue(const queue& q) = default; 376971d826SHoward Hinnant queue(queue&& q) = default; 386971d826SHoward Hinnant 396971d826SHoward Hinnant queue& operator=(const queue& q) = default; 406971d826SHoward Hinnant queue& operator=(queue&& q) = default; 416971d826SHoward Hinnant 423e519524SHoward Hinnant explicit queue(const container_type& c); 436971d826SHoward Hinnant explicit queue(container_type&& c) 443e519524SHoward Hinnant template <class Alloc> 453e519524SHoward Hinnant explicit queue(const Alloc& a); 463e519524SHoward Hinnant template <class Alloc> 473e519524SHoward Hinnant queue(const container_type& c, const Alloc& a); 483e519524SHoward Hinnant template <class Alloc> 493e519524SHoward Hinnant queue(container_type&& c, const Alloc& a); 503e519524SHoward Hinnant template <class Alloc> 516971d826SHoward Hinnant queue(const queue& q, const Alloc& a); 526971d826SHoward Hinnant template <class Alloc> 533e519524SHoward Hinnant queue(queue&& q, const Alloc& a); 543e519524SHoward Hinnant 553e519524SHoward Hinnant bool empty() const; 563e519524SHoward Hinnant size_type size() const; 573e519524SHoward Hinnant 583e519524SHoward Hinnant reference front(); 593e519524SHoward Hinnant const_reference front() const; 603e519524SHoward Hinnant reference back(); 613e519524SHoward Hinnant const_reference back() const; 623e519524SHoward Hinnant 633e519524SHoward Hinnant void push(const value_type& v); 643e519524SHoward Hinnant void push(value_type&& v); 6563b560beSMarshall Clow template <class... Args> reference emplace(Args&&... args); // reference in C++17 663e519524SHoward Hinnant void pop(); 673e519524SHoward Hinnant 68f07dd8d0SEric Fiselier void swap(queue& q) noexcept(is_nothrow_swappable_v<Container>) 693e519524SHoward Hinnant}; 703e519524SHoward Hinnant 715b8b8b5dSMarshall Clowtemplate<class Container> 725b8b8b5dSMarshall Clow queue(Container) -> queue<typename Container::value_type, Container>; // C++17 735b8b8b5dSMarshall Clow 745b8b8b5dSMarshall Clowtemplate<class Container, class Allocator> 755b8b8b5dSMarshall Clow queue(Container, Allocator) -> queue<typename Container::value_type, Container>; // C++17 765b8b8b5dSMarshall Clow 773e519524SHoward Hinnanttemplate <class T, class Container> 783e519524SHoward Hinnant bool operator==(const queue<T, Container>& x,const queue<T, Container>& y); 793e519524SHoward Hinnant 803e519524SHoward Hinnanttemplate <class T, class Container> 813e519524SHoward Hinnant bool operator< (const queue<T, Container>& x,const queue<T, Container>& y); 823e519524SHoward Hinnant 833e519524SHoward Hinnanttemplate <class T, class Container> 843e519524SHoward Hinnant bool operator!=(const queue<T, Container>& x,const queue<T, Container>& y); 853e519524SHoward Hinnant 863e519524SHoward Hinnanttemplate <class T, class Container> 873e519524SHoward Hinnant bool operator> (const queue<T, Container>& x,const queue<T, Container>& y); 883e519524SHoward Hinnant 893e519524SHoward Hinnanttemplate <class T, class Container> 903e519524SHoward Hinnant bool operator>=(const queue<T, Container>& x,const queue<T, Container>& y); 913e519524SHoward Hinnant 923e519524SHoward Hinnanttemplate <class T, class Container> 933e519524SHoward Hinnant bool operator<=(const queue<T, Container>& x,const queue<T, Container>& y); 943e519524SHoward Hinnant 953e519524SHoward Hinnanttemplate <class T, class Container> 966971d826SHoward Hinnant void swap(queue<T, Container>& x, queue<T, Container>& y) 976971d826SHoward Hinnant noexcept(noexcept(x.swap(y))); 983e519524SHoward Hinnant 993e519524SHoward Hinnanttemplate <class T, class Container = vector<T>, 1003e519524SHoward Hinnant class Compare = less<typename Container::value_type>> 1013e519524SHoward Hinnantclass priority_queue 1023e519524SHoward Hinnant{ 1033e519524SHoward Hinnantpublic: 1043e519524SHoward Hinnant typedef Container container_type; 1053e519524SHoward Hinnant typedef typename container_type::value_type value_type; 1063e519524SHoward Hinnant typedef typename container_type::reference reference; 1073e519524SHoward Hinnant typedef typename container_type::const_reference const_reference; 1083e519524SHoward Hinnant typedef typename container_type::size_type size_type; 1093e519524SHoward Hinnant 1103e519524SHoward Hinnantprotected: 1113e519524SHoward Hinnant container_type c; 1123e519524SHoward Hinnant Compare comp; 1133e519524SHoward Hinnant 1143e519524SHoward Hinnantpublic: 1156971d826SHoward Hinnant priority_queue() = default; 1166971d826SHoward Hinnant ~priority_queue() = default; 1176971d826SHoward Hinnant 1186971d826SHoward Hinnant priority_queue(const priority_queue& q) = default; 1196971d826SHoward Hinnant priority_queue(priority_queue&& q) = default; 1206971d826SHoward Hinnant 1216971d826SHoward Hinnant priority_queue& operator=(const priority_queue& q) = default; 1226971d826SHoward Hinnant priority_queue& operator=(priority_queue&& q) = default; 1236971d826SHoward Hinnant 1246971d826SHoward Hinnant explicit priority_queue(const Compare& comp); 1253e519524SHoward Hinnant priority_queue(const Compare& comp, const container_type& c); 1263e519524SHoward Hinnant explicit priority_queue(const Compare& comp, container_type&& c); 1273e519524SHoward Hinnant template <class InputIterator> 1283e519524SHoward Hinnant priority_queue(InputIterator first, InputIterator last, 1293e519524SHoward Hinnant const Compare& comp = Compare()); 1303e519524SHoward Hinnant template <class InputIterator> 1313e519524SHoward Hinnant priority_queue(InputIterator first, InputIterator last, 1323e519524SHoward Hinnant const Compare& comp, const container_type& c); 1333e519524SHoward Hinnant template <class InputIterator> 1343e519524SHoward Hinnant priority_queue(InputIterator first, InputIterator last, 1353e519524SHoward Hinnant const Compare& comp, container_type&& c); 1363e519524SHoward Hinnant template <class Alloc> 1373e519524SHoward Hinnant explicit priority_queue(const Alloc& a); 1383e519524SHoward Hinnant template <class Alloc> 1393e519524SHoward Hinnant priority_queue(const Compare& comp, const Alloc& a); 1403e519524SHoward Hinnant template <class Alloc> 1413e519524SHoward Hinnant priority_queue(const Compare& comp, const container_type& c, 1423e519524SHoward Hinnant const Alloc& a); 1433e519524SHoward Hinnant template <class Alloc> 1443e519524SHoward Hinnant priority_queue(const Compare& comp, container_type&& c, 1453e519524SHoward Hinnant const Alloc& a); 1463e519524SHoward Hinnant template <class Alloc> 1476971d826SHoward Hinnant priority_queue(const priority_queue& q, const Alloc& a); 1486971d826SHoward Hinnant template <class Alloc> 1493e519524SHoward Hinnant priority_queue(priority_queue&& q, const Alloc& a); 1503e519524SHoward Hinnant 1513e519524SHoward Hinnant bool empty() const; 1523e519524SHoward Hinnant size_type size() const; 1533e519524SHoward Hinnant const_reference top() const; 1543e519524SHoward Hinnant 1553e519524SHoward Hinnant void push(const value_type& v); 1563e519524SHoward Hinnant void push(value_type&& v); 1573e519524SHoward Hinnant template <class... Args> void emplace(Args&&... args); 1583e519524SHoward Hinnant void pop(); 1593e519524SHoward Hinnant 1606971d826SHoward Hinnant void swap(priority_queue& q) 161f07dd8d0SEric Fiselier noexcept(is_nothrow_swappable_v<Container> && 162f07dd8d0SEric Fiselier is_nothrow_swappable_v<Comp>) 1633e519524SHoward Hinnant}; 1643e519524SHoward Hinnant 1655b8b8b5dSMarshall Clowtemplate <class Compare, class Container> 1665b8b8b5dSMarshall Clowpriority_queue(Compare, Container) 1675b8b8b5dSMarshall Clow -> priority_queue<typename Container::value_type, Container, Compare>; // C++17 1685b8b8b5dSMarshall Clow 1695b8b8b5dSMarshall Clowtemplate<class InputIterator, 1705b8b8b5dSMarshall Clow class Compare = less<typename iterator_traits<InputIterator>::value_type>, 1715b8b8b5dSMarshall Clow class Container = vector<typename iterator_traits<InputIterator>::value_type>> 1725b8b8b5dSMarshall Clowpriority_queue(InputIterator, InputIterator, Compare = Compare(), Container = Container()) 1735b8b8b5dSMarshall Clow -> priority_queue<typename iterator_traits<InputIterator>::value_type, Container, Compare>; // C++17 1745b8b8b5dSMarshall Clow 1755b8b8b5dSMarshall Clowtemplate<class Compare, class Container, class Allocator> 1765b8b8b5dSMarshall Clowpriority_queue(Compare, Container, Allocator) 1775b8b8b5dSMarshall Clow -> priority_queue<typename Container::value_type, Container, Compare>; // C++17 1785b8b8b5dSMarshall Clow 1793e519524SHoward Hinnanttemplate <class T, class Container, class Compare> 1803e519524SHoward Hinnant void swap(priority_queue<T, Container, Compare>& x, 1816971d826SHoward Hinnant priority_queue<T, Container, Compare>& y) 1826971d826SHoward Hinnant noexcept(noexcept(x.swap(y))); 1833e519524SHoward Hinnant 1843e519524SHoward Hinnant} // std 1853e519524SHoward Hinnant 1863e519524SHoward Hinnant*/ 1873e519524SHoward Hinnant 1883e519524SHoward Hinnant#include <__config> 1893e519524SHoward Hinnant#include <deque> 1903e519524SHoward Hinnant#include <vector> 1913e519524SHoward Hinnant#include <functional> 1923e519524SHoward Hinnant#include <algorithm> 1933e519524SHoward Hinnant 194073458b1SHoward Hinnant#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 1953e519524SHoward Hinnant#pragma GCC system_header 196073458b1SHoward Hinnant#endif 1973e519524SHoward Hinnant 1983e519524SHoward Hinnant_LIBCPP_BEGIN_NAMESPACE_STD 1993e519524SHoward Hinnant 200e2f2d1edSEric Fiseliertemplate <class _Tp, class _Container = deque<_Tp> > class _LIBCPP_TEMPLATE_VIS queue; 2013e519524SHoward Hinnant 2023e519524SHoward Hinnanttemplate <class _Tp, class _Container> 203aeb85680SHoward Hinnant_LIBCPP_INLINE_VISIBILITY 2043e519524SHoward Hinnantbool 2053e519524SHoward Hinnantoperator==(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y); 2063e519524SHoward Hinnant 2073e519524SHoward Hinnanttemplate <class _Tp, class _Container> 208aeb85680SHoward Hinnant_LIBCPP_INLINE_VISIBILITY 2093e519524SHoward Hinnantbool 2103e519524SHoward Hinnantoperator< (const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y); 2113e519524SHoward Hinnant 2123afa22a3SMarshall Clowtemplate <class _Tp, class _Container /*= deque<_Tp>*/> 213e2f2d1edSEric Fiselierclass _LIBCPP_TEMPLATE_VIS queue 2143e519524SHoward Hinnant{ 2153e519524SHoward Hinnantpublic: 2163e519524SHoward Hinnant typedef _Container container_type; 2173e519524SHoward Hinnant typedef typename container_type::value_type value_type; 2183e519524SHoward Hinnant typedef typename container_type::reference reference; 2193e519524SHoward Hinnant typedef typename container_type::const_reference const_reference; 2203e519524SHoward Hinnant typedef typename container_type::size_type size_type; 221c1fe2c43SMarshall Clow static_assert((is_same<_Tp, value_type>::value), "" ); 2223e519524SHoward Hinnant 2233e519524SHoward Hinnantprotected: 2243e519524SHoward Hinnant container_type c; 2253e519524SHoward Hinnant 2263e519524SHoward Hinnantpublic: 227392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2286971d826SHoward Hinnant queue() 2296971d826SHoward Hinnant _NOEXCEPT_(is_nothrow_default_constructible<container_type>::value) 2306971d826SHoward Hinnant : c() {} 2316971d826SHoward Hinnant 2326971d826SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2336971d826SHoward Hinnant queue(const queue& __q) : c(__q.c) {} 2346971d826SHoward Hinnant 235f5427b26SEric Fiselier _LIBCPP_INLINE_VISIBILITY 236f5427b26SEric Fiselier queue& operator=(const queue& __q) {c = __q.c; return *this;} 237f5427b26SEric Fiselier 238f5427b26SEric Fiselier#ifndef _LIBCPP_CXX03_LANG 2396971d826SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2406971d826SHoward Hinnant queue(queue&& __q) 2416971d826SHoward Hinnant _NOEXCEPT_(is_nothrow_move_constructible<container_type>::value) 242ce48a113SHoward Hinnant : c(_VSTD::move(__q.c)) {} 2436971d826SHoward Hinnant 2446971d826SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2456971d826SHoward Hinnant queue& operator=(queue&& __q) 2466971d826SHoward Hinnant _NOEXCEPT_(is_nothrow_move_assignable<container_type>::value) 247ce48a113SHoward Hinnant {c = _VSTD::move(__q.c); return *this;} 248f5427b26SEric Fiselier#endif // _LIBCPP_CXX03_LANG 2496971d826SHoward Hinnant 250392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2513e519524SHoward Hinnant explicit queue(const container_type& __c) : c(__c) {} 252f5427b26SEric Fiselier#ifndef _LIBCPP_CXX03_LANG 253392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 254ce48a113SHoward Hinnant explicit queue(container_type&& __c) : c(_VSTD::move(__c)) {} 255f5427b26SEric Fiselier#endif // _LIBCPP_CXX03_LANG 2563e519524SHoward Hinnant template <class _Alloc> 257392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2583e519524SHoward Hinnant explicit queue(const _Alloc& __a, 2593e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 2603e519524SHoward Hinnant _Alloc>::value>::type* = 0) 2613e519524SHoward Hinnant : c(__a) {} 2623e519524SHoward Hinnant template <class _Alloc> 263392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2643e519524SHoward Hinnant queue(const queue& __q, const _Alloc& __a, 2653e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 2663e519524SHoward Hinnant _Alloc>::value>::type* = 0) 2673e519524SHoward Hinnant : c(__q.c, __a) {} 2683e519524SHoward Hinnant template <class _Alloc> 269392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2703e519524SHoward Hinnant queue(const container_type& __c, const _Alloc& __a, 2713e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 2723e519524SHoward Hinnant _Alloc>::value>::type* = 0) 2733e519524SHoward Hinnant : c(__c, __a) {} 274f5427b26SEric Fiselier#ifndef _LIBCPP_CXX03_LANG 2753e519524SHoward Hinnant template <class _Alloc> 276392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2773e519524SHoward Hinnant queue(container_type&& __c, const _Alloc& __a, 2783e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 2793e519524SHoward Hinnant _Alloc>::value>::type* = 0) 280ce48a113SHoward Hinnant : c(_VSTD::move(__c), __a) {} 2813e519524SHoward Hinnant template <class _Alloc> 282392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2833e519524SHoward Hinnant queue(queue&& __q, const _Alloc& __a, 2843e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 2853e519524SHoward Hinnant _Alloc>::value>::type* = 0) 286ce48a113SHoward Hinnant : c(_VSTD::move(__q.c), __a) {} 2873e519524SHoward Hinnant 288f5427b26SEric Fiselier#endif // _LIBCPP_CXX03_LANG 2893e519524SHoward Hinnant 29072c8fad4SMarshall Clow _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY 2913e519524SHoward Hinnant bool empty() const {return c.empty();} 292392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2933e519524SHoward Hinnant size_type size() const {return c.size();} 2943e519524SHoward Hinnant 295392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2963e519524SHoward Hinnant reference front() {return c.front();} 297392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 2983e519524SHoward Hinnant const_reference front() const {return c.front();} 299392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3003e519524SHoward Hinnant reference back() {return c.back();} 301392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3023e519524SHoward Hinnant const_reference back() const {return c.back();} 3033e519524SHoward Hinnant 304392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3053e519524SHoward Hinnant void push(const value_type& __v) {c.push_back(__v);} 306f5427b26SEric Fiselier#ifndef _LIBCPP_CXX03_LANG 307392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 308ce48a113SHoward Hinnant void push(value_type&& __v) {c.push_back(_VSTD::move(__v));} 3093e519524SHoward Hinnant template <class... _Args> 310392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 31163b560beSMarshall Clow#if _LIBCPP_STD_VER > 14 312e34f5ffeSMarshall Clow decltype(auto) emplace(_Args&&... __args) 3130e411641SEric Fiselier { return c.emplace_back(_VSTD::forward<_Args>(__args)...);} 31463b560beSMarshall Clow#else 31563b560beSMarshall Clow void emplace(_Args&&... __args) 31663b560beSMarshall Clow { c.emplace_back(_VSTD::forward<_Args>(__args)...);} 31763b560beSMarshall Clow#endif 318f5427b26SEric Fiselier#endif // _LIBCPP_CXX03_LANG 319392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3203e519524SHoward Hinnant void pop() {c.pop_front();} 3213e519524SHoward Hinnant 322392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3233e519524SHoward Hinnant void swap(queue& __q) 3246971d826SHoward Hinnant _NOEXCEPT_(__is_nothrow_swappable<container_type>::value) 3253e519524SHoward Hinnant { 326ce48a113SHoward Hinnant using _VSTD::swap; 3273e519524SHoward Hinnant swap(c, __q.c); 3283e519524SHoward Hinnant } 3293e519524SHoward Hinnant 3303e519524SHoward Hinnant template <class _T1, class _C1> 3313e519524SHoward Hinnant friend 332392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3333e519524SHoward Hinnant bool 3343e519524SHoward Hinnant operator==(const queue<_T1, _C1>& __x,const queue<_T1, _C1>& __y); 3353e519524SHoward Hinnant 3363e519524SHoward Hinnant template <class _T1, class _C1> 3373e519524SHoward Hinnant friend 338392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 3393e519524SHoward Hinnant bool 3403e519524SHoward Hinnant operator< (const queue<_T1, _C1>& __x,const queue<_T1, _C1>& __y); 3413e519524SHoward Hinnant}; 3423e519524SHoward Hinnant 3435b8b8b5dSMarshall Clow#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES 3445b8b8b5dSMarshall Clowtemplate<class _Container, 3455b8b8b5dSMarshall Clow class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type 3465b8b8b5dSMarshall Clow> 3475b8b8b5dSMarshall Clowqueue(_Container) 3485b8b8b5dSMarshall Clow -> queue<typename _Container::value_type, _Container>; 3495b8b8b5dSMarshall Clow 3505b8b8b5dSMarshall Clowtemplate<class _Container, 3515b8b8b5dSMarshall Clow class _Alloc, 3525b8b8b5dSMarshall Clow class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type, 3535b8b8b5dSMarshall Clow class = typename enable_if< __is_allocator<_Alloc>::value, nullptr_t>::type 3545b8b8b5dSMarshall Clow> 3555b8b8b5dSMarshall Clowqueue(_Container, _Alloc) 3565b8b8b5dSMarshall Clow -> queue<typename _Container::value_type, _Container>; 3575b8b8b5dSMarshall Clow#endif 3585b8b8b5dSMarshall Clow 3593e519524SHoward Hinnanttemplate <class _Tp, class _Container> 360392183f9SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 3613e519524SHoward Hinnantbool 3623e519524SHoward Hinnantoperator==(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 3633e519524SHoward Hinnant{ 3643e519524SHoward Hinnant return __x.c == __y.c; 3653e519524SHoward Hinnant} 3663e519524SHoward Hinnant 3673e519524SHoward Hinnanttemplate <class _Tp, class _Container> 368392183f9SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 3693e519524SHoward Hinnantbool 3703e519524SHoward Hinnantoperator< (const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 3713e519524SHoward Hinnant{ 3723e519524SHoward Hinnant return __x.c < __y.c; 3733e519524SHoward Hinnant} 3743e519524SHoward Hinnant 3753e519524SHoward Hinnanttemplate <class _Tp, class _Container> 376392183f9SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 3773e519524SHoward Hinnantbool 3783e519524SHoward Hinnantoperator!=(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 3793e519524SHoward Hinnant{ 3803e519524SHoward Hinnant return !(__x == __y); 3813e519524SHoward Hinnant} 3823e519524SHoward Hinnant 3833e519524SHoward Hinnanttemplate <class _Tp, class _Container> 384392183f9SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 3853e519524SHoward Hinnantbool 3863e519524SHoward Hinnantoperator> (const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 3873e519524SHoward Hinnant{ 3883e519524SHoward Hinnant return __y < __x; 3893e519524SHoward Hinnant} 3903e519524SHoward Hinnant 3913e519524SHoward Hinnanttemplate <class _Tp, class _Container> 392392183f9SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 3933e519524SHoward Hinnantbool 3943e519524SHoward Hinnantoperator>=(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 3953e519524SHoward Hinnant{ 3963e519524SHoward Hinnant return !(__x < __y); 3973e519524SHoward Hinnant} 3983e519524SHoward Hinnant 3993e519524SHoward Hinnanttemplate <class _Tp, class _Container> 400392183f9SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 4013e519524SHoward Hinnantbool 4023e519524SHoward Hinnantoperator<=(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 4033e519524SHoward Hinnant{ 4043e519524SHoward Hinnant return !(__y < __x); 4053e519524SHoward Hinnant} 4063e519524SHoward Hinnant 4073e519524SHoward Hinnanttemplate <class _Tp, class _Container> 408392183f9SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 409f07dd8d0SEric Fiseliertypename enable_if< 410f07dd8d0SEric Fiselier __is_swappable<_Container>::value, 4113e519524SHoward Hinnant void 412f07dd8d0SEric Fiselier>::type 4133e519524SHoward Hinnantswap(queue<_Tp, _Container>& __x, queue<_Tp, _Container>& __y) 4146971d826SHoward Hinnant _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y))) 4153e519524SHoward Hinnant{ 4163e519524SHoward Hinnant __x.swap(__y); 4173e519524SHoward Hinnant} 4183e519524SHoward Hinnant 4193e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Alloc> 420e2f2d1edSEric Fiselierstruct _LIBCPP_TEMPLATE_VIS uses_allocator<queue<_Tp, _Container>, _Alloc> 4213e519524SHoward Hinnant : public uses_allocator<_Container, _Alloc> 4223e519524SHoward Hinnant{ 4233e519524SHoward Hinnant}; 4243e519524SHoward Hinnant 4253e519524SHoward Hinnanttemplate <class _Tp, class _Container = vector<_Tp>, 4263e519524SHoward Hinnant class _Compare = less<typename _Container::value_type> > 427e2f2d1edSEric Fiselierclass _LIBCPP_TEMPLATE_VIS priority_queue 4283e519524SHoward Hinnant{ 4293e519524SHoward Hinnantpublic: 4303e519524SHoward Hinnant typedef _Container container_type; 4313e519524SHoward Hinnant typedef _Compare value_compare; 4323e519524SHoward Hinnant typedef typename container_type::value_type value_type; 4333e519524SHoward Hinnant typedef typename container_type::reference reference; 4343e519524SHoward Hinnant typedef typename container_type::const_reference const_reference; 4353e519524SHoward Hinnant typedef typename container_type::size_type size_type; 436c1fe2c43SMarshall Clow static_assert((is_same<_Tp, value_type>::value), "" ); 4373e519524SHoward Hinnant 4383e519524SHoward Hinnantprotected: 4393e519524SHoward Hinnant container_type c; 4403e519524SHoward Hinnant value_compare comp; 4413e519524SHoward Hinnant 4423e519524SHoward Hinnantpublic: 443392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 4446971d826SHoward Hinnant priority_queue() 4456971d826SHoward Hinnant _NOEXCEPT_(is_nothrow_default_constructible<container_type>::value && 4466971d826SHoward Hinnant is_nothrow_default_constructible<value_compare>::value) 4476971d826SHoward Hinnant : c(), comp() {} 4486971d826SHoward Hinnant 4496971d826SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 4506971d826SHoward Hinnant priority_queue(const priority_queue& __q) : c(__q.c), comp(__q.comp) {} 4516971d826SHoward Hinnant 452f5427b26SEric Fiselier _LIBCPP_INLINE_VISIBILITY 453f5427b26SEric Fiselier priority_queue& operator=(const priority_queue& __q) 454f5427b26SEric Fiselier {c = __q.c; comp = __q.comp; return *this;} 455f5427b26SEric Fiselier 456f5427b26SEric Fiselier#ifndef _LIBCPP_CXX03_LANG 4576971d826SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 4586971d826SHoward Hinnant priority_queue(priority_queue&& __q) 4596971d826SHoward Hinnant _NOEXCEPT_(is_nothrow_move_constructible<container_type>::value && 4606971d826SHoward Hinnant is_nothrow_move_constructible<value_compare>::value) 461ce48a113SHoward Hinnant : c(_VSTD::move(__q.c)), comp(_VSTD::move(__q.comp)) {} 4626971d826SHoward Hinnant 4636971d826SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 4646971d826SHoward Hinnant priority_queue& operator=(priority_queue&& __q) 4656971d826SHoward Hinnant _NOEXCEPT_(is_nothrow_move_assignable<container_type>::value && 4666971d826SHoward Hinnant is_nothrow_move_assignable<value_compare>::value) 467ce48a113SHoward Hinnant {c = _VSTD::move(__q.c); comp = _VSTD::move(__q.comp); return *this;} 468f5427b26SEric Fiselier#endif // _LIBCPP_CXX03_LANG 4696971d826SHoward Hinnant 4706971d826SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 4716971d826SHoward Hinnant explicit priority_queue(const value_compare& __comp) 4723e519524SHoward Hinnant : c(), comp(__comp) {} 473cd31b434SEvgeniy Stepanov _LIBCPP_INLINE_VISIBILITY 4743e519524SHoward Hinnant priority_queue(const value_compare& __comp, const container_type& __c); 475f5427b26SEric Fiselier#ifndef _LIBCPP_CXX03_LANG 476cd31b434SEvgeniy Stepanov _LIBCPP_INLINE_VISIBILITY 4773e519524SHoward Hinnant explicit priority_queue(const value_compare& __comp, container_type&& __c); 4783e519524SHoward Hinnant#endif 4793e519524SHoward Hinnant template <class _InputIter> 480cd31b434SEvgeniy Stepanov _LIBCPP_INLINE_VISIBILITY 4813e519524SHoward Hinnant priority_queue(_InputIter __f, _InputIter __l, 4823e519524SHoward Hinnant const value_compare& __comp = value_compare()); 4833e519524SHoward Hinnant template <class _InputIter> 484cd31b434SEvgeniy Stepanov _LIBCPP_INLINE_VISIBILITY 4853e519524SHoward Hinnant priority_queue(_InputIter __f, _InputIter __l, 4863e519524SHoward Hinnant const value_compare& __comp, const container_type& __c); 487f5427b26SEric Fiselier#ifndef _LIBCPP_CXX03_LANG 4883e519524SHoward Hinnant template <class _InputIter> 489cd31b434SEvgeniy Stepanov _LIBCPP_INLINE_VISIBILITY 4903e519524SHoward Hinnant priority_queue(_InputIter __f, _InputIter __l, 4913e519524SHoward Hinnant const value_compare& __comp, container_type&& __c); 492f5427b26SEric Fiselier#endif // _LIBCPP_CXX03_LANG 4933e519524SHoward Hinnant template <class _Alloc> 494cd31b434SEvgeniy Stepanov _LIBCPP_INLINE_VISIBILITY 4953e519524SHoward Hinnant explicit priority_queue(const _Alloc& __a, 4963e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 4973e519524SHoward Hinnant _Alloc>::value>::type* = 0); 4983e519524SHoward Hinnant template <class _Alloc> 499cd31b434SEvgeniy Stepanov _LIBCPP_INLINE_VISIBILITY 5003e519524SHoward Hinnant priority_queue(const value_compare& __comp, const _Alloc& __a, 5013e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 5023e519524SHoward Hinnant _Alloc>::value>::type* = 0); 5033e519524SHoward Hinnant template <class _Alloc> 504cd31b434SEvgeniy Stepanov _LIBCPP_INLINE_VISIBILITY 5053e519524SHoward Hinnant priority_queue(const value_compare& __comp, const container_type& __c, 5063e519524SHoward Hinnant const _Alloc& __a, 5073e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 5083e519524SHoward Hinnant _Alloc>::value>::type* = 0); 5093e519524SHoward Hinnant template <class _Alloc> 510cd31b434SEvgeniy Stepanov _LIBCPP_INLINE_VISIBILITY 5113e519524SHoward Hinnant priority_queue(const priority_queue& __q, const _Alloc& __a, 5123e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 5133e519524SHoward Hinnant _Alloc>::value>::type* = 0); 514f5427b26SEric Fiselier#ifndef _LIBCPP_CXX03_LANG 5153e519524SHoward Hinnant template <class _Alloc> 516cd31b434SEvgeniy Stepanov _LIBCPP_INLINE_VISIBILITY 5173e519524SHoward Hinnant priority_queue(const value_compare& __comp, container_type&& __c, 5183e519524SHoward Hinnant const _Alloc& __a, 5193e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 5203e519524SHoward Hinnant _Alloc>::value>::type* = 0); 5213e519524SHoward Hinnant template <class _Alloc> 522cd31b434SEvgeniy Stepanov _LIBCPP_INLINE_VISIBILITY 5233e519524SHoward Hinnant priority_queue(priority_queue&& __q, const _Alloc& __a, 5243e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 5253e519524SHoward Hinnant _Alloc>::value>::type* = 0); 526f5427b26SEric Fiselier#endif // _LIBCPP_CXX03_LANG 5273e519524SHoward Hinnant 52872c8fad4SMarshall Clow _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY 5293e519524SHoward Hinnant bool empty() const {return c.empty();} 530392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 5313e519524SHoward Hinnant size_type size() const {return c.size();} 532392183f9SHoward Hinnant _LIBCPP_INLINE_VISIBILITY 5333e519524SHoward Hinnant const_reference top() const {return c.front();} 5343e519524SHoward Hinnant 535cd31b434SEvgeniy Stepanov _LIBCPP_INLINE_VISIBILITY 5363e519524SHoward Hinnant void push(const value_type& __v); 537f5427b26SEric Fiselier#ifndef _LIBCPP_CXX03_LANG 538cd31b434SEvgeniy Stepanov _LIBCPP_INLINE_VISIBILITY 5393e519524SHoward Hinnant void push(value_type&& __v); 540f5427b26SEric Fiselier template <class... _Args> 541f5427b26SEric Fiselier _LIBCPP_INLINE_VISIBILITY 542f5427b26SEric Fiselier void emplace(_Args&&... __args); 543f5427b26SEric Fiselier#endif // _LIBCPP_CXX03_LANG 544cd31b434SEvgeniy Stepanov _LIBCPP_INLINE_VISIBILITY 5453e519524SHoward Hinnant void pop(); 5463e519524SHoward Hinnant 547cd31b434SEvgeniy Stepanov _LIBCPP_INLINE_VISIBILITY 5486971d826SHoward Hinnant void swap(priority_queue& __q) 5496971d826SHoward Hinnant _NOEXCEPT_(__is_nothrow_swappable<container_type>::value && 5506971d826SHoward Hinnant __is_nothrow_swappable<value_compare>::value); 5513e519524SHoward Hinnant}; 5523e519524SHoward Hinnant 5535b8b8b5dSMarshall Clow#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES 5545b8b8b5dSMarshall Clowtemplate <class _Compare, 5555b8b8b5dSMarshall Clow class _Container, 5565b8b8b5dSMarshall Clow class = typename enable_if<!__is_allocator<_Compare>::value, nullptr_t>::type, 5575b8b8b5dSMarshall Clow class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type 5585b8b8b5dSMarshall Clow> 5595b8b8b5dSMarshall Clowpriority_queue(_Compare, _Container) 5605b8b8b5dSMarshall Clow -> priority_queue<typename _Container::value_type, _Container, _Compare>; 5615b8b8b5dSMarshall Clow 5625b8b8b5dSMarshall Clowtemplate<class _InputIterator, 5635b8b8b5dSMarshall Clow class _Compare = less<typename iterator_traits<_InputIterator>::value_type>, 5645b8b8b5dSMarshall Clow class _Container = vector<typename iterator_traits<_InputIterator>::value_type>, 5655b8b8b5dSMarshall Clow class = typename enable_if< __is_input_iterator<_InputIterator>::value, nullptr_t>::type, 5665b8b8b5dSMarshall Clow class = typename enable_if<!__is_allocator<_Compare>::value, nullptr_t>::type, 5675b8b8b5dSMarshall Clow class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type 5685b8b8b5dSMarshall Clow> 5695b8b8b5dSMarshall Clowpriority_queue(_InputIterator, _InputIterator, _Compare = _Compare(), _Container = _Container()) 5705b8b8b5dSMarshall Clow -> priority_queue<typename iterator_traits<_InputIterator>::value_type, _Container, _Compare>; 5715b8b8b5dSMarshall Clow 5725b8b8b5dSMarshall Clowtemplate<class _Compare, 5735b8b8b5dSMarshall Clow class _Container, 5745b8b8b5dSMarshall Clow class _Alloc, 5755b8b8b5dSMarshall Clow class = typename enable_if<!__is_allocator<_Compare>::value, nullptr_t>::type, 5765b8b8b5dSMarshall Clow class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type, 5775b8b8b5dSMarshall Clow class = typename enable_if< __is_allocator<_Alloc>::value, nullptr_t>::type 5785b8b8b5dSMarshall Clow> 5795b8b8b5dSMarshall Clowpriority_queue(_Compare, _Container, _Alloc) 5805b8b8b5dSMarshall Clow -> priority_queue<typename _Container::value_type, _Container, _Compare>; 5815b8b8b5dSMarshall Clow#endif 5825b8b8b5dSMarshall Clow 5833e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 584cd31b434SEvgeniy Stepanovinline 5853e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(const _Compare& __comp, 5863e519524SHoward Hinnant const container_type& __c) 5873e519524SHoward Hinnant : c(__c), 5883e519524SHoward Hinnant comp(__comp) 5893e519524SHoward Hinnant{ 590ce48a113SHoward Hinnant _VSTD::make_heap(c.begin(), c.end(), comp); 5913e519524SHoward Hinnant} 5923e519524SHoward Hinnant 593f5427b26SEric Fiselier#ifndef _LIBCPP_CXX03_LANG 5943e519524SHoward Hinnant 5953e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 596cd31b434SEvgeniy Stepanovinline 5973e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp, 5983e519524SHoward Hinnant container_type&& __c) 599ce48a113SHoward Hinnant : c(_VSTD::move(__c)), 6003e519524SHoward Hinnant comp(__comp) 6013e519524SHoward Hinnant{ 602ce48a113SHoward Hinnant _VSTD::make_heap(c.begin(), c.end(), comp); 6033e519524SHoward Hinnant} 6043e519524SHoward Hinnant 605f5427b26SEric Fiselier#endif // _LIBCPP_CXX03_LANG 6063e519524SHoward Hinnant 6073e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 6083e519524SHoward Hinnanttemplate <class _InputIter> 609cd31b434SEvgeniy Stepanovinline 6103e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(_InputIter __f, _InputIter __l, 6113e519524SHoward Hinnant const value_compare& __comp) 6123e519524SHoward Hinnant : c(__f, __l), 6133e519524SHoward Hinnant comp(__comp) 6143e519524SHoward Hinnant{ 615ce48a113SHoward Hinnant _VSTD::make_heap(c.begin(), c.end(), comp); 6163e519524SHoward Hinnant} 6173e519524SHoward Hinnant 6183e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 6193e519524SHoward Hinnanttemplate <class _InputIter> 620cd31b434SEvgeniy Stepanovinline 6213e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(_InputIter __f, _InputIter __l, 6223e519524SHoward Hinnant const value_compare& __comp, 6233e519524SHoward Hinnant const container_type& __c) 6243e519524SHoward Hinnant : c(__c), 6253e519524SHoward Hinnant comp(__comp) 6263e519524SHoward Hinnant{ 6273e519524SHoward Hinnant c.insert(c.end(), __f, __l); 628ce48a113SHoward Hinnant _VSTD::make_heap(c.begin(), c.end(), comp); 6293e519524SHoward Hinnant} 6303e519524SHoward Hinnant 631f5427b26SEric Fiselier#ifndef _LIBCPP_CXX03_LANG 6323e519524SHoward Hinnant 6333e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 6343e519524SHoward Hinnanttemplate <class _InputIter> 635cd31b434SEvgeniy Stepanovinline 6363e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(_InputIter __f, _InputIter __l, 6373e519524SHoward Hinnant const value_compare& __comp, 6383e519524SHoward Hinnant container_type&& __c) 639ce48a113SHoward Hinnant : c(_VSTD::move(__c)), 6403e519524SHoward Hinnant comp(__comp) 6413e519524SHoward Hinnant{ 6423e519524SHoward Hinnant c.insert(c.end(), __f, __l); 643ce48a113SHoward Hinnant _VSTD::make_heap(c.begin(), c.end(), comp); 6443e519524SHoward Hinnant} 6453e519524SHoward Hinnant 646f5427b26SEric Fiselier#endif // _LIBCPP_CXX03_LANG 6473e519524SHoward Hinnant 6483e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 6493e519524SHoward Hinnanttemplate <class _Alloc> 650cd31b434SEvgeniy Stepanovinline 6513e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(const _Alloc& __a, 6523e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 6533e519524SHoward Hinnant _Alloc>::value>::type*) 6543e519524SHoward Hinnant : c(__a) 6553e519524SHoward Hinnant{ 6563e519524SHoward Hinnant} 6573e519524SHoward Hinnant 6583e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 6593e519524SHoward Hinnanttemplate <class _Alloc> 660cd31b434SEvgeniy Stepanovinline 6613e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp, 6623e519524SHoward Hinnant const _Alloc& __a, 6633e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 6643e519524SHoward Hinnant _Alloc>::value>::type*) 6653e519524SHoward Hinnant : c(__a), 6663e519524SHoward Hinnant comp(__comp) 6673e519524SHoward Hinnant{ 6683e519524SHoward Hinnant} 6693e519524SHoward Hinnant 6703e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 6713e519524SHoward Hinnanttemplate <class _Alloc> 672cd31b434SEvgeniy Stepanovinline 6733e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp, 6743e519524SHoward Hinnant const container_type& __c, 6753e519524SHoward Hinnant const _Alloc& __a, 6763e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 6773e519524SHoward Hinnant _Alloc>::value>::type*) 6783e519524SHoward Hinnant : c(__c, __a), 6793e519524SHoward Hinnant comp(__comp) 6803e519524SHoward Hinnant{ 681ce48a113SHoward Hinnant _VSTD::make_heap(c.begin(), c.end(), comp); 6823e519524SHoward Hinnant} 6833e519524SHoward Hinnant 6843e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 6853e519524SHoward Hinnanttemplate <class _Alloc> 686cd31b434SEvgeniy Stepanovinline 6873e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(const priority_queue& __q, 6883e519524SHoward Hinnant const _Alloc& __a, 6893e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 6903e519524SHoward Hinnant _Alloc>::value>::type*) 6913e519524SHoward Hinnant : c(__q.c, __a), 6923e519524SHoward Hinnant comp(__q.comp) 6933e519524SHoward Hinnant{ 694ce48a113SHoward Hinnant _VSTD::make_heap(c.begin(), c.end(), comp); 6953e519524SHoward Hinnant} 6963e519524SHoward Hinnant 697f5427b26SEric Fiselier#ifndef _LIBCPP_CXX03_LANG 6983e519524SHoward Hinnant 6993e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 7003e519524SHoward Hinnanttemplate <class _Alloc> 701cd31b434SEvgeniy Stepanovinline 7023e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp, 7033e519524SHoward Hinnant container_type&& __c, 7043e519524SHoward Hinnant const _Alloc& __a, 7053e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 7063e519524SHoward Hinnant _Alloc>::value>::type*) 707ce48a113SHoward Hinnant : c(_VSTD::move(__c), __a), 7083e519524SHoward Hinnant comp(__comp) 7093e519524SHoward Hinnant{ 710ce48a113SHoward Hinnant _VSTD::make_heap(c.begin(), c.end(), comp); 7113e519524SHoward Hinnant} 7123e519524SHoward Hinnant 7133e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 7143e519524SHoward Hinnanttemplate <class _Alloc> 715cd31b434SEvgeniy Stepanovinline 7163e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::priority_queue(priority_queue&& __q, 7173e519524SHoward Hinnant const _Alloc& __a, 7183e519524SHoward Hinnant typename enable_if<uses_allocator<container_type, 7193e519524SHoward Hinnant _Alloc>::value>::type*) 720ce48a113SHoward Hinnant : c(_VSTD::move(__q.c), __a), 721ce48a113SHoward Hinnant comp(_VSTD::move(__q.comp)) 7223e519524SHoward Hinnant{ 723ce48a113SHoward Hinnant _VSTD::make_heap(c.begin(), c.end(), comp); 7243e519524SHoward Hinnant} 7253e519524SHoward Hinnant 726f5427b26SEric Fiselier#endif // _LIBCPP_CXX03_LANG 7273e519524SHoward Hinnant 7283e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 729cd31b434SEvgeniy Stepanovinline 7303e519524SHoward Hinnantvoid 7313e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::push(const value_type& __v) 7323e519524SHoward Hinnant{ 7333e519524SHoward Hinnant c.push_back(__v); 734ce48a113SHoward Hinnant _VSTD::push_heap(c.begin(), c.end(), comp); 7353e519524SHoward Hinnant} 7363e519524SHoward Hinnant 737f5427b26SEric Fiselier#ifndef _LIBCPP_CXX03_LANG 7383e519524SHoward Hinnant 7393e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 740cd31b434SEvgeniy Stepanovinline 7413e519524SHoward Hinnantvoid 7423e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::push(value_type&& __v) 7433e519524SHoward Hinnant{ 744ce48a113SHoward Hinnant c.push_back(_VSTD::move(__v)); 745ce48a113SHoward Hinnant _VSTD::push_heap(c.begin(), c.end(), comp); 7463e519524SHoward Hinnant} 7473e519524SHoward Hinnant 7483e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 7493e519524SHoward Hinnanttemplate <class... _Args> 750cd31b434SEvgeniy Stepanovinline 7513e519524SHoward Hinnantvoid 7523e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::emplace(_Args&&... __args) 7533e519524SHoward Hinnant{ 754ce48a113SHoward Hinnant c.emplace_back(_VSTD::forward<_Args>(__args)...); 755ce48a113SHoward Hinnant _VSTD::push_heap(c.begin(), c.end(), comp); 7563e519524SHoward Hinnant} 7573e519524SHoward Hinnant 758f5427b26SEric Fiselier#endif // _LIBCPP_CXX03_LANG 7593e519524SHoward Hinnant 7603e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 761cd31b434SEvgeniy Stepanovinline 7623e519524SHoward Hinnantvoid 7633e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::pop() 7643e519524SHoward Hinnant{ 765ce48a113SHoward Hinnant _VSTD::pop_heap(c.begin(), c.end(), comp); 7663e519524SHoward Hinnant c.pop_back(); 7673e519524SHoward Hinnant} 7683e519524SHoward Hinnant 7693e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 770cd31b434SEvgeniy Stepanovinline 7713e519524SHoward Hinnantvoid 7723e519524SHoward Hinnantpriority_queue<_Tp, _Container, _Compare>::swap(priority_queue& __q) 7736971d826SHoward Hinnant _NOEXCEPT_(__is_nothrow_swappable<container_type>::value && 7746971d826SHoward Hinnant __is_nothrow_swappable<value_compare>::value) 7753e519524SHoward Hinnant{ 776ce48a113SHoward Hinnant using _VSTD::swap; 7773e519524SHoward Hinnant swap(c, __q.c); 7783e519524SHoward Hinnant swap(comp, __q.comp); 7793e519524SHoward Hinnant} 7803e519524SHoward Hinnant 7813e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare> 782392183f9SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 783f07dd8d0SEric Fiseliertypename enable_if< 784f07dd8d0SEric Fiselier __is_swappable<_Container>::value 785f07dd8d0SEric Fiselier && __is_swappable<_Compare>::value, 7863e519524SHoward Hinnant void 787f07dd8d0SEric Fiselier>::type 7883e519524SHoward Hinnantswap(priority_queue<_Tp, _Container, _Compare>& __x, 7893e519524SHoward Hinnant priority_queue<_Tp, _Container, _Compare>& __y) 7906971d826SHoward Hinnant _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y))) 7913e519524SHoward Hinnant{ 7923e519524SHoward Hinnant __x.swap(__y); 7933e519524SHoward Hinnant} 7943e519524SHoward Hinnant 7953e519524SHoward Hinnanttemplate <class _Tp, class _Container, class _Compare, class _Alloc> 796e2f2d1edSEric Fiselierstruct _LIBCPP_TEMPLATE_VIS uses_allocator<priority_queue<_Tp, _Container, _Compare>, _Alloc> 7973e519524SHoward Hinnant : public uses_allocator<_Container, _Alloc> 7983e519524SHoward Hinnant{ 7993e519524SHoward Hinnant}; 8003e519524SHoward Hinnant 8013e519524SHoward Hinnant_LIBCPP_END_NAMESPACE_STD 8023e519524SHoward Hinnant 8033e519524SHoward Hinnant#endif // _LIBCPP_QUEUE 804