146035553Spatrick// -*- C++ -*- 2*4bdff4beSrobert//===----------------------------------------------------------------------===// 346035553Spatrick// 446035553Spatrick// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 546035553Spatrick// See https://llvm.org/LICENSE.txt for license information. 646035553Spatrick// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 746035553Spatrick// 846035553Spatrick//===----------------------------------------------------------------------===// 946035553Spatrick 1046035553Spatrick#ifndef _LIBCPP_QUEUE 1146035553Spatrick#define _LIBCPP_QUEUE 1246035553Spatrick 1346035553Spatrick/* 1446035553Spatrick queue synopsis 1546035553Spatrick 1646035553Spatricknamespace std 1746035553Spatrick{ 1846035553Spatrick 1946035553Spatricktemplate <class T, class Container = deque<T>> 2046035553Spatrickclass queue 2146035553Spatrick{ 2246035553Spatrickpublic: 2346035553Spatrick typedef Container container_type; 2446035553Spatrick typedef typename container_type::value_type value_type; 2546035553Spatrick typedef typename container_type::reference reference; 2646035553Spatrick typedef typename container_type::const_reference const_reference; 2746035553Spatrick typedef typename container_type::size_type size_type; 2846035553Spatrick 2946035553Spatrickprotected: 3046035553Spatrick container_type c; 3146035553Spatrick 3246035553Spatrickpublic: 3346035553Spatrick queue() = default; 3446035553Spatrick ~queue() = default; 3546035553Spatrick 3646035553Spatrick queue(const queue& q) = default; 3746035553Spatrick queue(queue&& q) = default; 3846035553Spatrick 3946035553Spatrick queue& operator=(const queue& q) = default; 4046035553Spatrick queue& operator=(queue&& q) = default; 4146035553Spatrick 4246035553Spatrick explicit queue(const container_type& c); 4346035553Spatrick explicit queue(container_type&& c) 44*4bdff4beSrobert template<class InputIterator> 45*4bdff4beSrobert queue(InputIterator first, InputIterator last); // since C++23 4646035553Spatrick template <class Alloc> 4746035553Spatrick explicit queue(const Alloc& a); 4846035553Spatrick template <class Alloc> 4946035553Spatrick queue(const container_type& c, const Alloc& a); 5046035553Spatrick template <class Alloc> 5146035553Spatrick queue(container_type&& c, const Alloc& a); 5246035553Spatrick template <class Alloc> 5346035553Spatrick queue(const queue& q, const Alloc& a); 5446035553Spatrick template <class Alloc> 5546035553Spatrick queue(queue&& q, const Alloc& a); 56*4bdff4beSrobert template <class InputIterator, class Alloc> 57*4bdff4beSrobert queue(InputIterator first, InputIterator last, const Alloc&); // since C++23 5846035553Spatrick 5946035553Spatrick bool empty() const; 6046035553Spatrick size_type size() const; 6146035553Spatrick 6246035553Spatrick reference front(); 6346035553Spatrick const_reference front() const; 6446035553Spatrick reference back(); 6546035553Spatrick const_reference back() const; 6646035553Spatrick 6746035553Spatrick void push(const value_type& v); 6846035553Spatrick void push(value_type&& v); 6946035553Spatrick template <class... Args> reference emplace(Args&&... args); // reference in C++17 7046035553Spatrick void pop(); 7146035553Spatrick 7246035553Spatrick void swap(queue& q) noexcept(is_nothrow_swappable_v<Container>) 7346035553Spatrick}; 7446035553Spatrick 7546035553Spatricktemplate<class Container> 7646035553Spatrick queue(Container) -> queue<typename Container::value_type, Container>; // C++17 7746035553Spatrick 78*4bdff4beSroberttemplate<class InputIterator> 79*4bdff4beSrobert queue(InputIterator, InputIterator) -> queue<iter-value-type<InputIterator>>; // since C++23 80*4bdff4beSrobert 8146035553Spatricktemplate<class Container, class Allocator> 8246035553Spatrick queue(Container, Allocator) -> queue<typename Container::value_type, Container>; // C++17 8346035553Spatrick 84*4bdff4beSroberttemplate<class InputIterator, class Allocator> 85*4bdff4beSrobert queue(InputIterator, InputIterator, Allocator) 86*4bdff4beSrobert -> queue<iter-value-type<InputIterator>, 87*4bdff4beSrobert deque<iter-value-type<InputIterator>, Allocator>>; // since C++23 88*4bdff4beSrobert 8946035553Spatricktemplate <class T, class Container> 9046035553Spatrick bool operator==(const queue<T, Container>& x,const queue<T, Container>& y); 9146035553Spatrick 9246035553Spatricktemplate <class T, class Container> 9346035553Spatrick bool operator< (const queue<T, Container>& x,const queue<T, Container>& y); 9446035553Spatrick 9546035553Spatricktemplate <class T, class Container> 9646035553Spatrick bool operator!=(const queue<T, Container>& x,const queue<T, Container>& y); 9746035553Spatrick 9846035553Spatricktemplate <class T, class Container> 9946035553Spatrick bool operator> (const queue<T, Container>& x,const queue<T, Container>& y); 10046035553Spatrick 10146035553Spatricktemplate <class T, class Container> 10246035553Spatrick bool operator>=(const queue<T, Container>& x,const queue<T, Container>& y); 10346035553Spatrick 10446035553Spatricktemplate <class T, class Container> 10546035553Spatrick bool operator<=(const queue<T, Container>& x,const queue<T, Container>& y); 10646035553Spatrick 10746035553Spatricktemplate <class T, class Container> 10846035553Spatrick void swap(queue<T, Container>& x, queue<T, Container>& y) 10946035553Spatrick noexcept(noexcept(x.swap(y))); 11046035553Spatrick 11146035553Spatricktemplate <class T, class Container = vector<T>, 11246035553Spatrick class Compare = less<typename Container::value_type>> 11346035553Spatrickclass priority_queue 11446035553Spatrick{ 11546035553Spatrickpublic: 11646035553Spatrick typedef Container container_type; 11746035553Spatrick typedef typename container_type::value_type value_type; 11846035553Spatrick typedef typename container_type::reference reference; 11946035553Spatrick typedef typename container_type::const_reference const_reference; 12046035553Spatrick typedef typename container_type::size_type size_type; 12146035553Spatrick 12246035553Spatrickprotected: 12346035553Spatrick container_type c; 12446035553Spatrick Compare comp; 12546035553Spatrick 12646035553Spatrickpublic: 12776d0caaeSpatrick priority_queue() : priority_queue(Compare()) {} // C++20 12876d0caaeSpatrick explicit priority_queue(const Compare& x) : priority_queue(x, Container()) {} 12976d0caaeSpatrick priority_queue(const Compare& x, const Container&); 13076d0caaeSpatrick explicit priority_queue(const Compare& x = Compare(), Container&& = Container()); // before C++20 13176d0caaeSpatrick priority_queue(const Compare& x, Container&&); // C++20 13246035553Spatrick template <class InputIterator> 13346035553Spatrick priority_queue(InputIterator first, InputIterator last, 13446035553Spatrick const Compare& comp = Compare()); 13546035553Spatrick template <class InputIterator> 13646035553Spatrick priority_queue(InputIterator first, InputIterator last, 137*4bdff4beSrobert const Compare& comp, const Container& c); 13846035553Spatrick template <class InputIterator> 13946035553Spatrick priority_queue(InputIterator first, InputIterator last, 140*4bdff4beSrobert const Compare& comp, Container&& c); 14146035553Spatrick template <class Alloc> 14246035553Spatrick explicit priority_queue(const Alloc& a); 14346035553Spatrick template <class Alloc> 14446035553Spatrick priority_queue(const Compare& comp, const Alloc& a); 14546035553Spatrick template <class Alloc> 146*4bdff4beSrobert priority_queue(const Compare& comp, const Container& c, 14746035553Spatrick const Alloc& a); 14846035553Spatrick template <class Alloc> 149*4bdff4beSrobert priority_queue(const Compare& comp, Container&& c, 15046035553Spatrick const Alloc& a); 151*4bdff4beSrobert template <class InputIterator> 152*4bdff4beSrobert priority_queue(InputIterator first, InputIterator last, 153*4bdff4beSrobert const Alloc& a); 154*4bdff4beSrobert template <class InputIterator> 155*4bdff4beSrobert priority_queue(InputIterator first, InputIterator last, 156*4bdff4beSrobert const Compare& comp, const Alloc& a); 157*4bdff4beSrobert template <class InputIterator> 158*4bdff4beSrobert priority_queue(InputIterator first, InputIterator last, 159*4bdff4beSrobert const Compare& comp, const Container& c, const Alloc& a); 160*4bdff4beSrobert template <class InputIterator> 161*4bdff4beSrobert priority_queue(InputIterator first, InputIterator last, 162*4bdff4beSrobert const Compare& comp, Container&& c, const Alloc& a); 16346035553Spatrick template <class Alloc> 16446035553Spatrick priority_queue(const priority_queue& q, const Alloc& a); 16546035553Spatrick template <class Alloc> 16646035553Spatrick priority_queue(priority_queue&& q, const Alloc& a); 16746035553Spatrick 16846035553Spatrick bool empty() const; 16946035553Spatrick size_type size() const; 17046035553Spatrick const_reference top() const; 17146035553Spatrick 17246035553Spatrick void push(const value_type& v); 17346035553Spatrick void push(value_type&& v); 17446035553Spatrick template <class... Args> void emplace(Args&&... args); 17546035553Spatrick void pop(); 17646035553Spatrick 17746035553Spatrick void swap(priority_queue& q) 17846035553Spatrick noexcept(is_nothrow_swappable_v<Container> && 17946035553Spatrick is_nothrow_swappable_v<Comp>) 18046035553Spatrick}; 18146035553Spatrick 18246035553Spatricktemplate <class Compare, class Container> 18346035553Spatrickpriority_queue(Compare, Container) 18446035553Spatrick -> priority_queue<typename Container::value_type, Container, Compare>; // C++17 18546035553Spatrick 18646035553Spatricktemplate<class InputIterator, 187*4bdff4beSrobert class Compare = less<iter-value-type<InputIterator>>, 188*4bdff4beSrobert class Container = vector<iter-value-type<InputIterator>>> 18946035553Spatrickpriority_queue(InputIterator, InputIterator, Compare = Compare(), Container = Container()) 190*4bdff4beSrobert -> priority_queue<iter-value-type<InputIterator>, Container, Compare>; // C++17 19146035553Spatrick 19246035553Spatricktemplate<class Compare, class Container, class Allocator> 19346035553Spatrickpriority_queue(Compare, Container, Allocator) 19446035553Spatrick -> priority_queue<typename Container::value_type, Container, Compare>; // C++17 19546035553Spatrick 196*4bdff4beSroberttemplate<class InputIterator, class Allocator> 197*4bdff4beSrobertpriority_queue(InputIterator, InputIterator, Allocator) 198*4bdff4beSrobert -> priority_queue<iter-value-type<InputIterator>, 199*4bdff4beSrobert vector<iter-value-type<InputIterator>, Allocator>, 200*4bdff4beSrobert less<iter-value-type<InputIterator>>>; // C++17 201*4bdff4beSrobert 202*4bdff4beSroberttemplate<class InputIterator, class Compare, class Allocator> 203*4bdff4beSrobertpriority_queue(InputIterator, InputIterator, Compare, Allocator) 204*4bdff4beSrobert -> priority_queue<iter-value-type<InputIterator>, 205*4bdff4beSrobert vector<iter-value-type<InputIterator>, Allocator>, Compare>; // C++17 206*4bdff4beSrobert 207*4bdff4beSroberttemplate<class InputIterator, class Compare, class Container, class Allocator> 208*4bdff4beSrobertpriority_queue(InputIterator, InputIterator, Compare, Container, Allocator) 209*4bdff4beSrobert -> priority_queue<typename Container::value_type, Container, Compare>; // C++17 210*4bdff4beSrobert 21146035553Spatricktemplate <class T, class Container, class Compare> 21246035553Spatrick void swap(priority_queue<T, Container, Compare>& x, 21346035553Spatrick priority_queue<T, Container, Compare>& y) 21446035553Spatrick noexcept(noexcept(x.swap(y))); 21546035553Spatrick 21646035553Spatrick} // std 21746035553Spatrick 21846035553Spatrick*/ 21946035553Spatrick 220*4bdff4beSrobert#include <__algorithm/make_heap.h> 221*4bdff4beSrobert#include <__algorithm/pop_heap.h> 222*4bdff4beSrobert#include <__algorithm/push_heap.h> 223*4bdff4beSrobert#include <__assert> // all public C++ headers provide the assertion handler 22446035553Spatrick#include <__config> 225*4bdff4beSrobert#include <__functional/operations.h> 226*4bdff4beSrobert#include <__iterator/iterator_traits.h> 22776d0caaeSpatrick#include <__memory/uses_allocator.h> 22876d0caaeSpatrick#include <__utility/forward.h> 22976d0caaeSpatrick#include <deque> 230*4bdff4beSrobert#include <type_traits> 23176d0caaeSpatrick#include <vector> 232*4bdff4beSrobert#include <version> 233*4bdff4beSrobert 234*4bdff4beSrobert// standard-mandated includes 235*4bdff4beSrobert 236*4bdff4beSrobert// [queue.syn] 237*4bdff4beSrobert#include <compare> 238*4bdff4beSrobert#include <initializer_list> 23946035553Spatrick 24046035553Spatrick#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 24146035553Spatrick# pragma GCC system_header 24246035553Spatrick#endif 24346035553Spatrick 24446035553Spatrick_LIBCPP_BEGIN_NAMESPACE_STD 24546035553Spatrick 24646035553Spatricktemplate <class _Tp, class _Container = deque<_Tp> > class _LIBCPP_TEMPLATE_VIS queue; 24746035553Spatrick 24846035553Spatricktemplate <class _Tp, class _Container> 24946035553Spatrick_LIBCPP_INLINE_VISIBILITY 25046035553Spatrickbool 25146035553Spatrickoperator==(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y); 25246035553Spatrick 25346035553Spatricktemplate <class _Tp, class _Container> 25446035553Spatrick_LIBCPP_INLINE_VISIBILITY 25546035553Spatrickbool 25646035553Spatrickoperator< (const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y); 25746035553Spatrick 25846035553Spatricktemplate <class _Tp, class _Container /*= deque<_Tp>*/> 25946035553Spatrickclass _LIBCPP_TEMPLATE_VIS queue 26046035553Spatrick{ 26146035553Spatrickpublic: 26246035553Spatrick typedef _Container container_type; 26346035553Spatrick typedef typename container_type::value_type value_type; 26446035553Spatrick typedef typename container_type::reference reference; 26546035553Spatrick typedef typename container_type::const_reference const_reference; 26646035553Spatrick typedef typename container_type::size_type size_type; 26746035553Spatrick static_assert((is_same<_Tp, value_type>::value), "" ); 26846035553Spatrick 26946035553Spatrickprotected: 27046035553Spatrick container_type c; 27146035553Spatrick 27246035553Spatrickpublic: 27346035553Spatrick _LIBCPP_INLINE_VISIBILITY 27446035553Spatrick queue() 27546035553Spatrick _NOEXCEPT_(is_nothrow_default_constructible<container_type>::value) 27646035553Spatrick : c() {} 27746035553Spatrick 27846035553Spatrick _LIBCPP_INLINE_VISIBILITY 27946035553Spatrick queue(const queue& __q) : c(__q.c) {} 28046035553Spatrick 281*4bdff4beSrobert#if _LIBCPP_STD_VER > 20 282*4bdff4beSrobert template <class _InputIterator, 283*4bdff4beSrobert class = __enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>> 284*4bdff4beSrobert _LIBCPP_HIDE_FROM_ABI 285*4bdff4beSrobert queue(_InputIterator __first, _InputIterator __last) : c(__first, __last) {} 286*4bdff4beSrobert 287*4bdff4beSrobert template <class _InputIterator, 288*4bdff4beSrobert class _Alloc, 289*4bdff4beSrobert class = __enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>, 290*4bdff4beSrobert class = __enable_if_t<uses_allocator<container_type, _Alloc>::value>> 291*4bdff4beSrobert _LIBCPP_HIDE_FROM_ABI 292*4bdff4beSrobert queue(_InputIterator __first, _InputIterator __second, const _Alloc& __alloc) : c(__first, __second, __alloc) {} 293*4bdff4beSrobert#endif 294*4bdff4beSrobert 29546035553Spatrick _LIBCPP_INLINE_VISIBILITY 29646035553Spatrick queue& operator=(const queue& __q) {c = __q.c; return *this;} 29746035553Spatrick 29846035553Spatrick#ifndef _LIBCPP_CXX03_LANG 29946035553Spatrick _LIBCPP_INLINE_VISIBILITY 30046035553Spatrick queue(queue&& __q) 30146035553Spatrick _NOEXCEPT_(is_nothrow_move_constructible<container_type>::value) 30246035553Spatrick : c(_VSTD::move(__q.c)) {} 30346035553Spatrick 30446035553Spatrick _LIBCPP_INLINE_VISIBILITY 30546035553Spatrick queue& operator=(queue&& __q) 30646035553Spatrick _NOEXCEPT_(is_nothrow_move_assignable<container_type>::value) 30746035553Spatrick {c = _VSTD::move(__q.c); return *this;} 30846035553Spatrick#endif // _LIBCPP_CXX03_LANG 30946035553Spatrick 31046035553Spatrick _LIBCPP_INLINE_VISIBILITY 31146035553Spatrick explicit queue(const container_type& __c) : c(__c) {} 31246035553Spatrick#ifndef _LIBCPP_CXX03_LANG 31346035553Spatrick _LIBCPP_INLINE_VISIBILITY 31446035553Spatrick explicit queue(container_type&& __c) : c(_VSTD::move(__c)) {} 31546035553Spatrick#endif // _LIBCPP_CXX03_LANG 31646035553Spatrick template <class _Alloc> 31746035553Spatrick _LIBCPP_INLINE_VISIBILITY 31846035553Spatrick explicit queue(const _Alloc& __a, 319*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>* = 0) 32046035553Spatrick : c(__a) {} 32146035553Spatrick template <class _Alloc> 32246035553Spatrick _LIBCPP_INLINE_VISIBILITY 32346035553Spatrick queue(const queue& __q, const _Alloc& __a, 324*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>* = 0) 32546035553Spatrick : c(__q.c, __a) {} 32646035553Spatrick template <class _Alloc> 32746035553Spatrick _LIBCPP_INLINE_VISIBILITY 32846035553Spatrick queue(const container_type& __c, const _Alloc& __a, 329*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>* = 0) 33046035553Spatrick : c(__c, __a) {} 33146035553Spatrick#ifndef _LIBCPP_CXX03_LANG 33246035553Spatrick template <class _Alloc> 33346035553Spatrick _LIBCPP_INLINE_VISIBILITY 33446035553Spatrick queue(container_type&& __c, const _Alloc& __a, 335*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>* = 0) 33646035553Spatrick : c(_VSTD::move(__c), __a) {} 33746035553Spatrick template <class _Alloc> 33846035553Spatrick _LIBCPP_INLINE_VISIBILITY 33946035553Spatrick queue(queue&& __q, const _Alloc& __a, 340*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>* = 0) 34146035553Spatrick : c(_VSTD::move(__q.c), __a) {} 34246035553Spatrick 34346035553Spatrick#endif // _LIBCPP_CXX03_LANG 34446035553Spatrick 34546035553Spatrick _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY 34646035553Spatrick bool empty() const {return c.empty();} 34746035553Spatrick _LIBCPP_INLINE_VISIBILITY 34846035553Spatrick size_type size() const {return c.size();} 34946035553Spatrick 35046035553Spatrick _LIBCPP_INLINE_VISIBILITY 35146035553Spatrick reference front() {return c.front();} 35246035553Spatrick _LIBCPP_INLINE_VISIBILITY 35346035553Spatrick const_reference front() const {return c.front();} 35446035553Spatrick _LIBCPP_INLINE_VISIBILITY 35546035553Spatrick reference back() {return c.back();} 35646035553Spatrick _LIBCPP_INLINE_VISIBILITY 35746035553Spatrick const_reference back() const {return c.back();} 35846035553Spatrick 35946035553Spatrick _LIBCPP_INLINE_VISIBILITY 36046035553Spatrick void push(const value_type& __v) {c.push_back(__v);} 36146035553Spatrick#ifndef _LIBCPP_CXX03_LANG 36246035553Spatrick _LIBCPP_INLINE_VISIBILITY 36346035553Spatrick void push(value_type&& __v) {c.push_back(_VSTD::move(__v));} 36446035553Spatrick template <class... _Args> 36546035553Spatrick _LIBCPP_INLINE_VISIBILITY 36646035553Spatrick#if _LIBCPP_STD_VER > 14 36746035553Spatrick decltype(auto) emplace(_Args&&... __args) 36846035553Spatrick { return c.emplace_back(_VSTD::forward<_Args>(__args)...);} 36946035553Spatrick#else 37046035553Spatrick void emplace(_Args&&... __args) 37146035553Spatrick { c.emplace_back(_VSTD::forward<_Args>(__args)...);} 37246035553Spatrick#endif 37346035553Spatrick#endif // _LIBCPP_CXX03_LANG 37446035553Spatrick _LIBCPP_INLINE_VISIBILITY 37546035553Spatrick void pop() {c.pop_front();} 37646035553Spatrick 37746035553Spatrick _LIBCPP_INLINE_VISIBILITY 37846035553Spatrick void swap(queue& __q) 37946035553Spatrick _NOEXCEPT_(__is_nothrow_swappable<container_type>::value) 38046035553Spatrick { 38146035553Spatrick using _VSTD::swap; 38246035553Spatrick swap(c, __q.c); 38346035553Spatrick } 38446035553Spatrick 385*4bdff4beSrobert _LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI const _Container& __get_container() const { return c; } 386*4bdff4beSrobert 38746035553Spatrick template <class _T1, class _C1> 38846035553Spatrick friend 38946035553Spatrick _LIBCPP_INLINE_VISIBILITY 39046035553Spatrick bool 39146035553Spatrick operator==(const queue<_T1, _C1>& __x,const queue<_T1, _C1>& __y); 39246035553Spatrick 39346035553Spatrick template <class _T1, class _C1> 39446035553Spatrick friend 39546035553Spatrick _LIBCPP_INLINE_VISIBILITY 39646035553Spatrick bool 39746035553Spatrick operator< (const queue<_T1, _C1>& __x,const queue<_T1, _C1>& __y); 39846035553Spatrick}; 39946035553Spatrick 400*4bdff4beSrobert#if _LIBCPP_STD_VER > 14 40146035553Spatricktemplate<class _Container, 402*4bdff4beSrobert class = enable_if_t<!__is_allocator<_Container>::value> 40346035553Spatrick> 40446035553Spatrickqueue(_Container) 40546035553Spatrick -> queue<typename _Container::value_type, _Container>; 40646035553Spatrick 40746035553Spatricktemplate<class _Container, 40846035553Spatrick class _Alloc, 409*4bdff4beSrobert class = enable_if_t<!__is_allocator<_Container>::value>, 410*4bdff4beSrobert class = enable_if_t<uses_allocator<_Container, _Alloc>::value> 41146035553Spatrick> 41246035553Spatrickqueue(_Container, _Alloc) 41346035553Spatrick -> queue<typename _Container::value_type, _Container>; 41446035553Spatrick#endif 41546035553Spatrick 416*4bdff4beSrobert#if _LIBCPP_STD_VER > 20 417*4bdff4beSroberttemplate <class _InputIterator, 418*4bdff4beSrobert class = __enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>> 419*4bdff4beSrobertqueue(_InputIterator, _InputIterator) 420*4bdff4beSrobert -> queue<__iter_value_type<_InputIterator>>; 421*4bdff4beSrobert 422*4bdff4beSroberttemplate <class _InputIterator, 423*4bdff4beSrobert class _Alloc, 424*4bdff4beSrobert class = __enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>, 425*4bdff4beSrobert class = __enable_if_t<__is_allocator<_Alloc>::value>> 426*4bdff4beSrobertqueue(_InputIterator, _InputIterator, _Alloc) 427*4bdff4beSrobert -> queue<__iter_value_type<_InputIterator>, deque<__iter_value_type<_InputIterator>, _Alloc>>; 428*4bdff4beSrobert#endif 429*4bdff4beSrobert 43046035553Spatricktemplate <class _Tp, class _Container> 43146035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 43246035553Spatrickbool 43346035553Spatrickoperator==(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 43446035553Spatrick{ 43546035553Spatrick return __x.c == __y.c; 43646035553Spatrick} 43746035553Spatrick 43846035553Spatricktemplate <class _Tp, class _Container> 43946035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 44046035553Spatrickbool 44146035553Spatrickoperator< (const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 44246035553Spatrick{ 44346035553Spatrick return __x.c < __y.c; 44446035553Spatrick} 44546035553Spatrick 44646035553Spatricktemplate <class _Tp, class _Container> 44746035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 44846035553Spatrickbool 44946035553Spatrickoperator!=(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 45046035553Spatrick{ 45146035553Spatrick return !(__x == __y); 45246035553Spatrick} 45346035553Spatrick 45446035553Spatricktemplate <class _Tp, class _Container> 45546035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 45646035553Spatrickbool 45746035553Spatrickoperator> (const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 45846035553Spatrick{ 45946035553Spatrick return __y < __x; 46046035553Spatrick} 46146035553Spatrick 46246035553Spatricktemplate <class _Tp, class _Container> 46346035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 46446035553Spatrickbool 46546035553Spatrickoperator>=(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 46646035553Spatrick{ 46746035553Spatrick return !(__x < __y); 46846035553Spatrick} 46946035553Spatrick 47046035553Spatricktemplate <class _Tp, class _Container> 47146035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 47246035553Spatrickbool 47346035553Spatrickoperator<=(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y) 47446035553Spatrick{ 47546035553Spatrick return !(__y < __x); 47646035553Spatrick} 47746035553Spatrick 47846035553Spatricktemplate <class _Tp, class _Container> 47946035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 480*4bdff4beSrobert__enable_if_t<__is_swappable<_Container>::value, void> 48146035553Spatrickswap(queue<_Tp, _Container>& __x, queue<_Tp, _Container>& __y) 48246035553Spatrick _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y))) 48346035553Spatrick{ 48446035553Spatrick __x.swap(__y); 48546035553Spatrick} 48646035553Spatrick 48746035553Spatricktemplate <class _Tp, class _Container, class _Alloc> 48846035553Spatrickstruct _LIBCPP_TEMPLATE_VIS uses_allocator<queue<_Tp, _Container>, _Alloc> 48946035553Spatrick : public uses_allocator<_Container, _Alloc> 49046035553Spatrick{ 49146035553Spatrick}; 49246035553Spatrick 49346035553Spatricktemplate <class _Tp, class _Container = vector<_Tp>, 49446035553Spatrick class _Compare = less<typename _Container::value_type> > 49546035553Spatrickclass _LIBCPP_TEMPLATE_VIS priority_queue 49646035553Spatrick{ 49746035553Spatrickpublic: 49846035553Spatrick typedef _Container container_type; 49946035553Spatrick typedef _Compare value_compare; 50046035553Spatrick typedef typename container_type::value_type value_type; 50146035553Spatrick typedef typename container_type::reference reference; 50246035553Spatrick typedef typename container_type::const_reference const_reference; 50346035553Spatrick typedef typename container_type::size_type size_type; 50446035553Spatrick static_assert((is_same<_Tp, value_type>::value), "" ); 50546035553Spatrick 50646035553Spatrickprotected: 50746035553Spatrick container_type c; 50846035553Spatrick value_compare comp; 50946035553Spatrick 51046035553Spatrickpublic: 51146035553Spatrick _LIBCPP_INLINE_VISIBILITY 51246035553Spatrick priority_queue() 51346035553Spatrick _NOEXCEPT_(is_nothrow_default_constructible<container_type>::value && 51446035553Spatrick is_nothrow_default_constructible<value_compare>::value) 51546035553Spatrick : c(), comp() {} 51646035553Spatrick 51746035553Spatrick _LIBCPP_INLINE_VISIBILITY 51846035553Spatrick priority_queue(const priority_queue& __q) : c(__q.c), comp(__q.comp) {} 51946035553Spatrick 52046035553Spatrick _LIBCPP_INLINE_VISIBILITY 52146035553Spatrick priority_queue& operator=(const priority_queue& __q) 52246035553Spatrick {c = __q.c; comp = __q.comp; return *this;} 52346035553Spatrick 52446035553Spatrick#ifndef _LIBCPP_CXX03_LANG 52546035553Spatrick _LIBCPP_INLINE_VISIBILITY 52646035553Spatrick priority_queue(priority_queue&& __q) 52746035553Spatrick _NOEXCEPT_(is_nothrow_move_constructible<container_type>::value && 52846035553Spatrick is_nothrow_move_constructible<value_compare>::value) 52946035553Spatrick : c(_VSTD::move(__q.c)), comp(_VSTD::move(__q.comp)) {} 53046035553Spatrick 53146035553Spatrick _LIBCPP_INLINE_VISIBILITY 53246035553Spatrick priority_queue& operator=(priority_queue&& __q) 53346035553Spatrick _NOEXCEPT_(is_nothrow_move_assignable<container_type>::value && 53446035553Spatrick is_nothrow_move_assignable<value_compare>::value) 53546035553Spatrick {c = _VSTD::move(__q.c); comp = _VSTD::move(__q.comp); return *this;} 53646035553Spatrick#endif // _LIBCPP_CXX03_LANG 53746035553Spatrick 53846035553Spatrick _LIBCPP_INLINE_VISIBILITY 53946035553Spatrick explicit priority_queue(const value_compare& __comp) 54046035553Spatrick : c(), comp(__comp) {} 54146035553Spatrick _LIBCPP_INLINE_VISIBILITY 54246035553Spatrick priority_queue(const value_compare& __comp, const container_type& __c); 54346035553Spatrick#ifndef _LIBCPP_CXX03_LANG 54446035553Spatrick _LIBCPP_INLINE_VISIBILITY 54576d0caaeSpatrick priority_queue(const value_compare& __comp, container_type&& __c); 54646035553Spatrick#endif 547*4bdff4beSrobert template <class _InputIter, class = __enable_if_t<__is_cpp17_input_iterator<_InputIter>::value> > 54846035553Spatrick _LIBCPP_INLINE_VISIBILITY 54946035553Spatrick priority_queue(_InputIter __f, _InputIter __l, 55046035553Spatrick const value_compare& __comp = value_compare()); 551*4bdff4beSrobert template <class _InputIter, class = __enable_if_t<__is_cpp17_input_iterator<_InputIter>::value> > 55246035553Spatrick _LIBCPP_INLINE_VISIBILITY 55346035553Spatrick priority_queue(_InputIter __f, _InputIter __l, 55446035553Spatrick const value_compare& __comp, const container_type& __c); 55546035553Spatrick#ifndef _LIBCPP_CXX03_LANG 556*4bdff4beSrobert template <class _InputIter, class = __enable_if_t<__is_cpp17_input_iterator<_InputIter>::value> > 55746035553Spatrick _LIBCPP_INLINE_VISIBILITY 55846035553Spatrick priority_queue(_InputIter __f, _InputIter __l, 55946035553Spatrick const value_compare& __comp, container_type&& __c); 56046035553Spatrick#endif // _LIBCPP_CXX03_LANG 56146035553Spatrick template <class _Alloc> 56246035553Spatrick _LIBCPP_INLINE_VISIBILITY 56346035553Spatrick explicit priority_queue(const _Alloc& __a, 564*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>* = 0); 56546035553Spatrick template <class _Alloc> 56646035553Spatrick _LIBCPP_INLINE_VISIBILITY 56746035553Spatrick priority_queue(const value_compare& __comp, const _Alloc& __a, 568*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>* = 0); 56946035553Spatrick template <class _Alloc> 57046035553Spatrick _LIBCPP_INLINE_VISIBILITY 57146035553Spatrick priority_queue(const value_compare& __comp, const container_type& __c, 57246035553Spatrick const _Alloc& __a, 573*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>* = 0); 57446035553Spatrick template <class _Alloc> 57546035553Spatrick _LIBCPP_INLINE_VISIBILITY 57646035553Spatrick priority_queue(const priority_queue& __q, const _Alloc& __a, 577*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>* = 0); 57846035553Spatrick#ifndef _LIBCPP_CXX03_LANG 57946035553Spatrick template <class _Alloc> 58046035553Spatrick _LIBCPP_INLINE_VISIBILITY 58146035553Spatrick priority_queue(const value_compare& __comp, container_type&& __c, 58246035553Spatrick const _Alloc& __a, 583*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>* = 0); 58446035553Spatrick template <class _Alloc> 58546035553Spatrick _LIBCPP_INLINE_VISIBILITY 58646035553Spatrick priority_queue(priority_queue&& __q, const _Alloc& __a, 587*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>* = 0); 588*4bdff4beSrobert#endif // _LIBCPP_CXX03_LANG 589*4bdff4beSrobert 590*4bdff4beSrobert template <class _InputIter, class _Alloc, class = __enable_if_t<__is_cpp17_input_iterator<_InputIter>::value> > 591*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY 592*4bdff4beSrobert priority_queue(_InputIter __f, _InputIter __l, const _Alloc& __a, 593*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>* = 0); 594*4bdff4beSrobert 595*4bdff4beSrobert template <class _InputIter, class _Alloc, class = __enable_if_t<__is_cpp17_input_iterator<_InputIter>::value> > 596*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY 597*4bdff4beSrobert priority_queue(_InputIter __f, _InputIter __l, 598*4bdff4beSrobert const value_compare& __comp, const _Alloc& __a, 599*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>* = 0); 600*4bdff4beSrobert 601*4bdff4beSrobert template <class _InputIter, class _Alloc, class = __enable_if_t<__is_cpp17_input_iterator<_InputIter>::value> > 602*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY 603*4bdff4beSrobert priority_queue(_InputIter __f, _InputIter __l, 604*4bdff4beSrobert const value_compare& __comp, const container_type& __c, const _Alloc& __a, 605*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>* = 0); 606*4bdff4beSrobert 607*4bdff4beSrobert#ifndef _LIBCPP_CXX03_LANG 608*4bdff4beSrobert template <class _InputIter, class _Alloc, class = __enable_if_t<__is_cpp17_input_iterator<_InputIter>::value> > 609*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY 610*4bdff4beSrobert priority_queue(_InputIter __f, _InputIter __l, 611*4bdff4beSrobert const value_compare& __comp, container_type&& __c, const _Alloc& __a, 612*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>* = 0); 61346035553Spatrick#endif // _LIBCPP_CXX03_LANG 61446035553Spatrick 61546035553Spatrick _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY 61646035553Spatrick bool empty() const {return c.empty();} 61746035553Spatrick _LIBCPP_INLINE_VISIBILITY 61846035553Spatrick size_type size() const {return c.size();} 61946035553Spatrick _LIBCPP_INLINE_VISIBILITY 62046035553Spatrick const_reference top() const {return c.front();} 62146035553Spatrick 62246035553Spatrick _LIBCPP_INLINE_VISIBILITY 62346035553Spatrick void push(const value_type& __v); 62446035553Spatrick#ifndef _LIBCPP_CXX03_LANG 62546035553Spatrick _LIBCPP_INLINE_VISIBILITY 62646035553Spatrick void push(value_type&& __v); 62746035553Spatrick template <class... _Args> 62846035553Spatrick _LIBCPP_INLINE_VISIBILITY 62946035553Spatrick void emplace(_Args&&... __args); 63046035553Spatrick#endif // _LIBCPP_CXX03_LANG 63146035553Spatrick _LIBCPP_INLINE_VISIBILITY 63246035553Spatrick void pop(); 63346035553Spatrick 63446035553Spatrick _LIBCPP_INLINE_VISIBILITY 63546035553Spatrick void swap(priority_queue& __q) 63646035553Spatrick _NOEXCEPT_(__is_nothrow_swappable<container_type>::value && 63746035553Spatrick __is_nothrow_swappable<value_compare>::value); 638*4bdff4beSrobert 639*4bdff4beSrobert _LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI const _Container& __get_container() const { return c; } 64046035553Spatrick}; 64146035553Spatrick 642*4bdff4beSrobert#if _LIBCPP_STD_VER >= 17 64346035553Spatricktemplate <class _Compare, 64446035553Spatrick class _Container, 645*4bdff4beSrobert class = enable_if_t<!__is_allocator<_Compare>::value>, 646*4bdff4beSrobert class = enable_if_t<!__is_allocator<_Container>::value> 64746035553Spatrick> 64846035553Spatrickpriority_queue(_Compare, _Container) 64946035553Spatrick -> priority_queue<typename _Container::value_type, _Container, _Compare>; 65046035553Spatrick 65146035553Spatricktemplate<class _InputIterator, 65276d0caaeSpatrick class _Compare = less<__iter_value_type<_InputIterator>>, 65376d0caaeSpatrick class _Container = vector<__iter_value_type<_InputIterator>>, 654*4bdff4beSrobert class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>, 655*4bdff4beSrobert class = enable_if_t<!__is_allocator<_Compare>::value>, 656*4bdff4beSrobert class = enable_if_t<!__is_allocator<_Container>::value> 65746035553Spatrick> 65846035553Spatrickpriority_queue(_InputIterator, _InputIterator, _Compare = _Compare(), _Container = _Container()) 65976d0caaeSpatrick -> priority_queue<__iter_value_type<_InputIterator>, _Container, _Compare>; 66046035553Spatrick 66146035553Spatricktemplate<class _Compare, 66246035553Spatrick class _Container, 66346035553Spatrick class _Alloc, 664*4bdff4beSrobert class = enable_if_t<!__is_allocator<_Compare>::value>, 665*4bdff4beSrobert class = enable_if_t<!__is_allocator<_Container>::value>, 666*4bdff4beSrobert class = enable_if_t<uses_allocator<_Container, _Alloc>::value> 66746035553Spatrick> 66846035553Spatrickpriority_queue(_Compare, _Container, _Alloc) 66946035553Spatrick -> priority_queue<typename _Container::value_type, _Container, _Compare>; 670*4bdff4beSrobert 671*4bdff4beSroberttemplate<class _InputIterator, class _Allocator, 672*4bdff4beSrobert class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>, 673*4bdff4beSrobert class = enable_if_t<__is_allocator<_Allocator>::value> 674*4bdff4beSrobert> 675*4bdff4beSrobertpriority_queue(_InputIterator, _InputIterator, _Allocator) 676*4bdff4beSrobert -> priority_queue<__iter_value_type<_InputIterator>, 677*4bdff4beSrobert vector<__iter_value_type<_InputIterator>, _Allocator>, 678*4bdff4beSrobert less<__iter_value_type<_InputIterator>>>; 679*4bdff4beSrobert 680*4bdff4beSroberttemplate<class _InputIterator, class _Compare, class _Allocator, 681*4bdff4beSrobert class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>, 682*4bdff4beSrobert class = enable_if_t<!__is_allocator<_Compare>::value>, 683*4bdff4beSrobert class = enable_if_t<__is_allocator<_Allocator>::value> 684*4bdff4beSrobert> 685*4bdff4beSrobertpriority_queue(_InputIterator, _InputIterator, _Compare, _Allocator) 686*4bdff4beSrobert -> priority_queue<__iter_value_type<_InputIterator>, 687*4bdff4beSrobert vector<__iter_value_type<_InputIterator>, _Allocator>, _Compare>; 688*4bdff4beSrobert 689*4bdff4beSroberttemplate<class _InputIterator, class _Compare, class _Container, class _Alloc, 690*4bdff4beSrobert class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>, 691*4bdff4beSrobert class = enable_if_t<!__is_allocator<_Compare>::value>, 692*4bdff4beSrobert class = enable_if_t<!__is_allocator<_Container>::value>, 693*4bdff4beSrobert class = enable_if_t<uses_allocator<_Container, _Alloc>::value> 694*4bdff4beSrobert> 695*4bdff4beSrobertpriority_queue(_InputIterator, _InputIterator, _Compare, _Container, _Alloc) 696*4bdff4beSrobert -> priority_queue<typename _Container::value_type, _Container, _Compare>; 69746035553Spatrick#endif 69846035553Spatrick 69946035553Spatricktemplate <class _Tp, class _Container, class _Compare> 70046035553Spatrickinline 70146035553Spatrickpriority_queue<_Tp, _Container, _Compare>::priority_queue(const _Compare& __comp, 70246035553Spatrick const container_type& __c) 70346035553Spatrick : c(__c), 70446035553Spatrick comp(__comp) 70546035553Spatrick{ 70646035553Spatrick _VSTD::make_heap(c.begin(), c.end(), comp); 70746035553Spatrick} 70846035553Spatrick 70946035553Spatrick#ifndef _LIBCPP_CXX03_LANG 71046035553Spatrick 71146035553Spatricktemplate <class _Tp, class _Container, class _Compare> 71246035553Spatrickinline 71346035553Spatrickpriority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp, 71446035553Spatrick container_type&& __c) 71546035553Spatrick : c(_VSTD::move(__c)), 71646035553Spatrick comp(__comp) 71746035553Spatrick{ 71846035553Spatrick _VSTD::make_heap(c.begin(), c.end(), comp); 71946035553Spatrick} 72046035553Spatrick 72146035553Spatrick#endif // _LIBCPP_CXX03_LANG 72246035553Spatrick 72346035553Spatricktemplate <class _Tp, class _Container, class _Compare> 724*4bdff4beSroberttemplate <class _InputIter, class> 72546035553Spatrickinline 72646035553Spatrickpriority_queue<_Tp, _Container, _Compare>::priority_queue(_InputIter __f, _InputIter __l, 72746035553Spatrick const value_compare& __comp) 72846035553Spatrick : c(__f, __l), 72946035553Spatrick comp(__comp) 73046035553Spatrick{ 73146035553Spatrick _VSTD::make_heap(c.begin(), c.end(), comp); 73246035553Spatrick} 73346035553Spatrick 73446035553Spatricktemplate <class _Tp, class _Container, class _Compare> 735*4bdff4beSroberttemplate <class _InputIter, class> 73646035553Spatrickinline 73746035553Spatrickpriority_queue<_Tp, _Container, _Compare>::priority_queue(_InputIter __f, _InputIter __l, 73846035553Spatrick const value_compare& __comp, 73946035553Spatrick const container_type& __c) 74046035553Spatrick : c(__c), 74146035553Spatrick comp(__comp) 74246035553Spatrick{ 74346035553Spatrick c.insert(c.end(), __f, __l); 74446035553Spatrick _VSTD::make_heap(c.begin(), c.end(), comp); 74546035553Spatrick} 74646035553Spatrick 74746035553Spatrick#ifndef _LIBCPP_CXX03_LANG 74846035553Spatrick 74946035553Spatricktemplate <class _Tp, class _Container, class _Compare> 750*4bdff4beSroberttemplate <class _InputIter, class> 75146035553Spatrickinline 75246035553Spatrickpriority_queue<_Tp, _Container, _Compare>::priority_queue(_InputIter __f, _InputIter __l, 75346035553Spatrick const value_compare& __comp, 75446035553Spatrick container_type&& __c) 75546035553Spatrick : c(_VSTD::move(__c)), 75646035553Spatrick comp(__comp) 75746035553Spatrick{ 75846035553Spatrick c.insert(c.end(), __f, __l); 75946035553Spatrick _VSTD::make_heap(c.begin(), c.end(), comp); 76046035553Spatrick} 76146035553Spatrick 76246035553Spatrick#endif // _LIBCPP_CXX03_LANG 76346035553Spatrick 76446035553Spatricktemplate <class _Tp, class _Container, class _Compare> 76546035553Spatricktemplate <class _Alloc> 76646035553Spatrickinline 76746035553Spatrickpriority_queue<_Tp, _Container, _Compare>::priority_queue(const _Alloc& __a, 768*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>*) 76946035553Spatrick : c(__a) 77046035553Spatrick{ 77146035553Spatrick} 77246035553Spatrick 77346035553Spatricktemplate <class _Tp, class _Container, class _Compare> 77446035553Spatricktemplate <class _Alloc> 77546035553Spatrickinline 77646035553Spatrickpriority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp, 77746035553Spatrick const _Alloc& __a, 778*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>*) 77946035553Spatrick : c(__a), 78046035553Spatrick comp(__comp) 78146035553Spatrick{ 78246035553Spatrick} 78346035553Spatrick 78446035553Spatricktemplate <class _Tp, class _Container, class _Compare> 78546035553Spatricktemplate <class _Alloc> 78646035553Spatrickinline 78746035553Spatrickpriority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp, 78846035553Spatrick const container_type& __c, 78946035553Spatrick const _Alloc& __a, 790*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>*) 79146035553Spatrick : c(__c, __a), 79246035553Spatrick comp(__comp) 79346035553Spatrick{ 79446035553Spatrick _VSTD::make_heap(c.begin(), c.end(), comp); 79546035553Spatrick} 79646035553Spatrick 79746035553Spatricktemplate <class _Tp, class _Container, class _Compare> 79846035553Spatricktemplate <class _Alloc> 79946035553Spatrickinline 80046035553Spatrickpriority_queue<_Tp, _Container, _Compare>::priority_queue(const priority_queue& __q, 80146035553Spatrick const _Alloc& __a, 802*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>*) 80346035553Spatrick : c(__q.c, __a), 80446035553Spatrick comp(__q.comp) 80546035553Spatrick{ 80646035553Spatrick} 80746035553Spatrick 80846035553Spatrick#ifndef _LIBCPP_CXX03_LANG 80946035553Spatrick 81046035553Spatricktemplate <class _Tp, class _Container, class _Compare> 81146035553Spatricktemplate <class _Alloc> 81246035553Spatrickinline 81346035553Spatrickpriority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp, 81446035553Spatrick container_type&& __c, 81546035553Spatrick const _Alloc& __a, 816*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>*) 81746035553Spatrick : c(_VSTD::move(__c), __a), 81846035553Spatrick comp(__comp) 81946035553Spatrick{ 82046035553Spatrick _VSTD::make_heap(c.begin(), c.end(), comp); 82146035553Spatrick} 82246035553Spatrick 82346035553Spatricktemplate <class _Tp, class _Container, class _Compare> 82446035553Spatricktemplate <class _Alloc> 82546035553Spatrickinline 82646035553Spatrickpriority_queue<_Tp, _Container, _Compare>::priority_queue(priority_queue&& __q, 82746035553Spatrick const _Alloc& __a, 828*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>*) 82946035553Spatrick : c(_VSTD::move(__q.c), __a), 83046035553Spatrick comp(_VSTD::move(__q.comp)) 83146035553Spatrick{ 832*4bdff4beSrobert} 833*4bdff4beSrobert 834*4bdff4beSrobert#endif // _LIBCPP_CXX03_LANG 835*4bdff4beSrobert 836*4bdff4beSroberttemplate <class _Tp, class _Container, class _Compare> 837*4bdff4beSroberttemplate <class _InputIter, class _Alloc, class> 838*4bdff4beSrobertinline 839*4bdff4beSrobertpriority_queue<_Tp, _Container, _Compare>::priority_queue( 840*4bdff4beSrobert _InputIter __f, _InputIter __l, const _Alloc& __a, 841*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>*) 842*4bdff4beSrobert : c(__f, __l, __a), 843*4bdff4beSrobert comp() 844*4bdff4beSrobert{ 84546035553Spatrick _VSTD::make_heap(c.begin(), c.end(), comp); 84646035553Spatrick} 84746035553Spatrick 848*4bdff4beSroberttemplate <class _Tp, class _Container, class _Compare> 849*4bdff4beSroberttemplate <class _InputIter, class _Alloc, class> 850*4bdff4beSrobertinline 851*4bdff4beSrobertpriority_queue<_Tp, _Container, _Compare>::priority_queue( 852*4bdff4beSrobert _InputIter __f, _InputIter __l, 853*4bdff4beSrobert const value_compare& __comp, const _Alloc& __a, 854*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>*) 855*4bdff4beSrobert : c(__f, __l, __a), 856*4bdff4beSrobert comp(__comp) 857*4bdff4beSrobert{ 858*4bdff4beSrobert _VSTD::make_heap(c.begin(), c.end(), comp); 859*4bdff4beSrobert} 860*4bdff4beSrobert 861*4bdff4beSroberttemplate <class _Tp, class _Container, class _Compare> 862*4bdff4beSroberttemplate <class _InputIter, class _Alloc, class> 863*4bdff4beSrobertinline 864*4bdff4beSrobertpriority_queue<_Tp, _Container, _Compare>::priority_queue( 865*4bdff4beSrobert _InputIter __f, _InputIter __l, 866*4bdff4beSrobert const value_compare& __comp, const container_type& __c, const _Alloc& __a, 867*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>*) 868*4bdff4beSrobert : c(__c, __a), 869*4bdff4beSrobert comp(__comp) 870*4bdff4beSrobert{ 871*4bdff4beSrobert c.insert(c.end(), __f, __l); 872*4bdff4beSrobert _VSTD::make_heap(c.begin(), c.end(), comp); 873*4bdff4beSrobert} 874*4bdff4beSrobert 875*4bdff4beSrobert#ifndef _LIBCPP_CXX03_LANG 876*4bdff4beSroberttemplate <class _Tp, class _Container, class _Compare> 877*4bdff4beSroberttemplate <class _InputIter, class _Alloc, class> 878*4bdff4beSrobertinline 879*4bdff4beSrobertpriority_queue<_Tp, _Container, _Compare>::priority_queue( 880*4bdff4beSrobert _InputIter __f, _InputIter __l, const value_compare& __comp, 881*4bdff4beSrobert container_type&& __c, const _Alloc& __a, 882*4bdff4beSrobert __enable_if_t<uses_allocator<container_type, _Alloc>::value>*) 883*4bdff4beSrobert : c(_VSTD::move(__c), __a), 884*4bdff4beSrobert comp(__comp) 885*4bdff4beSrobert{ 886*4bdff4beSrobert c.insert(c.end(), __f, __l); 887*4bdff4beSrobert _VSTD::make_heap(c.begin(), c.end(), comp); 888*4bdff4beSrobert} 88946035553Spatrick#endif // _LIBCPP_CXX03_LANG 89046035553Spatrick 89146035553Spatricktemplate <class _Tp, class _Container, class _Compare> 89246035553Spatrickinline 89346035553Spatrickvoid 89446035553Spatrickpriority_queue<_Tp, _Container, _Compare>::push(const value_type& __v) 89546035553Spatrick{ 89646035553Spatrick c.push_back(__v); 89746035553Spatrick _VSTD::push_heap(c.begin(), c.end(), comp); 89846035553Spatrick} 89946035553Spatrick 90046035553Spatrick#ifndef _LIBCPP_CXX03_LANG 90146035553Spatrick 90246035553Spatricktemplate <class _Tp, class _Container, class _Compare> 90346035553Spatrickinline 90446035553Spatrickvoid 90546035553Spatrickpriority_queue<_Tp, _Container, _Compare>::push(value_type&& __v) 90646035553Spatrick{ 90746035553Spatrick c.push_back(_VSTD::move(__v)); 90846035553Spatrick _VSTD::push_heap(c.begin(), c.end(), comp); 90946035553Spatrick} 91046035553Spatrick 91146035553Spatricktemplate <class _Tp, class _Container, class _Compare> 91246035553Spatricktemplate <class... _Args> 91346035553Spatrickinline 91446035553Spatrickvoid 91546035553Spatrickpriority_queue<_Tp, _Container, _Compare>::emplace(_Args&&... __args) 91646035553Spatrick{ 91746035553Spatrick c.emplace_back(_VSTD::forward<_Args>(__args)...); 91846035553Spatrick _VSTD::push_heap(c.begin(), c.end(), comp); 91946035553Spatrick} 92046035553Spatrick 92146035553Spatrick#endif // _LIBCPP_CXX03_LANG 92246035553Spatrick 92346035553Spatricktemplate <class _Tp, class _Container, class _Compare> 92446035553Spatrickinline 92546035553Spatrickvoid 92646035553Spatrickpriority_queue<_Tp, _Container, _Compare>::pop() 92746035553Spatrick{ 92846035553Spatrick _VSTD::pop_heap(c.begin(), c.end(), comp); 92946035553Spatrick c.pop_back(); 93046035553Spatrick} 93146035553Spatrick 93246035553Spatricktemplate <class _Tp, class _Container, class _Compare> 93346035553Spatrickinline 93446035553Spatrickvoid 93546035553Spatrickpriority_queue<_Tp, _Container, _Compare>::swap(priority_queue& __q) 93646035553Spatrick _NOEXCEPT_(__is_nothrow_swappable<container_type>::value && 93746035553Spatrick __is_nothrow_swappable<value_compare>::value) 93846035553Spatrick{ 93946035553Spatrick using _VSTD::swap; 94046035553Spatrick swap(c, __q.c); 94146035553Spatrick swap(comp, __q.comp); 94246035553Spatrick} 94346035553Spatrick 94446035553Spatricktemplate <class _Tp, class _Container, class _Compare> 94546035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 946*4bdff4beSrobert__enable_if_t< 94776d0caaeSpatrick __is_swappable<_Container>::value && __is_swappable<_Compare>::value, 94846035553Spatrick void 94976d0caaeSpatrick> 95046035553Spatrickswap(priority_queue<_Tp, _Container, _Compare>& __x, 95146035553Spatrick priority_queue<_Tp, _Container, _Compare>& __y) 95246035553Spatrick _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y))) 95346035553Spatrick{ 95446035553Spatrick __x.swap(__y); 95546035553Spatrick} 95646035553Spatrick 95746035553Spatricktemplate <class _Tp, class _Container, class _Compare, class _Alloc> 95846035553Spatrickstruct _LIBCPP_TEMPLATE_VIS uses_allocator<priority_queue<_Tp, _Container, _Compare>, _Alloc> 95946035553Spatrick : public uses_allocator<_Container, _Alloc> 96046035553Spatrick{ 96146035553Spatrick}; 96246035553Spatrick 96346035553Spatrick_LIBCPP_END_NAMESPACE_STD 96446035553Spatrick 965*4bdff4beSrobert#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 966*4bdff4beSrobert# include <concepts> 967*4bdff4beSrobert# include <functional> 968*4bdff4beSrobert#endif 969*4bdff4beSrobert 97046035553Spatrick#endif // _LIBCPP_QUEUE 971