1e78f53d1SNikolas Klauser// -*- C++ -*- 2e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===// 3e78f53d1SNikolas Klauser// 4e78f53d1SNikolas Klauser// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5e78f53d1SNikolas Klauser// See https://llvm.org/LICENSE.txt for license information. 6e78f53d1SNikolas Klauser// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7e78f53d1SNikolas Klauser// 8e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===// 9e78f53d1SNikolas Klauser 10*ce777190SNikolas Klauser#ifndef _LIBCPP___CXX03_QUEUE 11*ce777190SNikolas Klauser#define _LIBCPP___CXX03_QUEUE 12e78f53d1SNikolas Klauser 13e78f53d1SNikolas Klauser/* 14e78f53d1SNikolas Klauser queue synopsis 15e78f53d1SNikolas Klauser 16e78f53d1SNikolas Klausernamespace std 17e78f53d1SNikolas Klauser{ 18e78f53d1SNikolas Klauser 19e78f53d1SNikolas Klausertemplate <class T, class Container = deque<T>> 20e78f53d1SNikolas Klauserclass queue 21e78f53d1SNikolas Klauser{ 22e78f53d1SNikolas Klauserpublic: 23e78f53d1SNikolas Klauser typedef Container container_type; 24e78f53d1SNikolas Klauser typedef typename container_type::value_type value_type; 25e78f53d1SNikolas Klauser typedef typename container_type::reference reference; 26e78f53d1SNikolas Klauser typedef typename container_type::const_reference const_reference; 27e78f53d1SNikolas Klauser typedef typename container_type::size_type size_type; 28e78f53d1SNikolas Klauser 29e78f53d1SNikolas Klauserprotected: 30e78f53d1SNikolas Klauser container_type c; 31e78f53d1SNikolas Klauser 32e78f53d1SNikolas Klauserpublic: 33e78f53d1SNikolas Klauser queue() = default; 34e78f53d1SNikolas Klauser ~queue() = default; 35e78f53d1SNikolas Klauser 36e78f53d1SNikolas Klauser queue(const queue& q) = default; 37e78f53d1SNikolas Klauser queue(queue&& q) = default; 38e78f53d1SNikolas Klauser 39e78f53d1SNikolas Klauser queue& operator=(const queue& q) = default; 40e78f53d1SNikolas Klauser queue& operator=(queue&& q) = default; 41e78f53d1SNikolas Klauser 42e78f53d1SNikolas Klauser explicit queue(const container_type& c); 43e78f53d1SNikolas Klauser explicit queue(container_type&& c) 44e78f53d1SNikolas Klauser template<class InputIterator> 45e78f53d1SNikolas Klauser queue(InputIterator first, InputIterator last); // since C++23 46e78f53d1SNikolas Klauser template<container-compatible-range<T> R> queue(from_range_t, R&& rg); // since C++23 47e78f53d1SNikolas Klauser template <class Alloc> 48e78f53d1SNikolas Klauser explicit queue(const Alloc& a); 49e78f53d1SNikolas Klauser template <class Alloc> 50e78f53d1SNikolas Klauser queue(const container_type& c, const Alloc& a); 51e78f53d1SNikolas Klauser template <class Alloc> 52e78f53d1SNikolas Klauser queue(container_type&& c, const Alloc& a); 53e78f53d1SNikolas Klauser template <class Alloc> 54e78f53d1SNikolas Klauser queue(const queue& q, const Alloc& a); 55e78f53d1SNikolas Klauser template <class Alloc> 56e78f53d1SNikolas Klauser queue(queue&& q, const Alloc& a); 57e78f53d1SNikolas Klauser template <class InputIterator, class Alloc> 58e78f53d1SNikolas Klauser queue(InputIterator first, InputIterator last, const Alloc&); // since C++23 59e78f53d1SNikolas Klauser template<container-compatible-range<T> R, class Alloc> 60e78f53d1SNikolas Klauser queue(from_range_t, R&& rg, const Alloc&); // since C++23 61e78f53d1SNikolas Klauser 62e78f53d1SNikolas Klauser bool empty() const; 63e78f53d1SNikolas Klauser size_type size() const; 64e78f53d1SNikolas Klauser 65e78f53d1SNikolas Klauser reference front(); 66e78f53d1SNikolas Klauser const_reference front() const; 67e78f53d1SNikolas Klauser reference back(); 68e78f53d1SNikolas Klauser const_reference back() const; 69e78f53d1SNikolas Klauser 70e78f53d1SNikolas Klauser void push(const value_type& v); 71e78f53d1SNikolas Klauser void push(value_type&& v); 72e78f53d1SNikolas Klauser template<container-compatible-range<T> R> 73e78f53d1SNikolas Klauser void push_range(R&& rg); // C++23 74e78f53d1SNikolas Klauser template <class... Args> reference emplace(Args&&... args); // reference in C++17 75e78f53d1SNikolas Klauser void pop(); 76e78f53d1SNikolas Klauser 77e78f53d1SNikolas Klauser void swap(queue& q) noexcept(is_nothrow_swappable_v<Container>) 78e78f53d1SNikolas Klauser}; 79e78f53d1SNikolas Klauser 80e78f53d1SNikolas Klausertemplate<class Container> 81e78f53d1SNikolas Klauser queue(Container) -> queue<typename Container::value_type, Container>; // C++17 82e78f53d1SNikolas Klauser 83e78f53d1SNikolas Klausertemplate<class InputIterator> 84e78f53d1SNikolas Klauser queue(InputIterator, InputIterator) -> queue<iter-value-type<InputIterator>>; // since C++23 85e78f53d1SNikolas Klauser 86e78f53d1SNikolas Klausertemplate<ranges::input_range R> 87e78f53d1SNikolas Klauser queue(from_range_t, R&&) -> queue<ranges::range_value_t<R>>; // since C++23 88e78f53d1SNikolas Klauser 89e78f53d1SNikolas Klausertemplate<class Container, class Allocator> 90e78f53d1SNikolas Klauser queue(Container, Allocator) -> queue<typename Container::value_type, Container>; // C++17 91e78f53d1SNikolas Klauser 92e78f53d1SNikolas Klausertemplate<class InputIterator, class Allocator> 93e78f53d1SNikolas Klauser queue(InputIterator, InputIterator, Allocator) 94e78f53d1SNikolas Klauser -> queue<iter-value-type<InputIterator>, 95e78f53d1SNikolas Klauser deque<iter-value-type<InputIterator>, Allocator>>; // since C++23 96e78f53d1SNikolas Klauser 97e78f53d1SNikolas Klausertemplate<ranges::input_range R, class Allocator> 98e78f53d1SNikolas Klauser queue(from_range_t, R&&, Allocator) 99e78f53d1SNikolas Klauser -> queue<ranges::range_value_t<R>, deque<ranges::range_value_t<R>, Allocator>>; // since C++23 100e78f53d1SNikolas Klauser 101e78f53d1SNikolas Klausertemplate <class T, class Container> 102e78f53d1SNikolas Klauser bool operator==(const queue<T, Container>& x,const queue<T, Container>& y); 103e78f53d1SNikolas Klauser 104e78f53d1SNikolas Klausertemplate <class T, class Container> 105e78f53d1SNikolas Klauser bool operator< (const queue<T, Container>& x,const queue<T, Container>& y); 106e78f53d1SNikolas Klauser 107e78f53d1SNikolas Klausertemplate <class T, class Container> 108e78f53d1SNikolas Klauser bool operator!=(const queue<T, Container>& x,const queue<T, Container>& y); 109e78f53d1SNikolas Klauser 110e78f53d1SNikolas Klausertemplate <class T, class Container> 111e78f53d1SNikolas Klauser bool operator> (const queue<T, Container>& x,const queue<T, Container>& y); 112e78f53d1SNikolas Klauser 113e78f53d1SNikolas Klausertemplate <class T, class Container> 114e78f53d1SNikolas Klauser bool operator>=(const queue<T, Container>& x,const queue<T, Container>& y); 115e78f53d1SNikolas Klauser 116e78f53d1SNikolas Klausertemplate <class T, class Container> 117e78f53d1SNikolas Klauser bool operator<=(const queue<T, Container>& x,const queue<T, Container>& y); 118e78f53d1SNikolas Klauser 119e78f53d1SNikolas Klausertemplate<class T, three_way_comparable Container> 120e78f53d1SNikolas Klauser compare_three_way_result_t<Container> 121e78f53d1SNikolas Klauser operator<=>(const queue<T, Container>& x, const queue<T, Container>& y); // since C++20 122e78f53d1SNikolas Klauser 123e78f53d1SNikolas Klausertemplate <class T, class Container> 124e78f53d1SNikolas Klauser void swap(queue<T, Container>& x, queue<T, Container>& y) 125e78f53d1SNikolas Klauser noexcept(noexcept(x.swap(y))); 126e78f53d1SNikolas Klauser 127e78f53d1SNikolas Klausertemplate <class T, class Container = vector<T>, 128e78f53d1SNikolas Klauser class Compare = less<typename Container::value_type>> 129e78f53d1SNikolas Klauserclass priority_queue 130e78f53d1SNikolas Klauser{ 131e78f53d1SNikolas Klauserpublic: 132e78f53d1SNikolas Klauser typedef Container container_type; 133e78f53d1SNikolas Klauser typedef typename container_type::value_type value_type; 134e78f53d1SNikolas Klauser typedef typename container_type::reference reference; 135e78f53d1SNikolas Klauser typedef typename container_type::const_reference const_reference; 136e78f53d1SNikolas Klauser typedef typename container_type::size_type size_type; 137e78f53d1SNikolas Klauser 138e78f53d1SNikolas Klauserprotected: 139e78f53d1SNikolas Klauser container_type c; 140e78f53d1SNikolas Klauser Compare comp; 141e78f53d1SNikolas Klauser 142e78f53d1SNikolas Klauserpublic: 143e78f53d1SNikolas Klauser priority_queue() : priority_queue(Compare()) {} // C++20 144e78f53d1SNikolas Klauser explicit priority_queue(const Compare& x) : priority_queue(x, Container()) {} 145e78f53d1SNikolas Klauser priority_queue(const Compare& x, const Container&); 146e78f53d1SNikolas Klauser explicit priority_queue(const Compare& x = Compare(), Container&& = Container()); // before C++20 147e78f53d1SNikolas Klauser priority_queue(const Compare& x, Container&&); // C++20 148e78f53d1SNikolas Klauser template <class InputIterator> 149e78f53d1SNikolas Klauser priority_queue(InputIterator first, InputIterator last, 150e78f53d1SNikolas Klauser const Compare& comp = Compare()); 151e78f53d1SNikolas Klauser template <class InputIterator> 152e78f53d1SNikolas Klauser priority_queue(InputIterator first, InputIterator last, 153e78f53d1SNikolas Klauser const Compare& comp, const Container& c); 154e78f53d1SNikolas Klauser template <class InputIterator> 155e78f53d1SNikolas Klauser priority_queue(InputIterator first, InputIterator last, 156e78f53d1SNikolas Klauser const Compare& comp, Container&& c); 157e78f53d1SNikolas Klauser template <container-compatible-range<T> R> 158e78f53d1SNikolas Klauser priority_queue(from_range_t, R&& rg, const Compare& x = Compare()); // since C++23 159e78f53d1SNikolas Klauser template <class Alloc> 160e78f53d1SNikolas Klauser explicit priority_queue(const Alloc& a); 161e78f53d1SNikolas Klauser template <class Alloc> 162e78f53d1SNikolas Klauser priority_queue(const Compare& comp, const Alloc& a); 163e78f53d1SNikolas Klauser template <class Alloc> 164e78f53d1SNikolas Klauser priority_queue(const Compare& comp, const Container& c, 165e78f53d1SNikolas Klauser const Alloc& a); 166e78f53d1SNikolas Klauser template <class Alloc> 167e78f53d1SNikolas Klauser priority_queue(const Compare& comp, Container&& c, 168e78f53d1SNikolas Klauser const Alloc& a); 169e78f53d1SNikolas Klauser template <class InputIterator> 170e78f53d1SNikolas Klauser priority_queue(InputIterator first, InputIterator last, 171e78f53d1SNikolas Klauser const Alloc& a); 172e78f53d1SNikolas Klauser template <class InputIterator> 173e78f53d1SNikolas Klauser priority_queue(InputIterator first, InputIterator last, 174e78f53d1SNikolas Klauser const Compare& comp, const Alloc& a); 175e78f53d1SNikolas Klauser template <class InputIterator> 176e78f53d1SNikolas Klauser priority_queue(InputIterator first, InputIterator last, 177e78f53d1SNikolas Klauser const Compare& comp, const Container& c, const Alloc& a); 178e78f53d1SNikolas Klauser template <class InputIterator> 179e78f53d1SNikolas Klauser priority_queue(InputIterator first, InputIterator last, 180e78f53d1SNikolas Klauser const Compare& comp, Container&& c, const Alloc& a); 181e78f53d1SNikolas Klauser template <container-compatible-range<T> R, class Alloc> 182e78f53d1SNikolas Klauser priority_queue(from_range_t, R&& rg, const Compare&, const Alloc&); // since C++23 183e78f53d1SNikolas Klauser template <container-compatible-range<T> R, class Alloc> 184e78f53d1SNikolas Klauser priority_queue(from_range_t, R&& rg, const Alloc&); // since C++23 185e78f53d1SNikolas Klauser template <class Alloc> 186e78f53d1SNikolas Klauser priority_queue(const priority_queue& q, const Alloc& a); 187e78f53d1SNikolas Klauser template <class Alloc> 188e78f53d1SNikolas Klauser priority_queue(priority_queue&& q, const Alloc& a); 189e78f53d1SNikolas Klauser 190e78f53d1SNikolas Klauser bool empty() const; 191e78f53d1SNikolas Klauser size_type size() const; 192e78f53d1SNikolas Klauser const_reference top() const; 193e78f53d1SNikolas Klauser 194e78f53d1SNikolas Klauser void push(const value_type& v); 195e78f53d1SNikolas Klauser void push(value_type&& v); 196e78f53d1SNikolas Klauser template<container-compatible-range<T> R> 197e78f53d1SNikolas Klauser void push_range(R&& rg); // C++23 198e78f53d1SNikolas Klauser template <class... Args> void emplace(Args&&... args); 199e78f53d1SNikolas Klauser void pop(); 200e78f53d1SNikolas Klauser 201e78f53d1SNikolas Klauser void swap(priority_queue& q) 202e78f53d1SNikolas Klauser noexcept(is_nothrow_swappable_v<Container> && 203e78f53d1SNikolas Klauser is_nothrow_swappable_v<Comp>) 204e78f53d1SNikolas Klauser}; 205e78f53d1SNikolas Klauser 206e78f53d1SNikolas Klausertemplate <class Compare, class Container> 207e78f53d1SNikolas Klauserpriority_queue(Compare, Container) 208e78f53d1SNikolas Klauser -> priority_queue<typename Container::value_type, Container, Compare>; // C++17 209e78f53d1SNikolas Klauser 210e78f53d1SNikolas Klausertemplate<class InputIterator, 211e78f53d1SNikolas Klauser class Compare = less<iter-value-type<InputIterator>>, 212e78f53d1SNikolas Klauser class Container = vector<iter-value-type<InputIterator>>> 213e78f53d1SNikolas Klauserpriority_queue(InputIterator, InputIterator, Compare = Compare(), Container = Container()) 214e78f53d1SNikolas Klauser -> priority_queue<iter-value-type<InputIterator>, Container, Compare>; // C++17 215e78f53d1SNikolas Klauser 216e78f53d1SNikolas Klausertemplate<ranges::input_range R, class Compare = less<ranges::range_value_t<R>>> 217e78f53d1SNikolas Klauser priority_queue(from_range_t, R&&, Compare = Compare()) 218e78f53d1SNikolas Klauser -> priority_queue<ranges::range_value_t<R>, vector<ranges::range_value_t<R>>, Compare>; // C++23 219e78f53d1SNikolas Klauser 220e78f53d1SNikolas Klausertemplate<class Compare, class Container, class Allocator> 221e78f53d1SNikolas Klauserpriority_queue(Compare, Container, Allocator) 222e78f53d1SNikolas Klauser -> priority_queue<typename Container::value_type, Container, Compare>; // C++17 223e78f53d1SNikolas Klauser 224e78f53d1SNikolas Klausertemplate<class InputIterator, class Allocator> 225e78f53d1SNikolas Klauserpriority_queue(InputIterator, InputIterator, Allocator) 226e78f53d1SNikolas Klauser -> priority_queue<iter-value-type<InputIterator>, 227e78f53d1SNikolas Klauser vector<iter-value-type<InputIterator>, Allocator>, 228e78f53d1SNikolas Klauser less<iter-value-type<InputIterator>>>; // C++17 229e78f53d1SNikolas Klauser 230e78f53d1SNikolas Klausertemplate<class InputIterator, class Compare, class Allocator> 231e78f53d1SNikolas Klauserpriority_queue(InputIterator, InputIterator, Compare, Allocator) 232e78f53d1SNikolas Klauser -> priority_queue<iter-value-type<InputIterator>, 233e78f53d1SNikolas Klauser vector<iter-value-type<InputIterator>, Allocator>, Compare>; // C++17 234e78f53d1SNikolas Klauser 235e78f53d1SNikolas Klausertemplate<class InputIterator, class Compare, class Container, class Allocator> 236e78f53d1SNikolas Klauserpriority_queue(InputIterator, InputIterator, Compare, Container, Allocator) 237e78f53d1SNikolas Klauser -> priority_queue<typename Container::value_type, Container, Compare>; // C++17 238e78f53d1SNikolas Klauser 239e78f53d1SNikolas Klausertemplate<ranges::input_range R, class Compare, class Allocator> 240e78f53d1SNikolas Klauser priority_queue(from_range_t, R&&, Compare, Allocator) 241e78f53d1SNikolas Klauser -> priority_queue<ranges::range_value_t<R>, vector<ranges::range_value_t<R>, Allocator>, 242e78f53d1SNikolas Klauser Compare>; // C++23 243e78f53d1SNikolas Klauser 244e78f53d1SNikolas Klausertemplate<ranges::input_range R, class Allocator> 245e78f53d1SNikolas Klauser priority_queue(from_range_t, R&&, Allocator) 246e78f53d1SNikolas Klauser -> priority_queue<ranges::range_value_t<R>, vector<ranges::range_value_t<R>, Allocator>>; // C++23 247e78f53d1SNikolas Klauser 248e78f53d1SNikolas Klausertemplate <class T, class Container, class Compare> 249e78f53d1SNikolas Klauser void swap(priority_queue<T, Container, Compare>& x, 250e78f53d1SNikolas Klauser priority_queue<T, Container, Compare>& y) 251e78f53d1SNikolas Klauser noexcept(noexcept(x.swap(y))); 252e78f53d1SNikolas Klauser 253e78f53d1SNikolas Klauser} // std 254e78f53d1SNikolas Klauser 255e78f53d1SNikolas Klauser*/ 256e78f53d1SNikolas Klauser 25773fbae83SNikolas Klauser#include <__cxx03/__algorithm/make_heap.h> 25873fbae83SNikolas Klauser#include <__cxx03/__algorithm/pop_heap.h> 25973fbae83SNikolas Klauser#include <__cxx03/__algorithm/push_heap.h> 26073fbae83SNikolas Klauser#include <__cxx03/__algorithm/ranges_copy.h> 26173fbae83SNikolas Klauser#include <__cxx03/__config> 26273fbae83SNikolas Klauser#include <__cxx03/__functional/operations.h> 26373fbae83SNikolas Klauser#include <__cxx03/__fwd/deque.h> 26473fbae83SNikolas Klauser#include <__cxx03/__fwd/queue.h> 26573fbae83SNikolas Klauser#include <__cxx03/__iterator/back_insert_iterator.h> 26673fbae83SNikolas Klauser#include <__cxx03/__iterator/iterator_traits.h> 26773fbae83SNikolas Klauser#include <__cxx03/__memory/uses_allocator.h> 26873fbae83SNikolas Klauser#include <__cxx03/__ranges/access.h> 26973fbae83SNikolas Klauser#include <__cxx03/__ranges/concepts.h> 27073fbae83SNikolas Klauser#include <__cxx03/__ranges/container_compatible_range.h> 27173fbae83SNikolas Klauser#include <__cxx03/__ranges/from_range.h> 27273fbae83SNikolas Klauser#include <__cxx03/__utility/forward.h> 27373fbae83SNikolas Klauser#include <__cxx03/deque> 27473fbae83SNikolas Klauser#include <__cxx03/vector> 27573fbae83SNikolas Klauser#include <__cxx03/version> 276e78f53d1SNikolas Klauser 277e78f53d1SNikolas Klauser// standard-mandated includes 278e78f53d1SNikolas Klauser 279e78f53d1SNikolas Klauser// [queue.syn] 28073fbae83SNikolas Klauser#include <__cxx03/compare> 28173fbae83SNikolas Klauser#include <__cxx03/initializer_list> 282e78f53d1SNikolas Klauser 283e78f53d1SNikolas Klauser#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 284e78f53d1SNikolas Klauser# pragma GCC system_header 285e78f53d1SNikolas Klauser#endif 286e78f53d1SNikolas Klauser 287e78f53d1SNikolas Klauser_LIBCPP_PUSH_MACROS 28873fbae83SNikolas Klauser#include <__cxx03/__undef_macros> 289e78f53d1SNikolas Klauser 290e78f53d1SNikolas Klauser_LIBCPP_BEGIN_NAMESPACE_STD 291e78f53d1SNikolas Klauser 292e78f53d1SNikolas Klausertemplate <class _Tp, class _Container> 293e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI bool operator==(const queue<_Tp, _Container>& __x, const queue<_Tp, _Container>& __y); 294e78f53d1SNikolas Klauser 295e78f53d1SNikolas Klausertemplate <class _Tp, class _Container> 296e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI bool operator<(const queue<_Tp, _Container>& __x, const queue<_Tp, _Container>& __y); 297e78f53d1SNikolas Klauser 298e78f53d1SNikolas Klausertemplate <class _Tp, class _Container /*= deque<_Tp>*/> 299e78f53d1SNikolas Klauserclass _LIBCPP_TEMPLATE_VIS queue { 300e78f53d1SNikolas Klauserpublic: 301e78f53d1SNikolas Klauser typedef _Container container_type; 302e78f53d1SNikolas Klauser typedef typename container_type::value_type value_type; 303e78f53d1SNikolas Klauser typedef typename container_type::reference reference; 304e78f53d1SNikolas Klauser typedef typename container_type::const_reference const_reference; 305e78f53d1SNikolas Klauser typedef typename container_type::size_type size_type; 306e78f53d1SNikolas Klauser static_assert(is_same<_Tp, value_type>::value, ""); 307e78f53d1SNikolas Klauser 308e78f53d1SNikolas Klauserprotected: 309e78f53d1SNikolas Klauser container_type c; 310e78f53d1SNikolas Klauser 311e78f53d1SNikolas Klauserpublic: 312e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI queue() _NOEXCEPT_(is_nothrow_default_constructible<container_type>::value) : c() {} 313e78f53d1SNikolas Klauser 314e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI queue(const queue& __q) : c(__q.c) {} 315e78f53d1SNikolas Klauser 316e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER >= 23 317e78f53d1SNikolas Klauser template <class _InputIterator, __enable_if_t<__has_input_iterator_category<_InputIterator>::value, int> = 0> 318e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI queue(_InputIterator __first, _InputIterator __last) : c(__first, __last) {} 319e78f53d1SNikolas Klauser 320e78f53d1SNikolas Klauser template <_ContainerCompatibleRange<_Tp> _Range> 321e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI queue(from_range_t, _Range&& __range) : c(from_range, std::forward<_Range>(__range)) {} 322e78f53d1SNikolas Klauser 323e78f53d1SNikolas Klauser template <class _InputIterator, 324e78f53d1SNikolas Klauser class _Alloc, 325e78f53d1SNikolas Klauser __enable_if_t<__has_input_iterator_category<_InputIterator>::value, int> = 0, 326e78f53d1SNikolas Klauser __enable_if_t<uses_allocator<container_type, _Alloc>::value, int> = 0> 327e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI queue(_InputIterator __first, _InputIterator __second, const _Alloc& __alloc) 328e78f53d1SNikolas Klauser : c(__first, __second, __alloc) {} 329e78f53d1SNikolas Klauser 330e78f53d1SNikolas Klauser template <_ContainerCompatibleRange<_Tp> _Range, 331e78f53d1SNikolas Klauser class _Alloc, 332e78f53d1SNikolas Klauser __enable_if_t<uses_allocator<container_type, _Alloc>::value, int> = 0> 333e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI queue(from_range_t, _Range&& __range, const _Alloc& __alloc) 334e78f53d1SNikolas Klauser : c(from_range, std::forward<_Range>(__range), __alloc) {} 335e78f53d1SNikolas Klauser 336e78f53d1SNikolas Klauser#endif 337e78f53d1SNikolas Klauser 338e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI queue& operator=(const queue& __q) { 339e78f53d1SNikolas Klauser c = __q.c; 340e78f53d1SNikolas Klauser return *this; 341e78f53d1SNikolas Klauser } 342e78f53d1SNikolas Klauser 343e78f53d1SNikolas Klauser#ifndef _LIBCPP_CXX03_LANG 344e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI queue(queue&& __q) noexcept(is_nothrow_move_constructible<container_type>::value) 345e78f53d1SNikolas Klauser : c(std::move(__q.c)) {} 346e78f53d1SNikolas Klauser 347e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI queue& operator=(queue&& __q) noexcept(is_nothrow_move_assignable<container_type>::value) { 348e78f53d1SNikolas Klauser c = std::move(__q.c); 349e78f53d1SNikolas Klauser return *this; 350e78f53d1SNikolas Klauser } 351e78f53d1SNikolas Klauser#endif // _LIBCPP_CXX03_LANG 352e78f53d1SNikolas Klauser 353e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit queue(const container_type& __c) : c(__c) {} 354e78f53d1SNikolas Klauser#ifndef _LIBCPP_CXX03_LANG 355e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit queue(container_type&& __c) : c(std::move(__c)) {} 356e78f53d1SNikolas Klauser#endif // _LIBCPP_CXX03_LANG 357e78f53d1SNikolas Klauser 358e78f53d1SNikolas Klauser template <class _Alloc, __enable_if_t<uses_allocator<container_type, _Alloc>::value, int> = 0> 359e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit queue(const _Alloc& __a) : c(__a) {} 360e78f53d1SNikolas Klauser 361e78f53d1SNikolas Klauser template <class _Alloc, __enable_if_t<uses_allocator<container_type, _Alloc>::value, int> = 0> 362e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI queue(const queue& __q, const _Alloc& __a) : c(__q.c, __a) {} 363e78f53d1SNikolas Klauser 364e78f53d1SNikolas Klauser template <class _Alloc, __enable_if_t<uses_allocator<container_type, _Alloc>::value, int> = 0> 365e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI queue(const container_type& __c, const _Alloc& __a) : c(__c, __a) {} 366e78f53d1SNikolas Klauser 367e78f53d1SNikolas Klauser#ifndef _LIBCPP_CXX03_LANG 368e78f53d1SNikolas Klauser template <class _Alloc, __enable_if_t<uses_allocator<container_type, _Alloc>::value, int> = 0> 369e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI queue(container_type&& __c, const _Alloc& __a) : c(std::move(__c), __a) {} 370e78f53d1SNikolas Klauser 371e78f53d1SNikolas Klauser template <class _Alloc, __enable_if_t<uses_allocator<container_type, _Alloc>::value, int> = 0> 372e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI queue(queue&& __q, const _Alloc& __a) : c(std::move(__q.c), __a) {} 373e78f53d1SNikolas Klauser#endif // _LIBCPP_CXX03_LANG 374e78f53d1SNikolas Klauser 375e78f53d1SNikolas Klauser _LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI bool empty() const { return c.empty(); } 376e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI size_type size() const { return c.size(); } 377e78f53d1SNikolas Klauser 378e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI reference front() { return c.front(); } 379e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI const_reference front() const { return c.front(); } 380e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI reference back() { return c.back(); } 381e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI const_reference back() const { return c.back(); } 382e78f53d1SNikolas Klauser 383e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void push(const value_type& __v) { c.push_back(__v); } 384e78f53d1SNikolas Klauser#ifndef _LIBCPP_CXX03_LANG 385e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void push(value_type&& __v) { c.push_back(std::move(__v)); } 386e78f53d1SNikolas Klauser 387e78f53d1SNikolas Klauser# if _LIBCPP_STD_VER >= 23 388e78f53d1SNikolas Klauser template <_ContainerCompatibleRange<_Tp> _Range> 389e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void push_range(_Range&& __range) { 390e78f53d1SNikolas Klauser if constexpr (requires(container_type& __c) { __c.append_range(std::forward<_Range>(__range)); }) { 391e78f53d1SNikolas Klauser c.append_range(std::forward<_Range>(__range)); 392e78f53d1SNikolas Klauser } else { 393e78f53d1SNikolas Klauser ranges::copy(std::forward<_Range>(__range), std::back_inserter(c)); 394e78f53d1SNikolas Klauser } 395e78f53d1SNikolas Klauser } 396e78f53d1SNikolas Klauser# endif 397e78f53d1SNikolas Klauser 398e78f53d1SNikolas Klauser template <class... _Args> 399e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI 400e78f53d1SNikolas Klauser# if _LIBCPP_STD_VER >= 17 401e78f53d1SNikolas Klauser decltype(auto) 402e78f53d1SNikolas Klauser emplace(_Args&&... __args) { 403e78f53d1SNikolas Klauser return c.emplace_back(std::forward<_Args>(__args)...); 404e78f53d1SNikolas Klauser } 405e78f53d1SNikolas Klauser# else 406e78f53d1SNikolas Klauser void 407e78f53d1SNikolas Klauser emplace(_Args&&... __args) { 408e78f53d1SNikolas Klauser c.emplace_back(std::forward<_Args>(__args)...); 409e78f53d1SNikolas Klauser } 410e78f53d1SNikolas Klauser# endif 411e78f53d1SNikolas Klauser#endif // _LIBCPP_CXX03_LANG 412e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void pop() { c.pop_front(); } 413e78f53d1SNikolas Klauser 414e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void swap(queue& __q) _NOEXCEPT_(__is_nothrow_swappable_v<container_type>) { 415e78f53d1SNikolas Klauser using std::swap; 416e78f53d1SNikolas Klauser swap(c, __q.c); 417e78f53d1SNikolas Klauser } 418e78f53d1SNikolas Klauser 419e78f53d1SNikolas Klauser _LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI const _Container& __get_container() const { return c; } 420e78f53d1SNikolas Klauser 421e78f53d1SNikolas Klauser template <class _T1, class _OtherContainer> 422e78f53d1SNikolas Klauser friend _LIBCPP_HIDE_FROM_ABI bool 423e78f53d1SNikolas Klauser operator==(const queue<_T1, _OtherContainer>& __x, const queue<_T1, _OtherContainer>& __y); 424e78f53d1SNikolas Klauser 425e78f53d1SNikolas Klauser template <class _T1, class _OtherContainer> 426e78f53d1SNikolas Klauser friend _LIBCPP_HIDE_FROM_ABI bool 427e78f53d1SNikolas Klauser operator<(const queue<_T1, _OtherContainer>& __x, const queue<_T1, _OtherContainer>& __y); 428e78f53d1SNikolas Klauser}; 429e78f53d1SNikolas Klauser 430e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER >= 17 431e78f53d1SNikolas Klausertemplate <class _Container, class = enable_if_t<!__is_allocator<_Container>::value> > 432e78f53d1SNikolas Klauserqueue(_Container) -> queue<typename _Container::value_type, _Container>; 433e78f53d1SNikolas Klauser 434e78f53d1SNikolas Klausertemplate <class _Container, 435e78f53d1SNikolas Klauser class _Alloc, 436e78f53d1SNikolas Klauser class = enable_if_t<!__is_allocator<_Container>::value>, 437e78f53d1SNikolas Klauser class = enable_if_t<uses_allocator<_Container, _Alloc>::value> > 438e78f53d1SNikolas Klauserqueue(_Container, _Alloc) -> queue<typename _Container::value_type, _Container>; 439e78f53d1SNikolas Klauser#endif 440e78f53d1SNikolas Klauser 441e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER >= 23 442e78f53d1SNikolas Klausertemplate <class _InputIterator, __enable_if_t<__has_input_iterator_category<_InputIterator>::value, int> = 0> 443e78f53d1SNikolas Klauserqueue(_InputIterator, _InputIterator) -> queue<__iter_value_type<_InputIterator>>; 444e78f53d1SNikolas Klauser 445e78f53d1SNikolas Klausertemplate <ranges::input_range _Range> 446e78f53d1SNikolas Klauserqueue(from_range_t, _Range&&) -> queue<ranges::range_value_t<_Range>>; 447e78f53d1SNikolas Klauser 448e78f53d1SNikolas Klausertemplate <class _InputIterator, 449e78f53d1SNikolas Klauser class _Alloc, 450e78f53d1SNikolas Klauser __enable_if_t<__has_input_iterator_category<_InputIterator>::value, int> = 0, 451e78f53d1SNikolas Klauser __enable_if_t<__is_allocator<_Alloc>::value, int> = 0> 452e78f53d1SNikolas Klauserqueue(_InputIterator, 453e78f53d1SNikolas Klauser _InputIterator, 454e78f53d1SNikolas Klauser _Alloc) -> queue<__iter_value_type<_InputIterator>, deque<__iter_value_type<_InputIterator>, _Alloc>>; 455e78f53d1SNikolas Klauser 456e78f53d1SNikolas Klausertemplate <ranges::input_range _Range, class _Alloc, __enable_if_t<__is_allocator<_Alloc>::value, int> = 0> 457e78f53d1SNikolas Klauserqueue(from_range_t, 458e78f53d1SNikolas Klauser _Range&&, 459e78f53d1SNikolas Klauser _Alloc) -> queue<ranges::range_value_t<_Range>, deque<ranges::range_value_t<_Range>, _Alloc>>; 460e78f53d1SNikolas Klauser#endif 461e78f53d1SNikolas Klauser 462e78f53d1SNikolas Klausertemplate <class _Tp, class _Container> 463e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI bool operator==(const queue<_Tp, _Container>& __x, const queue<_Tp, _Container>& __y) { 464e78f53d1SNikolas Klauser return __x.c == __y.c; 465e78f53d1SNikolas Klauser} 466e78f53d1SNikolas Klauser 467e78f53d1SNikolas Klausertemplate <class _Tp, class _Container> 468e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI bool operator<(const queue<_Tp, _Container>& __x, const queue<_Tp, _Container>& __y) { 469e78f53d1SNikolas Klauser return __x.c < __y.c; 470e78f53d1SNikolas Klauser} 471e78f53d1SNikolas Klauser 472e78f53d1SNikolas Klausertemplate <class _Tp, class _Container> 473e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI bool operator!=(const queue<_Tp, _Container>& __x, const queue<_Tp, _Container>& __y) { 474e78f53d1SNikolas Klauser return !(__x == __y); 475e78f53d1SNikolas Klauser} 476e78f53d1SNikolas Klauser 477e78f53d1SNikolas Klausertemplate <class _Tp, class _Container> 478e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI bool operator>(const queue<_Tp, _Container>& __x, const queue<_Tp, _Container>& __y) { 479e78f53d1SNikolas Klauser return __y < __x; 480e78f53d1SNikolas Klauser} 481e78f53d1SNikolas Klauser 482e78f53d1SNikolas Klausertemplate <class _Tp, class _Container> 483e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI bool operator>=(const queue<_Tp, _Container>& __x, const queue<_Tp, _Container>& __y) { 484e78f53d1SNikolas Klauser return !(__x < __y); 485e78f53d1SNikolas Klauser} 486e78f53d1SNikolas Klauser 487e78f53d1SNikolas Klausertemplate <class _Tp, class _Container> 488e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI bool operator<=(const queue<_Tp, _Container>& __x, const queue<_Tp, _Container>& __y) { 489e78f53d1SNikolas Klauser return !(__y < __x); 490e78f53d1SNikolas Klauser} 491e78f53d1SNikolas Klauser 492e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER >= 20 493e78f53d1SNikolas Klauser 494e78f53d1SNikolas Klausertemplate <class _Tp, three_way_comparable _Container> 495e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI compare_three_way_result_t<_Container> 496e78f53d1SNikolas Klauseroperator<=>(const queue<_Tp, _Container>& __x, const queue<_Tp, _Container>& __y) { 497e78f53d1SNikolas Klauser // clang 16 bug: declaring `friend operator<=>` causes "use of overloaded operator '*' is ambiguous" errors 498e78f53d1SNikolas Klauser return __x.__get_container() <=> __y.__get_container(); 499e78f53d1SNikolas Klauser} 500e78f53d1SNikolas Klauser 501e78f53d1SNikolas Klauser#endif 502e78f53d1SNikolas Klauser 503e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, __enable_if_t<__is_swappable_v<_Container>, int> = 0> 504e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI void swap(queue<_Tp, _Container>& __x, queue<_Tp, _Container>& __y) 505e78f53d1SNikolas Klauser _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y))) { 506e78f53d1SNikolas Klauser __x.swap(__y); 507e78f53d1SNikolas Klauser} 508e78f53d1SNikolas Klauser 509e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Alloc> 510e78f53d1SNikolas Klauserstruct _LIBCPP_TEMPLATE_VIS uses_allocator<queue<_Tp, _Container>, _Alloc> : public uses_allocator<_Container, _Alloc> { 511e78f53d1SNikolas Klauser}; 512e78f53d1SNikolas Klauser 513e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 514e78f53d1SNikolas Klauserclass _LIBCPP_TEMPLATE_VIS priority_queue { 515e78f53d1SNikolas Klauserpublic: 516e78f53d1SNikolas Klauser typedef _Container container_type; 517e78f53d1SNikolas Klauser typedef _Compare value_compare; 518e78f53d1SNikolas Klauser typedef typename container_type::value_type value_type; 519e78f53d1SNikolas Klauser typedef typename container_type::reference reference; 520e78f53d1SNikolas Klauser typedef typename container_type::const_reference const_reference; 521e78f53d1SNikolas Klauser typedef typename container_type::size_type size_type; 522e78f53d1SNikolas Klauser static_assert(is_same<_Tp, value_type>::value, ""); 523e78f53d1SNikolas Klauser 524e78f53d1SNikolas Klauserprotected: 525e78f53d1SNikolas Klauser container_type c; 526e78f53d1SNikolas Klauser value_compare comp; 527e78f53d1SNikolas Klauser 528e78f53d1SNikolas Klauserpublic: 529e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue() _NOEXCEPT_( 530e78f53d1SNikolas Klauser is_nothrow_default_constructible<container_type>::value&& is_nothrow_default_constructible<value_compare>::value) 531e78f53d1SNikolas Klauser : c(), comp() {} 532e78f53d1SNikolas Klauser 533e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue(const priority_queue& __q) : c(__q.c), comp(__q.comp) {} 534e78f53d1SNikolas Klauser 535e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue& operator=(const priority_queue& __q) { 536e78f53d1SNikolas Klauser c = __q.c; 537e78f53d1SNikolas Klauser comp = __q.comp; 538e78f53d1SNikolas Klauser return *this; 539e78f53d1SNikolas Klauser } 540e78f53d1SNikolas Klauser 541e78f53d1SNikolas Klauser#ifndef _LIBCPP_CXX03_LANG 542e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue(priority_queue&& __q) noexcept( 543e78f53d1SNikolas Klauser is_nothrow_move_constructible<container_type>::value && is_nothrow_move_constructible<value_compare>::value) 544e78f53d1SNikolas Klauser : c(std::move(__q.c)), comp(std::move(__q.comp)) {} 545e78f53d1SNikolas Klauser 546e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue& operator=(priority_queue&& __q) noexcept( 547e78f53d1SNikolas Klauser is_nothrow_move_assignable<container_type>::value && is_nothrow_move_assignable<value_compare>::value) { 548e78f53d1SNikolas Klauser c = std::move(__q.c); 549e78f53d1SNikolas Klauser comp = std::move(__q.comp); 550e78f53d1SNikolas Klauser return *this; 551e78f53d1SNikolas Klauser } 552e78f53d1SNikolas Klauser#endif // _LIBCPP_CXX03_LANG 553e78f53d1SNikolas Klauser 554e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit priority_queue(const value_compare& __comp) : c(), comp(__comp) {} 555e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue(const value_compare& __comp, const container_type& __c); 556e78f53d1SNikolas Klauser#ifndef _LIBCPP_CXX03_LANG 557e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue(const value_compare& __comp, container_type&& __c); 558e78f53d1SNikolas Klauser#endif 559e78f53d1SNikolas Klauser template <class _InputIter, __enable_if_t<__has_input_iterator_category<_InputIter>::value, int> = 0> 560e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue(_InputIter __f, _InputIter __l, const value_compare& __comp = value_compare()); 561e78f53d1SNikolas Klauser 562e78f53d1SNikolas Klauser template <class _InputIter, __enable_if_t<__has_input_iterator_category<_InputIter>::value, int> = 0> 563e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI 564e78f53d1SNikolas Klauser priority_queue(_InputIter __f, _InputIter __l, const value_compare& __comp, const container_type& __c); 565e78f53d1SNikolas Klauser 566e78f53d1SNikolas Klauser#ifndef _LIBCPP_CXX03_LANG 567e78f53d1SNikolas Klauser template <class _InputIter, __enable_if_t<__has_input_iterator_category<_InputIter>::value, int> = 0> 568e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI 569e78f53d1SNikolas Klauser priority_queue(_InputIter __f, _InputIter __l, const value_compare& __comp, container_type&& __c); 570e78f53d1SNikolas Klauser#endif // _LIBCPP_CXX03_LANG 571e78f53d1SNikolas Klauser 572e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER >= 23 573e78f53d1SNikolas Klauser template <_ContainerCompatibleRange<_Tp> _Range> 574e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue(from_range_t, _Range&& __range, const value_compare& __comp = value_compare()) 575e78f53d1SNikolas Klauser : c(from_range, std::forward<_Range>(__range)), comp(__comp) { 576e78f53d1SNikolas Klauser std::make_heap(c.begin(), c.end(), comp); 577e78f53d1SNikolas Klauser } 578e78f53d1SNikolas Klauser#endif 579e78f53d1SNikolas Klauser 580e78f53d1SNikolas Klauser template <class _Alloc, __enable_if_t<uses_allocator<container_type, _Alloc>::value, int> = 0> 581e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI explicit priority_queue(const _Alloc& __a); 582e78f53d1SNikolas Klauser 583e78f53d1SNikolas Klauser template <class _Alloc, __enable_if_t<uses_allocator<container_type, _Alloc>::value, int> = 0> 584e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue(const value_compare& __comp, const _Alloc& __a); 585e78f53d1SNikolas Klauser 586e78f53d1SNikolas Klauser template <class _Alloc, __enable_if_t<uses_allocator<container_type, _Alloc>::value, int> = 0> 587e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue(const value_compare& __comp, const container_type& __c, const _Alloc& __a); 588e78f53d1SNikolas Klauser 589e78f53d1SNikolas Klauser template <class _Alloc, __enable_if_t<uses_allocator<container_type, _Alloc>::value, int> = 0> 590e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue(const priority_queue& __q, const _Alloc& __a); 591e78f53d1SNikolas Klauser 592e78f53d1SNikolas Klauser#ifndef _LIBCPP_CXX03_LANG 593e78f53d1SNikolas Klauser template <class _Alloc, __enable_if_t<uses_allocator<container_type, _Alloc>::value, int> = 0> 594e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue(const value_compare& __comp, container_type&& __c, const _Alloc& __a); 595e78f53d1SNikolas Klauser 596e78f53d1SNikolas Klauser template <class _Alloc, __enable_if_t<uses_allocator<container_type, _Alloc>::value, int> = 0> 597e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue(priority_queue&& __q, const _Alloc& __a); 598e78f53d1SNikolas Klauser#endif // _LIBCPP_CXX03_LANG 599e78f53d1SNikolas Klauser 600e78f53d1SNikolas Klauser template < 601e78f53d1SNikolas Klauser class _InputIter, 602e78f53d1SNikolas Klauser class _Alloc, 603e78f53d1SNikolas Klauser __enable_if_t<__has_input_iterator_category<_InputIter>::value && uses_allocator<container_type, _Alloc>::value, 604e78f53d1SNikolas Klauser int> = 0> 605e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue(_InputIter __f, _InputIter __l, const _Alloc& __a); 606e78f53d1SNikolas Klauser 607e78f53d1SNikolas Klauser template < 608e78f53d1SNikolas Klauser class _InputIter, 609e78f53d1SNikolas Klauser class _Alloc, 610e78f53d1SNikolas Klauser __enable_if_t<__has_input_iterator_category<_InputIter>::value && uses_allocator<container_type, _Alloc>::value, 611e78f53d1SNikolas Klauser int> = 0> 612e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue(_InputIter __f, _InputIter __l, const value_compare& __comp, const _Alloc& __a); 613e78f53d1SNikolas Klauser 614e78f53d1SNikolas Klauser template < 615e78f53d1SNikolas Klauser class _InputIter, 616e78f53d1SNikolas Klauser class _Alloc, 617e78f53d1SNikolas Klauser __enable_if_t<__has_input_iterator_category<_InputIter>::value && uses_allocator<container_type, _Alloc>::value, 618e78f53d1SNikolas Klauser int> = 0> 619e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue( 620e78f53d1SNikolas Klauser _InputIter __f, _InputIter __l, const value_compare& __comp, const container_type& __c, const _Alloc& __a); 621e78f53d1SNikolas Klauser 622e78f53d1SNikolas Klauser#ifndef _LIBCPP_CXX03_LANG 623e78f53d1SNikolas Klauser template < 624e78f53d1SNikolas Klauser class _InputIter, 625e78f53d1SNikolas Klauser class _Alloc, 626e78f53d1SNikolas Klauser __enable_if_t<__has_input_iterator_category<_InputIter>::value && uses_allocator<container_type, _Alloc>::value, 627e78f53d1SNikolas Klauser int> = 0> 628e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI 629e78f53d1SNikolas Klauser priority_queue(_InputIter __f, _InputIter __l, const value_compare& __comp, container_type&& __c, const _Alloc& __a); 630e78f53d1SNikolas Klauser#endif // _LIBCPP_CXX03_LANG 631e78f53d1SNikolas Klauser 632e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER >= 23 633e78f53d1SNikolas Klauser 634e78f53d1SNikolas Klauser template <_ContainerCompatibleRange<_Tp> _Range, 635e78f53d1SNikolas Klauser class _Alloc, 636e78f53d1SNikolas Klauser class = enable_if_t<uses_allocator<_Container, _Alloc>::value>> 637e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue(from_range_t, _Range&& __range, const value_compare& __comp, const _Alloc& __a) 638e78f53d1SNikolas Klauser : c(from_range, std::forward<_Range>(__range), __a), comp(__comp) { 639e78f53d1SNikolas Klauser std::make_heap(c.begin(), c.end(), comp); 640e78f53d1SNikolas Klauser } 641e78f53d1SNikolas Klauser 642e78f53d1SNikolas Klauser template <_ContainerCompatibleRange<_Tp> _Range, 643e78f53d1SNikolas Klauser class _Alloc, 644e78f53d1SNikolas Klauser class = enable_if_t<uses_allocator<_Container, _Alloc>::value>> 645e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI priority_queue(from_range_t, _Range&& __range, const _Alloc& __a) 646e78f53d1SNikolas Klauser : c(from_range, std::forward<_Range>(__range), __a), comp() { 647e78f53d1SNikolas Klauser std::make_heap(c.begin(), c.end(), comp); 648e78f53d1SNikolas Klauser } 649e78f53d1SNikolas Klauser 650e78f53d1SNikolas Klauser#endif 651e78f53d1SNikolas Klauser 652e78f53d1SNikolas Klauser _LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI bool empty() const { return c.empty(); } 653e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI size_type size() const { return c.size(); } 654e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI const_reference top() const { return c.front(); } 655e78f53d1SNikolas Klauser 656e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void push(const value_type& __v); 657e78f53d1SNikolas Klauser#ifndef _LIBCPP_CXX03_LANG 658e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void push(value_type&& __v); 659e78f53d1SNikolas Klauser 660e78f53d1SNikolas Klauser# if _LIBCPP_STD_VER >= 23 661e78f53d1SNikolas Klauser template <_ContainerCompatibleRange<_Tp> _Range> 662e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void push_range(_Range&& __range) { 663e78f53d1SNikolas Klauser if constexpr (requires(container_type& __c) { __c.append_range(std::forward<_Range>(__range)); }) { 664e78f53d1SNikolas Klauser c.append_range(std::forward<_Range>(__range)); 665e78f53d1SNikolas Klauser } else { 666e78f53d1SNikolas Klauser ranges::copy(std::forward<_Range>(__range), std::back_inserter(c)); 667e78f53d1SNikolas Klauser } 668e78f53d1SNikolas Klauser 669e78f53d1SNikolas Klauser std::make_heap(c.begin(), c.end(), comp); 670e78f53d1SNikolas Klauser } 671e78f53d1SNikolas Klauser# endif 672e78f53d1SNikolas Klauser 673e78f53d1SNikolas Klauser template <class... _Args> 674e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void emplace(_Args&&... __args); 675e78f53d1SNikolas Klauser#endif // _LIBCPP_CXX03_LANG 676e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void pop(); 677e78f53d1SNikolas Klauser 678e78f53d1SNikolas Klauser _LIBCPP_HIDE_FROM_ABI void swap(priority_queue& __q) 679e78f53d1SNikolas Klauser _NOEXCEPT_(__is_nothrow_swappable_v<container_type>&& __is_nothrow_swappable_v<value_compare>); 680e78f53d1SNikolas Klauser 681e78f53d1SNikolas Klauser _LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI const _Container& __get_container() const { return c; } 682e78f53d1SNikolas Klauser}; 683e78f53d1SNikolas Klauser 684e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER >= 17 685e78f53d1SNikolas Klausertemplate <class _Compare, 686e78f53d1SNikolas Klauser class _Container, 687e78f53d1SNikolas Klauser class = enable_if_t<!__is_allocator<_Compare>::value>, 688e78f53d1SNikolas Klauser class = enable_if_t<!__is_allocator<_Container>::value> > 689e78f53d1SNikolas Klauserpriority_queue(_Compare, _Container) -> priority_queue<typename _Container::value_type, _Container, _Compare>; 690e78f53d1SNikolas Klauser 691e78f53d1SNikolas Klausertemplate <class _InputIterator, 692e78f53d1SNikolas Klauser class _Compare = less<__iter_value_type<_InputIterator>>, 693e78f53d1SNikolas Klauser class _Container = vector<__iter_value_type<_InputIterator>>, 694e78f53d1SNikolas Klauser class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, 695e78f53d1SNikolas Klauser class = enable_if_t<!__is_allocator<_Compare>::value>, 696e78f53d1SNikolas Klauser class = enable_if_t<!__is_allocator<_Container>::value> > 697e78f53d1SNikolas Klauserpriority_queue(_InputIterator, _InputIterator, _Compare = _Compare(), _Container = _Container()) 698e78f53d1SNikolas Klauser -> priority_queue<__iter_value_type<_InputIterator>, _Container, _Compare>; 699e78f53d1SNikolas Klauser 700e78f53d1SNikolas Klausertemplate <class _Compare, 701e78f53d1SNikolas Klauser class _Container, 702e78f53d1SNikolas Klauser class _Alloc, 703e78f53d1SNikolas Klauser class = enable_if_t<!__is_allocator<_Compare>::value>, 704e78f53d1SNikolas Klauser class = enable_if_t<!__is_allocator<_Container>::value>, 705e78f53d1SNikolas Klauser class = enable_if_t<uses_allocator<_Container, _Alloc>::value> > 706e78f53d1SNikolas Klauserpriority_queue(_Compare, _Container, _Alloc) -> priority_queue<typename _Container::value_type, _Container, _Compare>; 707e78f53d1SNikolas Klauser 708e78f53d1SNikolas Klausertemplate <class _InputIterator, 709e78f53d1SNikolas Klauser class _Allocator, 710e78f53d1SNikolas Klauser class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, 711e78f53d1SNikolas Klauser class = enable_if_t<__is_allocator<_Allocator>::value> > 712e78f53d1SNikolas Klauserpriority_queue(_InputIterator, _InputIterator, _Allocator) 713e78f53d1SNikolas Klauser -> priority_queue<__iter_value_type<_InputIterator>, 714e78f53d1SNikolas Klauser vector<__iter_value_type<_InputIterator>, _Allocator>, 715e78f53d1SNikolas Klauser less<__iter_value_type<_InputIterator>>>; 716e78f53d1SNikolas Klauser 717e78f53d1SNikolas Klausertemplate <class _InputIterator, 718e78f53d1SNikolas Klauser class _Compare, 719e78f53d1SNikolas Klauser class _Allocator, 720e78f53d1SNikolas Klauser class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, 721e78f53d1SNikolas Klauser class = enable_if_t<!__is_allocator<_Compare>::value>, 722e78f53d1SNikolas Klauser class = enable_if_t<__is_allocator<_Allocator>::value> > 723e78f53d1SNikolas Klauserpriority_queue(_InputIterator, _InputIterator, _Compare, _Allocator) 724e78f53d1SNikolas Klauser -> priority_queue<__iter_value_type<_InputIterator>, 725e78f53d1SNikolas Klauser vector<__iter_value_type<_InputIterator>, _Allocator>, 726e78f53d1SNikolas Klauser _Compare>; 727e78f53d1SNikolas Klauser 728e78f53d1SNikolas Klausertemplate <class _InputIterator, 729e78f53d1SNikolas Klauser class _Compare, 730e78f53d1SNikolas Klauser class _Container, 731e78f53d1SNikolas Klauser class _Alloc, 732e78f53d1SNikolas Klauser class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>, 733e78f53d1SNikolas Klauser class = enable_if_t<!__is_allocator<_Compare>::value>, 734e78f53d1SNikolas Klauser class = enable_if_t<!__is_allocator<_Container>::value>, 735e78f53d1SNikolas Klauser class = enable_if_t<uses_allocator<_Container, _Alloc>::value> > 736e78f53d1SNikolas Klauserpriority_queue(_InputIterator, _InputIterator, _Compare, _Container, _Alloc) 737e78f53d1SNikolas Klauser -> priority_queue<typename _Container::value_type, _Container, _Compare>; 738e78f53d1SNikolas Klauser#endif 739e78f53d1SNikolas Klauser 740e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER >= 23 741e78f53d1SNikolas Klauser 742e78f53d1SNikolas Klausertemplate <ranges::input_range _Range, 743e78f53d1SNikolas Klauser class _Compare = less<ranges::range_value_t<_Range>>, 744e78f53d1SNikolas Klauser class = enable_if_t<!__is_allocator<_Compare>::value>> 745e78f53d1SNikolas Klauserpriority_queue(from_range_t, _Range&&, _Compare = _Compare()) 746e78f53d1SNikolas Klauser -> priority_queue<ranges::range_value_t<_Range>, vector<ranges::range_value_t<_Range>>, _Compare>; 747e78f53d1SNikolas Klauser 748e78f53d1SNikolas Klausertemplate <ranges::input_range _Range, 749e78f53d1SNikolas Klauser class _Compare, 750e78f53d1SNikolas Klauser class _Alloc, 751e78f53d1SNikolas Klauser class = enable_if_t<!__is_allocator<_Compare>::value>, 752e78f53d1SNikolas Klauser class = enable_if_t<__is_allocator<_Alloc>::value>> 753e78f53d1SNikolas Klauserpriority_queue(from_range_t, _Range&&, _Compare, _Alloc) 754e78f53d1SNikolas Klauser -> priority_queue<ranges::range_value_t<_Range>, vector<ranges::range_value_t<_Range>, _Alloc>, _Compare>; 755e78f53d1SNikolas Klauser 756e78f53d1SNikolas Klausertemplate <ranges::input_range _Range, class _Alloc, class = enable_if_t<__is_allocator<_Alloc>::value>> 757e78f53d1SNikolas Klauserpriority_queue(from_range_t, _Range&&, _Alloc) 758e78f53d1SNikolas Klauser -> priority_queue<ranges::range_value_t<_Range>, vector<ranges::range_value_t<_Range>, _Alloc>>; 759e78f53d1SNikolas Klauser 760e78f53d1SNikolas Klauser#endif 761e78f53d1SNikolas Klauser 762e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 763e78f53d1SNikolas Klauserinline priority_queue<_Tp, _Container, _Compare>::priority_queue(const _Compare& __comp, const container_type& __c) 764e78f53d1SNikolas Klauser : c(__c), comp(__comp) { 765e78f53d1SNikolas Klauser std::make_heap(c.begin(), c.end(), comp); 766e78f53d1SNikolas Klauser} 767e78f53d1SNikolas Klauser 768e78f53d1SNikolas Klauser#ifndef _LIBCPP_CXX03_LANG 769e78f53d1SNikolas Klauser 770e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 771e78f53d1SNikolas Klauserinline priority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp, container_type&& __c) 772e78f53d1SNikolas Klauser : c(std::move(__c)), comp(__comp) { 773e78f53d1SNikolas Klauser std::make_heap(c.begin(), c.end(), comp); 774e78f53d1SNikolas Klauser} 775e78f53d1SNikolas Klauser 776e78f53d1SNikolas Klauser#endif // _LIBCPP_CXX03_LANG 777e78f53d1SNikolas Klauser 778e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 779e78f53d1SNikolas Klausertemplate <class _InputIter, __enable_if_t<__has_input_iterator_category<_InputIter>::value, int> > 780e78f53d1SNikolas Klauserinline priority_queue<_Tp, _Container, _Compare>::priority_queue( 781e78f53d1SNikolas Klauser _InputIter __f, _InputIter __l, const value_compare& __comp) 782e78f53d1SNikolas Klauser : c(__f, __l), comp(__comp) { 783e78f53d1SNikolas Klauser std::make_heap(c.begin(), c.end(), comp); 784e78f53d1SNikolas Klauser} 785e78f53d1SNikolas Klauser 786e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 787e78f53d1SNikolas Klausertemplate <class _InputIter, __enable_if_t<__has_input_iterator_category<_InputIter>::value, int> > 788e78f53d1SNikolas Klauserinline priority_queue<_Tp, _Container, _Compare>::priority_queue( 789e78f53d1SNikolas Klauser _InputIter __f, _InputIter __l, const value_compare& __comp, const container_type& __c) 790e78f53d1SNikolas Klauser : c(__c), comp(__comp) { 791e78f53d1SNikolas Klauser c.insert(c.end(), __f, __l); 792e78f53d1SNikolas Klauser std::make_heap(c.begin(), c.end(), comp); 793e78f53d1SNikolas Klauser} 794e78f53d1SNikolas Klauser 795e78f53d1SNikolas Klauser#ifndef _LIBCPP_CXX03_LANG 796e78f53d1SNikolas Klauser 797e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 798e78f53d1SNikolas Klausertemplate <class _InputIter, __enable_if_t<__has_input_iterator_category<_InputIter>::value, int> > 799e78f53d1SNikolas Klauserinline priority_queue<_Tp, _Container, _Compare>::priority_queue( 800e78f53d1SNikolas Klauser _InputIter __f, _InputIter __l, const value_compare& __comp, container_type&& __c) 801e78f53d1SNikolas Klauser : c(std::move(__c)), comp(__comp) { 802e78f53d1SNikolas Klauser c.insert(c.end(), __f, __l); 803e78f53d1SNikolas Klauser std::make_heap(c.begin(), c.end(), comp); 804e78f53d1SNikolas Klauser} 805e78f53d1SNikolas Klauser 806e78f53d1SNikolas Klauser#endif // _LIBCPP_CXX03_LANG 807e78f53d1SNikolas Klauser 808e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 809e78f53d1SNikolas Klausertemplate <class _Alloc, __enable_if_t<uses_allocator<_Container, _Alloc>::value, int> > 810e78f53d1SNikolas Klauserinline priority_queue<_Tp, _Container, _Compare>::priority_queue(const _Alloc& __a) : c(__a) {} 811e78f53d1SNikolas Klauser 812e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 813e78f53d1SNikolas Klausertemplate <class _Alloc, __enable_if_t<uses_allocator<_Container, _Alloc>::value, int> > 814e78f53d1SNikolas Klauserinline priority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp, const _Alloc& __a) 815e78f53d1SNikolas Klauser : c(__a), comp(__comp) {} 816e78f53d1SNikolas Klauser 817e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 818e78f53d1SNikolas Klausertemplate <class _Alloc, __enable_if_t<uses_allocator<_Container, _Alloc>::value, int> > 819e78f53d1SNikolas Klauserinline priority_queue<_Tp, _Container, _Compare>::priority_queue( 820e78f53d1SNikolas Klauser const value_compare& __comp, const container_type& __c, const _Alloc& __a) 821e78f53d1SNikolas Klauser : c(__c, __a), comp(__comp) { 822e78f53d1SNikolas Klauser std::make_heap(c.begin(), c.end(), comp); 823e78f53d1SNikolas Klauser} 824e78f53d1SNikolas Klauser 825e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 826e78f53d1SNikolas Klausertemplate <class _Alloc, __enable_if_t<uses_allocator<_Container, _Alloc>::value, int> > 827e78f53d1SNikolas Klauserinline priority_queue<_Tp, _Container, _Compare>::priority_queue(const priority_queue& __q, const _Alloc& __a) 828e78f53d1SNikolas Klauser : c(__q.c, __a), comp(__q.comp) {} 829e78f53d1SNikolas Klauser 830e78f53d1SNikolas Klauser#ifndef _LIBCPP_CXX03_LANG 831e78f53d1SNikolas Klauser 832e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 833e78f53d1SNikolas Klausertemplate <class _Alloc, __enable_if_t<uses_allocator<_Container, _Alloc>::value, int> > 834e78f53d1SNikolas Klauserinline priority_queue<_Tp, _Container, _Compare>::priority_queue( 835e78f53d1SNikolas Klauser const value_compare& __comp, container_type&& __c, const _Alloc& __a) 836e78f53d1SNikolas Klauser : c(std::move(__c), __a), comp(__comp) { 837e78f53d1SNikolas Klauser std::make_heap(c.begin(), c.end(), comp); 838e78f53d1SNikolas Klauser} 839e78f53d1SNikolas Klauser 840e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 841e78f53d1SNikolas Klausertemplate <class _Alloc, __enable_if_t<uses_allocator<_Container, _Alloc>::value, int> > 842e78f53d1SNikolas Klauserinline priority_queue<_Tp, _Container, _Compare>::priority_queue(priority_queue&& __q, const _Alloc& __a) 843e78f53d1SNikolas Klauser : c(std::move(__q.c), __a), comp(std::move(__q.comp)) {} 844e78f53d1SNikolas Klauser 845e78f53d1SNikolas Klauser#endif // _LIBCPP_CXX03_LANG 846e78f53d1SNikolas Klauser 847e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 848e78f53d1SNikolas Klausertemplate < 849e78f53d1SNikolas Klauser class _InputIter, 850e78f53d1SNikolas Klauser class _Alloc, 851e78f53d1SNikolas Klauser __enable_if_t<__has_input_iterator_category<_InputIter>::value && uses_allocator<_Container, _Alloc>::value, int> > 852e78f53d1SNikolas Klauserinline priority_queue<_Tp, _Container, _Compare>::priority_queue(_InputIter __f, _InputIter __l, const _Alloc& __a) 853e78f53d1SNikolas Klauser : c(__f, __l, __a), comp() { 854e78f53d1SNikolas Klauser std::make_heap(c.begin(), c.end(), comp); 855e78f53d1SNikolas Klauser} 856e78f53d1SNikolas Klauser 857e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 858e78f53d1SNikolas Klausertemplate < 859e78f53d1SNikolas Klauser class _InputIter, 860e78f53d1SNikolas Klauser class _Alloc, 861e78f53d1SNikolas Klauser __enable_if_t<__has_input_iterator_category<_InputIter>::value && uses_allocator<_Container, _Alloc>::value, int> > 862e78f53d1SNikolas Klauserinline priority_queue<_Tp, _Container, _Compare>::priority_queue( 863e78f53d1SNikolas Klauser _InputIter __f, _InputIter __l, const value_compare& __comp, const _Alloc& __a) 864e78f53d1SNikolas Klauser : c(__f, __l, __a), comp(__comp) { 865e78f53d1SNikolas Klauser std::make_heap(c.begin(), c.end(), comp); 866e78f53d1SNikolas Klauser} 867e78f53d1SNikolas Klauser 868e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 869e78f53d1SNikolas Klausertemplate < 870e78f53d1SNikolas Klauser class _InputIter, 871e78f53d1SNikolas Klauser class _Alloc, 872e78f53d1SNikolas Klauser __enable_if_t<__has_input_iterator_category<_InputIter>::value && uses_allocator<_Container, _Alloc>::value, int> > 873e78f53d1SNikolas Klauserinline priority_queue<_Tp, _Container, _Compare>::priority_queue( 874e78f53d1SNikolas Klauser _InputIter __f, _InputIter __l, const value_compare& __comp, const container_type& __c, const _Alloc& __a) 875e78f53d1SNikolas Klauser : c(__c, __a), comp(__comp) { 876e78f53d1SNikolas Klauser c.insert(c.end(), __f, __l); 877e78f53d1SNikolas Klauser std::make_heap(c.begin(), c.end(), comp); 878e78f53d1SNikolas Klauser} 879e78f53d1SNikolas Klauser 880e78f53d1SNikolas Klauser#ifndef _LIBCPP_CXX03_LANG 881e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 882e78f53d1SNikolas Klausertemplate < 883e78f53d1SNikolas Klauser class _InputIter, 884e78f53d1SNikolas Klauser class _Alloc, 885e78f53d1SNikolas Klauser __enable_if_t<__has_input_iterator_category<_InputIter>::value && uses_allocator<_Container, _Alloc>::value, int> > 886e78f53d1SNikolas Klauserinline priority_queue<_Tp, _Container, _Compare>::priority_queue( 887e78f53d1SNikolas Klauser _InputIter __f, _InputIter __l, const value_compare& __comp, container_type&& __c, const _Alloc& __a) 888e78f53d1SNikolas Klauser : c(std::move(__c), __a), comp(__comp) { 889e78f53d1SNikolas Klauser c.insert(c.end(), __f, __l); 890e78f53d1SNikolas Klauser std::make_heap(c.begin(), c.end(), comp); 891e78f53d1SNikolas Klauser} 892e78f53d1SNikolas Klauser#endif // _LIBCPP_CXX03_LANG 893e78f53d1SNikolas Klauser 894e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 895e78f53d1SNikolas Klauserinline void priority_queue<_Tp, _Container, _Compare>::push(const value_type& __v) { 896e78f53d1SNikolas Klauser c.push_back(__v); 897e78f53d1SNikolas Klauser std::push_heap(c.begin(), c.end(), comp); 898e78f53d1SNikolas Klauser} 899e78f53d1SNikolas Klauser 900e78f53d1SNikolas Klauser#ifndef _LIBCPP_CXX03_LANG 901e78f53d1SNikolas Klauser 902e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 903e78f53d1SNikolas Klauserinline void priority_queue<_Tp, _Container, _Compare>::push(value_type&& __v) { 904e78f53d1SNikolas Klauser c.push_back(std::move(__v)); 905e78f53d1SNikolas Klauser std::push_heap(c.begin(), c.end(), comp); 906e78f53d1SNikolas Klauser} 907e78f53d1SNikolas Klauser 908e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 909e78f53d1SNikolas Klausertemplate <class... _Args> 910e78f53d1SNikolas Klauserinline void priority_queue<_Tp, _Container, _Compare>::emplace(_Args&&... __args) { 911e78f53d1SNikolas Klauser c.emplace_back(std::forward<_Args>(__args)...); 912e78f53d1SNikolas Klauser std::push_heap(c.begin(), c.end(), comp); 913e78f53d1SNikolas Klauser} 914e78f53d1SNikolas Klauser 915e78f53d1SNikolas Klauser#endif // _LIBCPP_CXX03_LANG 916e78f53d1SNikolas Klauser 917e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 918e78f53d1SNikolas Klauserinline void priority_queue<_Tp, _Container, _Compare>::pop() { 919e78f53d1SNikolas Klauser std::pop_heap(c.begin(), c.end(), comp); 920e78f53d1SNikolas Klauser c.pop_back(); 921e78f53d1SNikolas Klauser} 922e78f53d1SNikolas Klauser 923e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare> 924e78f53d1SNikolas Klauserinline void priority_queue<_Tp, _Container, _Compare>::swap(priority_queue& __q) 925e78f53d1SNikolas Klauser _NOEXCEPT_(__is_nothrow_swappable_v<container_type>&& __is_nothrow_swappable_v<value_compare>) { 926e78f53d1SNikolas Klauser using std::swap; 927e78f53d1SNikolas Klauser swap(c, __q.c); 928e78f53d1SNikolas Klauser swap(comp, __q.comp); 929e78f53d1SNikolas Klauser} 930e78f53d1SNikolas Klauser 931e78f53d1SNikolas Klausertemplate <class _Tp, 932e78f53d1SNikolas Klauser class _Container, 933e78f53d1SNikolas Klauser class _Compare, 934e78f53d1SNikolas Klauser __enable_if_t<__is_swappable_v<_Container> && __is_swappable_v<_Compare>, int> = 0> 935e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI void 936e78f53d1SNikolas Klauserswap(priority_queue<_Tp, _Container, _Compare>& __x, priority_queue<_Tp, _Container, _Compare>& __y) 937e78f53d1SNikolas Klauser _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y))) { 938e78f53d1SNikolas Klauser __x.swap(__y); 939e78f53d1SNikolas Klauser} 940e78f53d1SNikolas Klauser 941e78f53d1SNikolas Klausertemplate <class _Tp, class _Container, class _Compare, class _Alloc> 942e78f53d1SNikolas Klauserstruct _LIBCPP_TEMPLATE_VIS uses_allocator<priority_queue<_Tp, _Container, _Compare>, _Alloc> 943e78f53d1SNikolas Klauser : public uses_allocator<_Container, _Alloc> {}; 944e78f53d1SNikolas Klauser 945e78f53d1SNikolas Klauser_LIBCPP_END_NAMESPACE_STD 946e78f53d1SNikolas Klauser 947e78f53d1SNikolas Klauser_LIBCPP_POP_MACROS 948e78f53d1SNikolas Klauser 949e78f53d1SNikolas Klauser#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 95073fbae83SNikolas Klauser# include <__cxx03/concepts> 95173fbae83SNikolas Klauser# include <__cxx03/cstdlib> 95273fbae83SNikolas Klauser# include <__cxx03/functional> 95373fbae83SNikolas Klauser# include <__cxx03/type_traits> 954e78f53d1SNikolas Klauser#endif 955e78f53d1SNikolas Klauser 956*ce777190SNikolas Klauser#endif // _LIBCPP___CXX03_QUEUE 957