xref: /aosp_15_r20/external/libcxx/include/queue (revision 58b9f456b02922dfdb1fad8a988d5fd8765ecb80)
1*58b9f456SAndroid Build Coastguard Worker// -*- C++ -*-
2*58b9f456SAndroid Build Coastguard Worker//===--------------------------- queue ------------------------------------===//
3*58b9f456SAndroid Build Coastguard Worker//
4*58b9f456SAndroid Build Coastguard Worker//                     The LLVM Compiler Infrastructure
5*58b9f456SAndroid Build Coastguard Worker//
6*58b9f456SAndroid Build Coastguard Worker// This file is dual licensed under the MIT and the University of Illinois Open
7*58b9f456SAndroid Build Coastguard Worker// Source Licenses. See LICENSE.TXT for details.
8*58b9f456SAndroid Build Coastguard Worker//
9*58b9f456SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
10*58b9f456SAndroid Build Coastguard Worker
11*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_QUEUE
12*58b9f456SAndroid Build Coastguard Worker#define _LIBCPP_QUEUE
13*58b9f456SAndroid Build Coastguard Worker
14*58b9f456SAndroid Build Coastguard Worker/*
15*58b9f456SAndroid Build Coastguard Worker    queue synopsis
16*58b9f456SAndroid Build Coastguard Worker
17*58b9f456SAndroid Build Coastguard Workernamespace std
18*58b9f456SAndroid Build Coastguard Worker{
19*58b9f456SAndroid Build Coastguard Worker
20*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Container = deque<T>>
21*58b9f456SAndroid Build Coastguard Workerclass queue
22*58b9f456SAndroid Build Coastguard Worker{
23*58b9f456SAndroid Build Coastguard Workerpublic:
24*58b9f456SAndroid Build Coastguard Worker    typedef Container                                container_type;
25*58b9f456SAndroid Build Coastguard Worker    typedef typename container_type::value_type      value_type;
26*58b9f456SAndroid Build Coastguard Worker    typedef typename container_type::reference       reference;
27*58b9f456SAndroid Build Coastguard Worker    typedef typename container_type::const_reference const_reference;
28*58b9f456SAndroid Build Coastguard Worker    typedef typename container_type::size_type       size_type;
29*58b9f456SAndroid Build Coastguard Worker
30*58b9f456SAndroid Build Coastguard Workerprotected:
31*58b9f456SAndroid Build Coastguard Worker    container_type c;
32*58b9f456SAndroid Build Coastguard Worker
33*58b9f456SAndroid Build Coastguard Workerpublic:
34*58b9f456SAndroid Build Coastguard Worker    queue() = default;
35*58b9f456SAndroid Build Coastguard Worker    ~queue() = default;
36*58b9f456SAndroid Build Coastguard Worker
37*58b9f456SAndroid Build Coastguard Worker    queue(const queue& q) = default;
38*58b9f456SAndroid Build Coastguard Worker    queue(queue&& q) = default;
39*58b9f456SAndroid Build Coastguard Worker
40*58b9f456SAndroid Build Coastguard Worker    queue& operator=(const queue& q) = default;
41*58b9f456SAndroid Build Coastguard Worker    queue& operator=(queue&& q) = default;
42*58b9f456SAndroid Build Coastguard Worker
43*58b9f456SAndroid Build Coastguard Worker    explicit queue(const container_type& c);
44*58b9f456SAndroid Build Coastguard Worker    explicit queue(container_type&& c)
45*58b9f456SAndroid Build Coastguard Worker    template <class Alloc>
46*58b9f456SAndroid Build Coastguard Worker        explicit queue(const Alloc& a);
47*58b9f456SAndroid Build Coastguard Worker    template <class Alloc>
48*58b9f456SAndroid Build Coastguard Worker        queue(const container_type& c, const Alloc& a);
49*58b9f456SAndroid Build Coastguard Worker    template <class Alloc>
50*58b9f456SAndroid Build Coastguard Worker        queue(container_type&& c, const Alloc& a);
51*58b9f456SAndroid Build Coastguard Worker    template <class Alloc>
52*58b9f456SAndroid Build Coastguard Worker        queue(const queue& q, const Alloc& a);
53*58b9f456SAndroid Build Coastguard Worker    template <class Alloc>
54*58b9f456SAndroid Build Coastguard Worker        queue(queue&& q, const Alloc& a);
55*58b9f456SAndroid Build Coastguard Worker
56*58b9f456SAndroid Build Coastguard Worker    bool      empty() const;
57*58b9f456SAndroid Build Coastguard Worker    size_type size() const;
58*58b9f456SAndroid Build Coastguard Worker
59*58b9f456SAndroid Build Coastguard Worker    reference       front();
60*58b9f456SAndroid Build Coastguard Worker    const_reference front() const;
61*58b9f456SAndroid Build Coastguard Worker    reference       back();
62*58b9f456SAndroid Build Coastguard Worker    const_reference back() const;
63*58b9f456SAndroid Build Coastguard Worker
64*58b9f456SAndroid Build Coastguard Worker    void push(const value_type& v);
65*58b9f456SAndroid Build Coastguard Worker    void push(value_type&& v);
66*58b9f456SAndroid Build Coastguard Worker    template <class... Args> reference emplace(Args&&... args); // reference in C++17
67*58b9f456SAndroid Build Coastguard Worker    void pop();
68*58b9f456SAndroid Build Coastguard Worker
69*58b9f456SAndroid Build Coastguard Worker    void swap(queue& q) noexcept(is_nothrow_swappable_v<Container>)
70*58b9f456SAndroid Build Coastguard Worker};
71*58b9f456SAndroid Build Coastguard Worker
72*58b9f456SAndroid Build Coastguard Workertemplate<class Container>
73*58b9f456SAndroid Build Coastguard Worker  queue(Container) -> queue<typename Container::value_type, Container>; // C++17
74*58b9f456SAndroid Build Coastguard Worker
75*58b9f456SAndroid Build Coastguard Workertemplate<class Container, class Allocator>
76*58b9f456SAndroid Build Coastguard Worker  queue(Container, Allocator) -> queue<typename Container::value_type, Container>; // C++17
77*58b9f456SAndroid Build Coastguard Worker
78*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Container>
79*58b9f456SAndroid Build Coastguard Worker  bool operator==(const queue<T, Container>& x,const queue<T, Container>& y);
80*58b9f456SAndroid Build Coastguard Worker
81*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Container>
82*58b9f456SAndroid Build Coastguard Worker  bool operator< (const queue<T, Container>& x,const queue<T, Container>& y);
83*58b9f456SAndroid Build Coastguard Worker
84*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Container>
85*58b9f456SAndroid Build Coastguard Worker  bool operator!=(const queue<T, Container>& x,const queue<T, Container>& y);
86*58b9f456SAndroid Build Coastguard Worker
87*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Container>
88*58b9f456SAndroid Build Coastguard Worker  bool operator> (const queue<T, Container>& x,const queue<T, Container>& y);
89*58b9f456SAndroid Build Coastguard Worker
90*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Container>
91*58b9f456SAndroid Build Coastguard Worker  bool operator>=(const queue<T, Container>& x,const queue<T, Container>& y);
92*58b9f456SAndroid Build Coastguard Worker
93*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Container>
94*58b9f456SAndroid Build Coastguard Worker  bool operator<=(const queue<T, Container>& x,const queue<T, Container>& y);
95*58b9f456SAndroid Build Coastguard Worker
96*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Container>
97*58b9f456SAndroid Build Coastguard Worker  void swap(queue<T, Container>& x, queue<T, Container>& y)
98*58b9f456SAndroid Build Coastguard Worker  noexcept(noexcept(x.swap(y)));
99*58b9f456SAndroid Build Coastguard Worker
100*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Container = vector<T>,
101*58b9f456SAndroid Build Coastguard Worker          class Compare = less<typename Container::value_type>>
102*58b9f456SAndroid Build Coastguard Workerclass priority_queue
103*58b9f456SAndroid Build Coastguard Worker{
104*58b9f456SAndroid Build Coastguard Workerpublic:
105*58b9f456SAndroid Build Coastguard Worker    typedef Container                                container_type;
106*58b9f456SAndroid Build Coastguard Worker    typedef typename container_type::value_type      value_type;
107*58b9f456SAndroid Build Coastguard Worker    typedef typename container_type::reference       reference;
108*58b9f456SAndroid Build Coastguard Worker    typedef typename container_type::const_reference const_reference;
109*58b9f456SAndroid Build Coastguard Worker    typedef typename container_type::size_type       size_type;
110*58b9f456SAndroid Build Coastguard Worker
111*58b9f456SAndroid Build Coastguard Workerprotected:
112*58b9f456SAndroid Build Coastguard Worker    container_type c;
113*58b9f456SAndroid Build Coastguard Worker    Compare comp;
114*58b9f456SAndroid Build Coastguard Worker
115*58b9f456SAndroid Build Coastguard Workerpublic:
116*58b9f456SAndroid Build Coastguard Worker    priority_queue() = default;
117*58b9f456SAndroid Build Coastguard Worker    ~priority_queue() = default;
118*58b9f456SAndroid Build Coastguard Worker
119*58b9f456SAndroid Build Coastguard Worker    priority_queue(const priority_queue& q) = default;
120*58b9f456SAndroid Build Coastguard Worker    priority_queue(priority_queue&& q) = default;
121*58b9f456SAndroid Build Coastguard Worker
122*58b9f456SAndroid Build Coastguard Worker    priority_queue& operator=(const priority_queue& q) = default;
123*58b9f456SAndroid Build Coastguard Worker    priority_queue& operator=(priority_queue&& q) = default;
124*58b9f456SAndroid Build Coastguard Worker
125*58b9f456SAndroid Build Coastguard Worker    explicit priority_queue(const Compare& comp);
126*58b9f456SAndroid Build Coastguard Worker    priority_queue(const Compare& comp, const container_type& c);
127*58b9f456SAndroid Build Coastguard Worker    explicit priority_queue(const Compare& comp, container_type&& c);
128*58b9f456SAndroid Build Coastguard Worker    template <class InputIterator>
129*58b9f456SAndroid Build Coastguard Worker        priority_queue(InputIterator first, InputIterator last,
130*58b9f456SAndroid Build Coastguard Worker                       const Compare& comp = Compare());
131*58b9f456SAndroid Build Coastguard Worker    template <class InputIterator>
132*58b9f456SAndroid Build Coastguard Worker        priority_queue(InputIterator first, InputIterator last,
133*58b9f456SAndroid Build Coastguard Worker                       const Compare& comp, const container_type& c);
134*58b9f456SAndroid Build Coastguard Worker    template <class InputIterator>
135*58b9f456SAndroid Build Coastguard Worker        priority_queue(InputIterator first, InputIterator last,
136*58b9f456SAndroid Build Coastguard Worker                       const Compare& comp, container_type&& c);
137*58b9f456SAndroid Build Coastguard Worker    template <class Alloc>
138*58b9f456SAndroid Build Coastguard Worker        explicit priority_queue(const Alloc& a);
139*58b9f456SAndroid Build Coastguard Worker    template <class Alloc>
140*58b9f456SAndroid Build Coastguard Worker        priority_queue(const Compare& comp, const Alloc& a);
141*58b9f456SAndroid Build Coastguard Worker    template <class Alloc>
142*58b9f456SAndroid Build Coastguard Worker        priority_queue(const Compare& comp, const container_type& c,
143*58b9f456SAndroid Build Coastguard Worker                       const Alloc& a);
144*58b9f456SAndroid Build Coastguard Worker    template <class Alloc>
145*58b9f456SAndroid Build Coastguard Worker        priority_queue(const Compare& comp, container_type&& c,
146*58b9f456SAndroid Build Coastguard Worker                       const Alloc& a);
147*58b9f456SAndroid Build Coastguard Worker    template <class Alloc>
148*58b9f456SAndroid Build Coastguard Worker        priority_queue(const priority_queue& q, const Alloc& a);
149*58b9f456SAndroid Build Coastguard Worker    template <class Alloc>
150*58b9f456SAndroid Build Coastguard Worker        priority_queue(priority_queue&& q, const Alloc& a);
151*58b9f456SAndroid Build Coastguard Worker
152*58b9f456SAndroid Build Coastguard Worker    bool            empty() const;
153*58b9f456SAndroid Build Coastguard Worker    size_type       size() const;
154*58b9f456SAndroid Build Coastguard Worker    const_reference top() const;
155*58b9f456SAndroid Build Coastguard Worker
156*58b9f456SAndroid Build Coastguard Worker    void push(const value_type& v);
157*58b9f456SAndroid Build Coastguard Worker    void push(value_type&& v);
158*58b9f456SAndroid Build Coastguard Worker    template <class... Args> void emplace(Args&&... args);
159*58b9f456SAndroid Build Coastguard Worker    void pop();
160*58b9f456SAndroid Build Coastguard Worker
161*58b9f456SAndroid Build Coastguard Worker    void swap(priority_queue& q)
162*58b9f456SAndroid Build Coastguard Worker        noexcept(is_nothrow_swappable_v<Container> &&
163*58b9f456SAndroid Build Coastguard Worker                 is_nothrow_swappable_v<Comp>)
164*58b9f456SAndroid Build Coastguard Worker};
165*58b9f456SAndroid Build Coastguard Worker
166*58b9f456SAndroid Build Coastguard Workertemplate <class Compare, class Container>
167*58b9f456SAndroid Build Coastguard Workerpriority_queue(Compare, Container)
168*58b9f456SAndroid Build Coastguard Worker    -> priority_queue<typename Container::value_type, Container, Compare>; // C++17
169*58b9f456SAndroid Build Coastguard Worker
170*58b9f456SAndroid Build Coastguard Workertemplate<class InputIterator,
171*58b9f456SAndroid Build Coastguard Worker         class Compare = less<typename iterator_traits<InputIterator>::value_type>,
172*58b9f456SAndroid Build Coastguard Worker         class Container = vector<typename iterator_traits<InputIterator>::value_type>>
173*58b9f456SAndroid Build Coastguard Workerpriority_queue(InputIterator, InputIterator, Compare = Compare(), Container = Container())
174*58b9f456SAndroid Build Coastguard Worker    -> priority_queue<typename iterator_traits<InputIterator>::value_type, Container, Compare>; // C++17
175*58b9f456SAndroid Build Coastguard Worker
176*58b9f456SAndroid Build Coastguard Workertemplate<class Compare, class Container, class Allocator>
177*58b9f456SAndroid Build Coastguard Workerpriority_queue(Compare, Container, Allocator)
178*58b9f456SAndroid Build Coastguard Worker    -> priority_queue<typename Container::value_type, Container, Compare>; // C++17
179*58b9f456SAndroid Build Coastguard Worker
180*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Container, class Compare>
181*58b9f456SAndroid Build Coastguard Worker  void swap(priority_queue<T, Container, Compare>& x,
182*58b9f456SAndroid Build Coastguard Worker            priority_queue<T, Container, Compare>& y)
183*58b9f456SAndroid Build Coastguard Worker            noexcept(noexcept(x.swap(y)));
184*58b9f456SAndroid Build Coastguard Worker
185*58b9f456SAndroid Build Coastguard Worker}  // std
186*58b9f456SAndroid Build Coastguard Worker
187*58b9f456SAndroid Build Coastguard Worker*/
188*58b9f456SAndroid Build Coastguard Worker
189*58b9f456SAndroid Build Coastguard Worker#include <__config>
190*58b9f456SAndroid Build Coastguard Worker#include <deque>
191*58b9f456SAndroid Build Coastguard Worker#include <vector>
192*58b9f456SAndroid Build Coastguard Worker#include <functional>
193*58b9f456SAndroid Build Coastguard Worker#include <algorithm>
194*58b9f456SAndroid Build Coastguard Worker
195*58b9f456SAndroid Build Coastguard Worker#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
196*58b9f456SAndroid Build Coastguard Worker#pragma GCC system_header
197*58b9f456SAndroid Build Coastguard Worker#endif
198*58b9f456SAndroid Build Coastguard Worker
199*58b9f456SAndroid Build Coastguard Worker_LIBCPP_BEGIN_NAMESPACE_STD
200*58b9f456SAndroid Build Coastguard Worker
201*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container = deque<_Tp> > class _LIBCPP_TEMPLATE_VIS queue;
202*58b9f456SAndroid Build Coastguard Worker
203*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container>
204*58b9f456SAndroid Build Coastguard Worker_LIBCPP_INLINE_VISIBILITY
205*58b9f456SAndroid Build Coastguard Workerbool
206*58b9f456SAndroid Build Coastguard Workeroperator==(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y);
207*58b9f456SAndroid Build Coastguard Worker
208*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container>
209*58b9f456SAndroid Build Coastguard Worker_LIBCPP_INLINE_VISIBILITY
210*58b9f456SAndroid Build Coastguard Workerbool
211*58b9f456SAndroid Build Coastguard Workeroperator< (const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y);
212*58b9f456SAndroid Build Coastguard Worker
213*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container /*= deque<_Tp>*/>
214*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS queue
215*58b9f456SAndroid Build Coastguard Worker{
216*58b9f456SAndroid Build Coastguard Workerpublic:
217*58b9f456SAndroid Build Coastguard Worker    typedef _Container                               container_type;
218*58b9f456SAndroid Build Coastguard Worker    typedef typename container_type::value_type      value_type;
219*58b9f456SAndroid Build Coastguard Worker    typedef typename container_type::reference       reference;
220*58b9f456SAndroid Build Coastguard Worker    typedef typename container_type::const_reference const_reference;
221*58b9f456SAndroid Build Coastguard Worker    typedef typename container_type::size_type       size_type;
222*58b9f456SAndroid Build Coastguard Worker    static_assert((is_same<_Tp, value_type>::value), "" );
223*58b9f456SAndroid Build Coastguard Worker
224*58b9f456SAndroid Build Coastguard Workerprotected:
225*58b9f456SAndroid Build Coastguard Worker    container_type c;
226*58b9f456SAndroid Build Coastguard Worker
227*58b9f456SAndroid Build Coastguard Workerpublic:
228*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
229*58b9f456SAndroid Build Coastguard Worker    queue()
230*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_(is_nothrow_default_constructible<container_type>::value)
231*58b9f456SAndroid Build Coastguard Worker        : c() {}
232*58b9f456SAndroid Build Coastguard Worker
233*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
234*58b9f456SAndroid Build Coastguard Worker    queue(const queue& __q) : c(__q.c) {}
235*58b9f456SAndroid Build Coastguard Worker
236*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
237*58b9f456SAndroid Build Coastguard Worker    queue& operator=(const queue& __q) {c = __q.c; return *this;}
238*58b9f456SAndroid Build Coastguard Worker
239*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
240*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
241*58b9f456SAndroid Build Coastguard Worker    queue(queue&& __q)
242*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_(is_nothrow_move_constructible<container_type>::value)
243*58b9f456SAndroid Build Coastguard Worker        : c(_VSTD::move(__q.c)) {}
244*58b9f456SAndroid Build Coastguard Worker
245*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
246*58b9f456SAndroid Build Coastguard Worker    queue& operator=(queue&& __q)
247*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_(is_nothrow_move_assignable<container_type>::value)
248*58b9f456SAndroid Build Coastguard Worker        {c = _VSTD::move(__q.c); return *this;}
249*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_CXX03_LANG
250*58b9f456SAndroid Build Coastguard Worker
251*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
252*58b9f456SAndroid Build Coastguard Worker    explicit queue(const container_type& __c)  : c(__c) {}
253*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
254*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
255*58b9f456SAndroid Build Coastguard Worker    explicit queue(container_type&& __c) : c(_VSTD::move(__c)) {}
256*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_CXX03_LANG
257*58b9f456SAndroid Build Coastguard Worker    template <class _Alloc>
258*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_INLINE_VISIBILITY
259*58b9f456SAndroid Build Coastguard Worker        explicit queue(const _Alloc& __a,
260*58b9f456SAndroid Build Coastguard Worker                       typename enable_if<uses_allocator<container_type,
261*58b9f456SAndroid Build Coastguard Worker                                                         _Alloc>::value>::type* = 0)
262*58b9f456SAndroid Build Coastguard Worker            : c(__a) {}
263*58b9f456SAndroid Build Coastguard Worker    template <class _Alloc>
264*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_INLINE_VISIBILITY
265*58b9f456SAndroid Build Coastguard Worker        queue(const queue& __q, const _Alloc& __a,
266*58b9f456SAndroid Build Coastguard Worker                       typename enable_if<uses_allocator<container_type,
267*58b9f456SAndroid Build Coastguard Worker                                                         _Alloc>::value>::type* = 0)
268*58b9f456SAndroid Build Coastguard Worker            : c(__q.c, __a) {}
269*58b9f456SAndroid Build Coastguard Worker    template <class _Alloc>
270*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_INLINE_VISIBILITY
271*58b9f456SAndroid Build Coastguard Worker        queue(const container_type& __c, const _Alloc& __a,
272*58b9f456SAndroid Build Coastguard Worker                       typename enable_if<uses_allocator<container_type,
273*58b9f456SAndroid Build Coastguard Worker                                                         _Alloc>::value>::type* = 0)
274*58b9f456SAndroid Build Coastguard Worker            : c(__c, __a) {}
275*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
276*58b9f456SAndroid Build Coastguard Worker    template <class _Alloc>
277*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_INLINE_VISIBILITY
278*58b9f456SAndroid Build Coastguard Worker        queue(container_type&& __c, const _Alloc& __a,
279*58b9f456SAndroid Build Coastguard Worker                       typename enable_if<uses_allocator<container_type,
280*58b9f456SAndroid Build Coastguard Worker                                                         _Alloc>::value>::type* = 0)
281*58b9f456SAndroid Build Coastguard Worker            : c(_VSTD::move(__c), __a) {}
282*58b9f456SAndroid Build Coastguard Worker    template <class _Alloc>
283*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_INLINE_VISIBILITY
284*58b9f456SAndroid Build Coastguard Worker        queue(queue&& __q, const _Alloc& __a,
285*58b9f456SAndroid Build Coastguard Worker                       typename enable_if<uses_allocator<container_type,
286*58b9f456SAndroid Build Coastguard Worker                                                         _Alloc>::value>::type* = 0)
287*58b9f456SAndroid Build Coastguard Worker            : c(_VSTD::move(__q.c), __a) {}
288*58b9f456SAndroid Build Coastguard Worker
289*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_CXX03_LANG
290*58b9f456SAndroid Build Coastguard Worker
291*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY
292*58b9f456SAndroid Build Coastguard Worker    bool      empty() const {return c.empty();}
293*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
294*58b9f456SAndroid Build Coastguard Worker    size_type size() const  {return c.size();}
295*58b9f456SAndroid Build Coastguard Worker
296*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
297*58b9f456SAndroid Build Coastguard Worker    reference       front()       {return c.front();}
298*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
299*58b9f456SAndroid Build Coastguard Worker    const_reference front() const {return c.front();}
300*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
301*58b9f456SAndroid Build Coastguard Worker    reference       back()        {return c.back();}
302*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
303*58b9f456SAndroid Build Coastguard Worker    const_reference back() const  {return c.back();}
304*58b9f456SAndroid Build Coastguard Worker
305*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
306*58b9f456SAndroid Build Coastguard Worker    void push(const value_type& __v) {c.push_back(__v);}
307*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
308*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
309*58b9f456SAndroid Build Coastguard Worker    void push(value_type&& __v)      {c.push_back(_VSTD::move(__v));}
310*58b9f456SAndroid Build Coastguard Worker    template <class... _Args>
311*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_INLINE_VISIBILITY
312*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 14
313*58b9f456SAndroid Build Coastguard Worker        decltype(auto) emplace(_Args&&... __args)
314*58b9f456SAndroid Build Coastguard Worker            { return c.emplace_back(_VSTD::forward<_Args>(__args)...);}
315*58b9f456SAndroid Build Coastguard Worker#else
316*58b9f456SAndroid Build Coastguard Worker        void     emplace(_Args&&... __args)
317*58b9f456SAndroid Build Coastguard Worker            {        c.emplace_back(_VSTD::forward<_Args>(__args)...);}
318*58b9f456SAndroid Build Coastguard Worker#endif
319*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_CXX03_LANG
320*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
321*58b9f456SAndroid Build Coastguard Worker    void pop() {c.pop_front();}
322*58b9f456SAndroid Build Coastguard Worker
323*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
324*58b9f456SAndroid Build Coastguard Worker    void swap(queue& __q)
325*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_(__is_nothrow_swappable<container_type>::value)
326*58b9f456SAndroid Build Coastguard Worker    {
327*58b9f456SAndroid Build Coastguard Worker        using _VSTD::swap;
328*58b9f456SAndroid Build Coastguard Worker        swap(c, __q.c);
329*58b9f456SAndroid Build Coastguard Worker    }
330*58b9f456SAndroid Build Coastguard Worker
331*58b9f456SAndroid Build Coastguard Worker    template <class _T1, class _C1>
332*58b9f456SAndroid Build Coastguard Worker    friend
333*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
334*58b9f456SAndroid Build Coastguard Worker    bool
335*58b9f456SAndroid Build Coastguard Worker    operator==(const queue<_T1, _C1>& __x,const queue<_T1, _C1>& __y);
336*58b9f456SAndroid Build Coastguard Worker
337*58b9f456SAndroid Build Coastguard Worker    template <class _T1, class _C1>
338*58b9f456SAndroid Build Coastguard Worker    friend
339*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
340*58b9f456SAndroid Build Coastguard Worker    bool
341*58b9f456SAndroid Build Coastguard Worker    operator< (const queue<_T1, _C1>& __x,const queue<_T1, _C1>& __y);
342*58b9f456SAndroid Build Coastguard Worker};
343*58b9f456SAndroid Build Coastguard Worker
344*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
345*58b9f456SAndroid Build Coastguard Workertemplate<class _Container,
346*58b9f456SAndroid Build Coastguard Worker         class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type
347*58b9f456SAndroid Build Coastguard Worker>
348*58b9f456SAndroid Build Coastguard Workerqueue(_Container)
349*58b9f456SAndroid Build Coastguard Worker    -> queue<typename _Container::value_type, _Container>;
350*58b9f456SAndroid Build Coastguard Worker
351*58b9f456SAndroid Build Coastguard Workertemplate<class _Container,
352*58b9f456SAndroid Build Coastguard Worker         class _Alloc,
353*58b9f456SAndroid Build Coastguard Worker         class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type,
354*58b9f456SAndroid Build Coastguard Worker         class = typename enable_if< __is_allocator<_Alloc>::value, nullptr_t>::type
355*58b9f456SAndroid Build Coastguard Worker>
356*58b9f456SAndroid Build Coastguard Workerqueue(_Container, _Alloc)
357*58b9f456SAndroid Build Coastguard Worker    -> queue<typename _Container::value_type, _Container>;
358*58b9f456SAndroid Build Coastguard Worker#endif
359*58b9f456SAndroid Build Coastguard Worker
360*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container>
361*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
362*58b9f456SAndroid Build Coastguard Workerbool
363*58b9f456SAndroid Build Coastguard Workeroperator==(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y)
364*58b9f456SAndroid Build Coastguard Worker{
365*58b9f456SAndroid Build Coastguard Worker    return __x.c == __y.c;
366*58b9f456SAndroid Build Coastguard Worker}
367*58b9f456SAndroid Build Coastguard Worker
368*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container>
369*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
370*58b9f456SAndroid Build Coastguard Workerbool
371*58b9f456SAndroid Build Coastguard Workeroperator< (const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y)
372*58b9f456SAndroid Build Coastguard Worker{
373*58b9f456SAndroid Build Coastguard Worker    return __x.c < __y.c;
374*58b9f456SAndroid Build Coastguard Worker}
375*58b9f456SAndroid Build Coastguard Worker
376*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container>
377*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
378*58b9f456SAndroid Build Coastguard Workerbool
379*58b9f456SAndroid Build Coastguard Workeroperator!=(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y)
380*58b9f456SAndroid Build Coastguard Worker{
381*58b9f456SAndroid Build Coastguard Worker    return !(__x == __y);
382*58b9f456SAndroid Build Coastguard Worker}
383*58b9f456SAndroid Build Coastguard Worker
384*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container>
385*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
386*58b9f456SAndroid Build Coastguard Workerbool
387*58b9f456SAndroid Build Coastguard Workeroperator> (const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y)
388*58b9f456SAndroid Build Coastguard Worker{
389*58b9f456SAndroid Build Coastguard Worker    return __y < __x;
390*58b9f456SAndroid Build Coastguard Worker}
391*58b9f456SAndroid Build Coastguard Worker
392*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container>
393*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
394*58b9f456SAndroid Build Coastguard Workerbool
395*58b9f456SAndroid Build Coastguard Workeroperator>=(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y)
396*58b9f456SAndroid Build Coastguard Worker{
397*58b9f456SAndroid Build Coastguard Worker    return !(__x < __y);
398*58b9f456SAndroid Build Coastguard Worker}
399*58b9f456SAndroid Build Coastguard Worker
400*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container>
401*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
402*58b9f456SAndroid Build Coastguard Workerbool
403*58b9f456SAndroid Build Coastguard Workeroperator<=(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y)
404*58b9f456SAndroid Build Coastguard Worker{
405*58b9f456SAndroid Build Coastguard Worker    return !(__y < __x);
406*58b9f456SAndroid Build Coastguard Worker}
407*58b9f456SAndroid Build Coastguard Worker
408*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container>
409*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
410*58b9f456SAndroid Build Coastguard Workertypename enable_if<
411*58b9f456SAndroid Build Coastguard Worker    __is_swappable<_Container>::value,
412*58b9f456SAndroid Build Coastguard Worker    void
413*58b9f456SAndroid Build Coastguard Worker>::type
414*58b9f456SAndroid Build Coastguard Workerswap(queue<_Tp, _Container>& __x, queue<_Tp, _Container>& __y)
415*58b9f456SAndroid Build Coastguard Worker    _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y)))
416*58b9f456SAndroid Build Coastguard Worker{
417*58b9f456SAndroid Build Coastguard Worker    __x.swap(__y);
418*58b9f456SAndroid Build Coastguard Worker}
419*58b9f456SAndroid Build Coastguard Worker
420*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Alloc>
421*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS uses_allocator<queue<_Tp, _Container>, _Alloc>
422*58b9f456SAndroid Build Coastguard Worker    : public uses_allocator<_Container, _Alloc>
423*58b9f456SAndroid Build Coastguard Worker{
424*58b9f456SAndroid Build Coastguard Worker};
425*58b9f456SAndroid Build Coastguard Worker
426*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container = vector<_Tp>,
427*58b9f456SAndroid Build Coastguard Worker          class _Compare = less<typename _Container::value_type> >
428*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS priority_queue
429*58b9f456SAndroid Build Coastguard Worker{
430*58b9f456SAndroid Build Coastguard Workerpublic:
431*58b9f456SAndroid Build Coastguard Worker    typedef _Container                               container_type;
432*58b9f456SAndroid Build Coastguard Worker    typedef _Compare                                 value_compare;
433*58b9f456SAndroid Build Coastguard Worker    typedef typename container_type::value_type      value_type;
434*58b9f456SAndroid Build Coastguard Worker    typedef typename container_type::reference       reference;
435*58b9f456SAndroid Build Coastguard Worker    typedef typename container_type::const_reference const_reference;
436*58b9f456SAndroid Build Coastguard Worker    typedef typename container_type::size_type       size_type;
437*58b9f456SAndroid Build Coastguard Worker    static_assert((is_same<_Tp, value_type>::value), "" );
438*58b9f456SAndroid Build Coastguard Worker
439*58b9f456SAndroid Build Coastguard Workerprotected:
440*58b9f456SAndroid Build Coastguard Worker    container_type c;
441*58b9f456SAndroid Build Coastguard Worker    value_compare comp;
442*58b9f456SAndroid Build Coastguard Worker
443*58b9f456SAndroid Build Coastguard Workerpublic:
444*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
445*58b9f456SAndroid Build Coastguard Worker    priority_queue()
446*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_(is_nothrow_default_constructible<container_type>::value &&
447*58b9f456SAndroid Build Coastguard Worker                   is_nothrow_default_constructible<value_compare>::value)
448*58b9f456SAndroid Build Coastguard Worker        : c(), comp() {}
449*58b9f456SAndroid Build Coastguard Worker
450*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
451*58b9f456SAndroid Build Coastguard Worker    priority_queue(const priority_queue& __q) : c(__q.c), comp(__q.comp) {}
452*58b9f456SAndroid Build Coastguard Worker
453*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
454*58b9f456SAndroid Build Coastguard Worker    priority_queue& operator=(const priority_queue& __q)
455*58b9f456SAndroid Build Coastguard Worker        {c = __q.c; comp = __q.comp; return *this;}
456*58b9f456SAndroid Build Coastguard Worker
457*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
458*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
459*58b9f456SAndroid Build Coastguard Worker    priority_queue(priority_queue&& __q)
460*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_(is_nothrow_move_constructible<container_type>::value &&
461*58b9f456SAndroid Build Coastguard Worker                   is_nothrow_move_constructible<value_compare>::value)
462*58b9f456SAndroid Build Coastguard Worker        : c(_VSTD::move(__q.c)), comp(_VSTD::move(__q.comp)) {}
463*58b9f456SAndroid Build Coastguard Worker
464*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
465*58b9f456SAndroid Build Coastguard Worker    priority_queue& operator=(priority_queue&& __q)
466*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_(is_nothrow_move_assignable<container_type>::value &&
467*58b9f456SAndroid Build Coastguard Worker                   is_nothrow_move_assignable<value_compare>::value)
468*58b9f456SAndroid Build Coastguard Worker        {c = _VSTD::move(__q.c); comp = _VSTD::move(__q.comp); return *this;}
469*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_CXX03_LANG
470*58b9f456SAndroid Build Coastguard Worker
471*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
472*58b9f456SAndroid Build Coastguard Worker    explicit priority_queue(const value_compare& __comp)
473*58b9f456SAndroid Build Coastguard Worker        : c(), comp(__comp) {}
474*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
475*58b9f456SAndroid Build Coastguard Worker    priority_queue(const value_compare& __comp, const container_type& __c);
476*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
477*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
478*58b9f456SAndroid Build Coastguard Worker    explicit priority_queue(const value_compare& __comp, container_type&& __c);
479*58b9f456SAndroid Build Coastguard Worker#endif
480*58b9f456SAndroid Build Coastguard Worker    template <class _InputIter>
481*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_INLINE_VISIBILITY
482*58b9f456SAndroid Build Coastguard Worker        priority_queue(_InputIter __f, _InputIter __l,
483*58b9f456SAndroid Build Coastguard Worker                       const value_compare& __comp = value_compare());
484*58b9f456SAndroid Build Coastguard Worker    template <class _InputIter>
485*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_INLINE_VISIBILITY
486*58b9f456SAndroid Build Coastguard Worker        priority_queue(_InputIter __f, _InputIter __l,
487*58b9f456SAndroid Build Coastguard Worker                       const value_compare& __comp, const container_type& __c);
488*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
489*58b9f456SAndroid Build Coastguard Worker    template <class _InputIter>
490*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_INLINE_VISIBILITY
491*58b9f456SAndroid Build Coastguard Worker        priority_queue(_InputIter __f, _InputIter __l,
492*58b9f456SAndroid Build Coastguard Worker                       const value_compare& __comp, container_type&& __c);
493*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_CXX03_LANG
494*58b9f456SAndroid Build Coastguard Worker    template <class _Alloc>
495*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_INLINE_VISIBILITY
496*58b9f456SAndroid Build Coastguard Worker        explicit priority_queue(const _Alloc& __a,
497*58b9f456SAndroid Build Coastguard Worker                       typename enable_if<uses_allocator<container_type,
498*58b9f456SAndroid Build Coastguard Worker                                                         _Alloc>::value>::type* = 0);
499*58b9f456SAndroid Build Coastguard Worker    template <class _Alloc>
500*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_INLINE_VISIBILITY
501*58b9f456SAndroid Build Coastguard Worker        priority_queue(const value_compare& __comp, const _Alloc& __a,
502*58b9f456SAndroid Build Coastguard Worker                       typename enable_if<uses_allocator<container_type,
503*58b9f456SAndroid Build Coastguard Worker                                                         _Alloc>::value>::type* = 0);
504*58b9f456SAndroid Build Coastguard Worker    template <class _Alloc>
505*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_INLINE_VISIBILITY
506*58b9f456SAndroid Build Coastguard Worker        priority_queue(const value_compare& __comp, const container_type& __c,
507*58b9f456SAndroid Build Coastguard Worker                       const _Alloc& __a,
508*58b9f456SAndroid Build Coastguard Worker                       typename enable_if<uses_allocator<container_type,
509*58b9f456SAndroid Build Coastguard Worker                                                         _Alloc>::value>::type* = 0);
510*58b9f456SAndroid Build Coastguard Worker    template <class _Alloc>
511*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_INLINE_VISIBILITY
512*58b9f456SAndroid Build Coastguard Worker        priority_queue(const priority_queue& __q, const _Alloc& __a,
513*58b9f456SAndroid Build Coastguard Worker                       typename enable_if<uses_allocator<container_type,
514*58b9f456SAndroid Build Coastguard Worker                                                         _Alloc>::value>::type* = 0);
515*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
516*58b9f456SAndroid Build Coastguard Worker    template <class _Alloc>
517*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_INLINE_VISIBILITY
518*58b9f456SAndroid Build Coastguard Worker        priority_queue(const value_compare& __comp, container_type&& __c,
519*58b9f456SAndroid Build Coastguard Worker                       const _Alloc& __a,
520*58b9f456SAndroid Build Coastguard Worker                       typename enable_if<uses_allocator<container_type,
521*58b9f456SAndroid Build Coastguard Worker                                                         _Alloc>::value>::type* = 0);
522*58b9f456SAndroid Build Coastguard Worker    template <class _Alloc>
523*58b9f456SAndroid Build Coastguard Worker        _LIBCPP_INLINE_VISIBILITY
524*58b9f456SAndroid Build Coastguard Worker        priority_queue(priority_queue&& __q, const _Alloc& __a,
525*58b9f456SAndroid Build Coastguard Worker                       typename enable_if<uses_allocator<container_type,
526*58b9f456SAndroid Build Coastguard Worker                                                         _Alloc>::value>::type* = 0);
527*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_CXX03_LANG
528*58b9f456SAndroid Build Coastguard Worker
529*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY
530*58b9f456SAndroid Build Coastguard Worker    bool            empty() const {return c.empty();}
531*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
532*58b9f456SAndroid Build Coastguard Worker    size_type       size() const  {return c.size();}
533*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
534*58b9f456SAndroid Build Coastguard Worker    const_reference top() const   {return c.front();}
535*58b9f456SAndroid Build Coastguard Worker
536*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
537*58b9f456SAndroid Build Coastguard Worker    void push(const value_type& __v);
538*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
539*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
540*58b9f456SAndroid Build Coastguard Worker    void push(value_type&& __v);
541*58b9f456SAndroid Build Coastguard Worker    template <class... _Args>
542*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
543*58b9f456SAndroid Build Coastguard Worker    void emplace(_Args&&... __args);
544*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_CXX03_LANG
545*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
546*58b9f456SAndroid Build Coastguard Worker    void pop();
547*58b9f456SAndroid Build Coastguard Worker
548*58b9f456SAndroid Build Coastguard Worker    _LIBCPP_INLINE_VISIBILITY
549*58b9f456SAndroid Build Coastguard Worker    void swap(priority_queue& __q)
550*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_(__is_nothrow_swappable<container_type>::value &&
551*58b9f456SAndroid Build Coastguard Worker                   __is_nothrow_swappable<value_compare>::value);
552*58b9f456SAndroid Build Coastguard Worker};
553*58b9f456SAndroid Build Coastguard Worker
554*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
555*58b9f456SAndroid Build Coastguard Workertemplate <class _Compare,
556*58b9f456SAndroid Build Coastguard Worker          class _Container,
557*58b9f456SAndroid Build Coastguard Worker          class = typename enable_if<!__is_allocator<_Compare>::value, nullptr_t>::type,
558*58b9f456SAndroid Build Coastguard Worker          class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type
559*58b9f456SAndroid Build Coastguard Worker>
560*58b9f456SAndroid Build Coastguard Workerpriority_queue(_Compare, _Container)
561*58b9f456SAndroid Build Coastguard Worker    -> priority_queue<typename _Container::value_type, _Container, _Compare>;
562*58b9f456SAndroid Build Coastguard Worker
563*58b9f456SAndroid Build Coastguard Workertemplate<class _InputIterator,
564*58b9f456SAndroid Build Coastguard Worker         class _Compare   = less<typename iterator_traits<_InputIterator>::value_type>,
565*58b9f456SAndroid Build Coastguard Worker         class _Container = vector<typename iterator_traits<_InputIterator>::value_type>,
566*58b9f456SAndroid Build Coastguard Worker         class = typename enable_if< __is_input_iterator<_InputIterator>::value, nullptr_t>::type,
567*58b9f456SAndroid Build Coastguard Worker         class = typename enable_if<!__is_allocator<_Compare>::value, nullptr_t>::type,
568*58b9f456SAndroid Build Coastguard Worker         class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type
569*58b9f456SAndroid Build Coastguard Worker>
570*58b9f456SAndroid Build Coastguard Workerpriority_queue(_InputIterator, _InputIterator, _Compare = _Compare(), _Container = _Container())
571*58b9f456SAndroid Build Coastguard Worker    -> priority_queue<typename iterator_traits<_InputIterator>::value_type, _Container, _Compare>;
572*58b9f456SAndroid Build Coastguard Worker
573*58b9f456SAndroid Build Coastguard Workertemplate<class _Compare,
574*58b9f456SAndroid Build Coastguard Worker         class _Container,
575*58b9f456SAndroid Build Coastguard Worker         class _Alloc,
576*58b9f456SAndroid Build Coastguard Worker         class = typename enable_if<!__is_allocator<_Compare>::value, nullptr_t>::type,
577*58b9f456SAndroid Build Coastguard Worker         class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type,
578*58b9f456SAndroid Build Coastguard Worker         class = typename enable_if< __is_allocator<_Alloc>::value, nullptr_t>::type
579*58b9f456SAndroid Build Coastguard Worker>
580*58b9f456SAndroid Build Coastguard Workerpriority_queue(_Compare, _Container, _Alloc)
581*58b9f456SAndroid Build Coastguard Worker    -> priority_queue<typename _Container::value_type, _Container, _Compare>;
582*58b9f456SAndroid Build Coastguard Worker#endif
583*58b9f456SAndroid Build Coastguard Worker
584*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare>
585*58b9f456SAndroid Build Coastguard Workerinline
586*58b9f456SAndroid Build Coastguard Workerpriority_queue<_Tp, _Container, _Compare>::priority_queue(const _Compare& __comp,
587*58b9f456SAndroid Build Coastguard Worker                                                          const container_type& __c)
588*58b9f456SAndroid Build Coastguard Worker    : c(__c),
589*58b9f456SAndroid Build Coastguard Worker      comp(__comp)
590*58b9f456SAndroid Build Coastguard Worker{
591*58b9f456SAndroid Build Coastguard Worker    _VSTD::make_heap(c.begin(), c.end(), comp);
592*58b9f456SAndroid Build Coastguard Worker}
593*58b9f456SAndroid Build Coastguard Worker
594*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
595*58b9f456SAndroid Build Coastguard Worker
596*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare>
597*58b9f456SAndroid Build Coastguard Workerinline
598*58b9f456SAndroid Build Coastguard Workerpriority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp,
599*58b9f456SAndroid Build Coastguard Worker                                                          container_type&& __c)
600*58b9f456SAndroid Build Coastguard Worker    : c(_VSTD::move(__c)),
601*58b9f456SAndroid Build Coastguard Worker      comp(__comp)
602*58b9f456SAndroid Build Coastguard Worker{
603*58b9f456SAndroid Build Coastguard Worker    _VSTD::make_heap(c.begin(), c.end(), comp);
604*58b9f456SAndroid Build Coastguard Worker}
605*58b9f456SAndroid Build Coastguard Worker
606*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_CXX03_LANG
607*58b9f456SAndroid Build Coastguard Worker
608*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare>
609*58b9f456SAndroid Build Coastguard Workertemplate <class _InputIter>
610*58b9f456SAndroid Build Coastguard Workerinline
611*58b9f456SAndroid Build Coastguard Workerpriority_queue<_Tp, _Container, _Compare>::priority_queue(_InputIter __f, _InputIter __l,
612*58b9f456SAndroid Build Coastguard Worker                                                          const value_compare& __comp)
613*58b9f456SAndroid Build Coastguard Worker    : c(__f, __l),
614*58b9f456SAndroid Build Coastguard Worker      comp(__comp)
615*58b9f456SAndroid Build Coastguard Worker{
616*58b9f456SAndroid Build Coastguard Worker    _VSTD::make_heap(c.begin(), c.end(), comp);
617*58b9f456SAndroid Build Coastguard Worker}
618*58b9f456SAndroid Build Coastguard Worker
619*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare>
620*58b9f456SAndroid Build Coastguard Workertemplate <class _InputIter>
621*58b9f456SAndroid Build Coastguard Workerinline
622*58b9f456SAndroid Build Coastguard Workerpriority_queue<_Tp, _Container, _Compare>::priority_queue(_InputIter __f, _InputIter __l,
623*58b9f456SAndroid Build Coastguard Worker                                                          const value_compare& __comp,
624*58b9f456SAndroid Build Coastguard Worker                                                          const container_type& __c)
625*58b9f456SAndroid Build Coastguard Worker    : c(__c),
626*58b9f456SAndroid Build Coastguard Worker      comp(__comp)
627*58b9f456SAndroid Build Coastguard Worker{
628*58b9f456SAndroid Build Coastguard Worker    c.insert(c.end(), __f, __l);
629*58b9f456SAndroid Build Coastguard Worker    _VSTD::make_heap(c.begin(), c.end(), comp);
630*58b9f456SAndroid Build Coastguard Worker}
631*58b9f456SAndroid Build Coastguard Worker
632*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
633*58b9f456SAndroid Build Coastguard Worker
634*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare>
635*58b9f456SAndroid Build Coastguard Workertemplate <class _InputIter>
636*58b9f456SAndroid Build Coastguard Workerinline
637*58b9f456SAndroid Build Coastguard Workerpriority_queue<_Tp, _Container, _Compare>::priority_queue(_InputIter __f, _InputIter __l,
638*58b9f456SAndroid Build Coastguard Worker                                                          const value_compare& __comp,
639*58b9f456SAndroid Build Coastguard Worker                                                          container_type&& __c)
640*58b9f456SAndroid Build Coastguard Worker    : c(_VSTD::move(__c)),
641*58b9f456SAndroid Build Coastguard Worker      comp(__comp)
642*58b9f456SAndroid Build Coastguard Worker{
643*58b9f456SAndroid Build Coastguard Worker    c.insert(c.end(), __f, __l);
644*58b9f456SAndroid Build Coastguard Worker    _VSTD::make_heap(c.begin(), c.end(), comp);
645*58b9f456SAndroid Build Coastguard Worker}
646*58b9f456SAndroid Build Coastguard Worker
647*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_CXX03_LANG
648*58b9f456SAndroid Build Coastguard Worker
649*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare>
650*58b9f456SAndroid Build Coastguard Workertemplate <class _Alloc>
651*58b9f456SAndroid Build Coastguard Workerinline
652*58b9f456SAndroid Build Coastguard Workerpriority_queue<_Tp, _Container, _Compare>::priority_queue(const _Alloc& __a,
653*58b9f456SAndroid Build Coastguard Worker                       typename enable_if<uses_allocator<container_type,
654*58b9f456SAndroid Build Coastguard Worker                                                         _Alloc>::value>::type*)
655*58b9f456SAndroid Build Coastguard Worker    : c(__a)
656*58b9f456SAndroid Build Coastguard Worker{
657*58b9f456SAndroid Build Coastguard Worker}
658*58b9f456SAndroid Build Coastguard Worker
659*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare>
660*58b9f456SAndroid Build Coastguard Workertemplate <class _Alloc>
661*58b9f456SAndroid Build Coastguard Workerinline
662*58b9f456SAndroid Build Coastguard Workerpriority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp,
663*58b9f456SAndroid Build Coastguard Worker                                                          const _Alloc& __a,
664*58b9f456SAndroid Build Coastguard Worker                       typename enable_if<uses_allocator<container_type,
665*58b9f456SAndroid Build Coastguard Worker                                                         _Alloc>::value>::type*)
666*58b9f456SAndroid Build Coastguard Worker    : c(__a),
667*58b9f456SAndroid Build Coastguard Worker      comp(__comp)
668*58b9f456SAndroid Build Coastguard Worker{
669*58b9f456SAndroid Build Coastguard Worker}
670*58b9f456SAndroid Build Coastguard Worker
671*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare>
672*58b9f456SAndroid Build Coastguard Workertemplate <class _Alloc>
673*58b9f456SAndroid Build Coastguard Workerinline
674*58b9f456SAndroid Build Coastguard Workerpriority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp,
675*58b9f456SAndroid Build Coastguard Worker                                                          const container_type& __c,
676*58b9f456SAndroid Build Coastguard Worker                                                          const _Alloc& __a,
677*58b9f456SAndroid Build Coastguard Worker                       typename enable_if<uses_allocator<container_type,
678*58b9f456SAndroid Build Coastguard Worker                                                         _Alloc>::value>::type*)
679*58b9f456SAndroid Build Coastguard Worker    : c(__c, __a),
680*58b9f456SAndroid Build Coastguard Worker      comp(__comp)
681*58b9f456SAndroid Build Coastguard Worker{
682*58b9f456SAndroid Build Coastguard Worker    _VSTD::make_heap(c.begin(), c.end(), comp);
683*58b9f456SAndroid Build Coastguard Worker}
684*58b9f456SAndroid Build Coastguard Worker
685*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare>
686*58b9f456SAndroid Build Coastguard Workertemplate <class _Alloc>
687*58b9f456SAndroid Build Coastguard Workerinline
688*58b9f456SAndroid Build Coastguard Workerpriority_queue<_Tp, _Container, _Compare>::priority_queue(const priority_queue& __q,
689*58b9f456SAndroid Build Coastguard Worker                                                          const _Alloc& __a,
690*58b9f456SAndroid Build Coastguard Worker                       typename enable_if<uses_allocator<container_type,
691*58b9f456SAndroid Build Coastguard Worker                                                         _Alloc>::value>::type*)
692*58b9f456SAndroid Build Coastguard Worker    : c(__q.c, __a),
693*58b9f456SAndroid Build Coastguard Worker      comp(__q.comp)
694*58b9f456SAndroid Build Coastguard Worker{
695*58b9f456SAndroid Build Coastguard Worker    _VSTD::make_heap(c.begin(), c.end(), comp);
696*58b9f456SAndroid Build Coastguard Worker}
697*58b9f456SAndroid Build Coastguard Worker
698*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
699*58b9f456SAndroid Build Coastguard Worker
700*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare>
701*58b9f456SAndroid Build Coastguard Workertemplate <class _Alloc>
702*58b9f456SAndroid Build Coastguard Workerinline
703*58b9f456SAndroid Build Coastguard Workerpriority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp,
704*58b9f456SAndroid Build Coastguard Worker                                                          container_type&& __c,
705*58b9f456SAndroid Build Coastguard Worker                                                          const _Alloc& __a,
706*58b9f456SAndroid Build Coastguard Worker                       typename enable_if<uses_allocator<container_type,
707*58b9f456SAndroid Build Coastguard Worker                                                         _Alloc>::value>::type*)
708*58b9f456SAndroid Build Coastguard Worker    : c(_VSTD::move(__c), __a),
709*58b9f456SAndroid Build Coastguard Worker      comp(__comp)
710*58b9f456SAndroid Build Coastguard Worker{
711*58b9f456SAndroid Build Coastguard Worker    _VSTD::make_heap(c.begin(), c.end(), comp);
712*58b9f456SAndroid Build Coastguard Worker}
713*58b9f456SAndroid Build Coastguard Worker
714*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare>
715*58b9f456SAndroid Build Coastguard Workertemplate <class _Alloc>
716*58b9f456SAndroid Build Coastguard Workerinline
717*58b9f456SAndroid Build Coastguard Workerpriority_queue<_Tp, _Container, _Compare>::priority_queue(priority_queue&& __q,
718*58b9f456SAndroid Build Coastguard Worker                                                          const _Alloc& __a,
719*58b9f456SAndroid Build Coastguard Worker                       typename enable_if<uses_allocator<container_type,
720*58b9f456SAndroid Build Coastguard Worker                                                         _Alloc>::value>::type*)
721*58b9f456SAndroid Build Coastguard Worker    : c(_VSTD::move(__q.c), __a),
722*58b9f456SAndroid Build Coastguard Worker      comp(_VSTD::move(__q.comp))
723*58b9f456SAndroid Build Coastguard Worker{
724*58b9f456SAndroid Build Coastguard Worker    _VSTD::make_heap(c.begin(), c.end(), comp);
725*58b9f456SAndroid Build Coastguard Worker}
726*58b9f456SAndroid Build Coastguard Worker
727*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_CXX03_LANG
728*58b9f456SAndroid Build Coastguard Worker
729*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare>
730*58b9f456SAndroid Build Coastguard Workerinline
731*58b9f456SAndroid Build Coastguard Workervoid
732*58b9f456SAndroid Build Coastguard Workerpriority_queue<_Tp, _Container, _Compare>::push(const value_type& __v)
733*58b9f456SAndroid Build Coastguard Worker{
734*58b9f456SAndroid Build Coastguard Worker    c.push_back(__v);
735*58b9f456SAndroid Build Coastguard Worker    _VSTD::push_heap(c.begin(), c.end(), comp);
736*58b9f456SAndroid Build Coastguard Worker}
737*58b9f456SAndroid Build Coastguard Worker
738*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG
739*58b9f456SAndroid Build Coastguard Worker
740*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare>
741*58b9f456SAndroid Build Coastguard Workerinline
742*58b9f456SAndroid Build Coastguard Workervoid
743*58b9f456SAndroid Build Coastguard Workerpriority_queue<_Tp, _Container, _Compare>::push(value_type&& __v)
744*58b9f456SAndroid Build Coastguard Worker{
745*58b9f456SAndroid Build Coastguard Worker    c.push_back(_VSTD::move(__v));
746*58b9f456SAndroid Build Coastguard Worker    _VSTD::push_heap(c.begin(), c.end(), comp);
747*58b9f456SAndroid Build Coastguard Worker}
748*58b9f456SAndroid Build Coastguard Worker
749*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare>
750*58b9f456SAndroid Build Coastguard Workertemplate <class... _Args>
751*58b9f456SAndroid Build Coastguard Workerinline
752*58b9f456SAndroid Build Coastguard Workervoid
753*58b9f456SAndroid Build Coastguard Workerpriority_queue<_Tp, _Container, _Compare>::emplace(_Args&&... __args)
754*58b9f456SAndroid Build Coastguard Worker{
755*58b9f456SAndroid Build Coastguard Worker    c.emplace_back(_VSTD::forward<_Args>(__args)...);
756*58b9f456SAndroid Build Coastguard Worker    _VSTD::push_heap(c.begin(), c.end(), comp);
757*58b9f456SAndroid Build Coastguard Worker}
758*58b9f456SAndroid Build Coastguard Worker
759*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_CXX03_LANG
760*58b9f456SAndroid Build Coastguard Worker
761*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare>
762*58b9f456SAndroid Build Coastguard Workerinline
763*58b9f456SAndroid Build Coastguard Workervoid
764*58b9f456SAndroid Build Coastguard Workerpriority_queue<_Tp, _Container, _Compare>::pop()
765*58b9f456SAndroid Build Coastguard Worker{
766*58b9f456SAndroid Build Coastguard Worker    _VSTD::pop_heap(c.begin(), c.end(), comp);
767*58b9f456SAndroid Build Coastguard Worker    c.pop_back();
768*58b9f456SAndroid Build Coastguard Worker}
769*58b9f456SAndroid Build Coastguard Worker
770*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare>
771*58b9f456SAndroid Build Coastguard Workerinline
772*58b9f456SAndroid Build Coastguard Workervoid
773*58b9f456SAndroid Build Coastguard Workerpriority_queue<_Tp, _Container, _Compare>::swap(priority_queue& __q)
774*58b9f456SAndroid Build Coastguard Worker        _NOEXCEPT_(__is_nothrow_swappable<container_type>::value &&
775*58b9f456SAndroid Build Coastguard Worker                   __is_nothrow_swappable<value_compare>::value)
776*58b9f456SAndroid Build Coastguard Worker{
777*58b9f456SAndroid Build Coastguard Worker    using _VSTD::swap;
778*58b9f456SAndroid Build Coastguard Worker    swap(c, __q.c);
779*58b9f456SAndroid Build Coastguard Worker    swap(comp, __q.comp);
780*58b9f456SAndroid Build Coastguard Worker}
781*58b9f456SAndroid Build Coastguard Worker
782*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare>
783*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY
784*58b9f456SAndroid Build Coastguard Workertypename enable_if<
785*58b9f456SAndroid Build Coastguard Worker    __is_swappable<_Container>::value
786*58b9f456SAndroid Build Coastguard Worker    && __is_swappable<_Compare>::value,
787*58b9f456SAndroid Build Coastguard Worker    void
788*58b9f456SAndroid Build Coastguard Worker>::type
789*58b9f456SAndroid Build Coastguard Workerswap(priority_queue<_Tp, _Container, _Compare>& __x,
790*58b9f456SAndroid Build Coastguard Worker     priority_queue<_Tp, _Container, _Compare>& __y)
791*58b9f456SAndroid Build Coastguard Worker    _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y)))
792*58b9f456SAndroid Build Coastguard Worker{
793*58b9f456SAndroid Build Coastguard Worker    __x.swap(__y);
794*58b9f456SAndroid Build Coastguard Worker}
795*58b9f456SAndroid Build Coastguard Worker
796*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Container, class _Compare, class _Alloc>
797*58b9f456SAndroid Build Coastguard Workerstruct _LIBCPP_TEMPLATE_VIS uses_allocator<priority_queue<_Tp, _Container, _Compare>, _Alloc>
798*58b9f456SAndroid Build Coastguard Worker    : public uses_allocator<_Container, _Alloc>
799*58b9f456SAndroid Build Coastguard Worker{
800*58b9f456SAndroid Build Coastguard Worker};
801*58b9f456SAndroid Build Coastguard Worker
802*58b9f456SAndroid Build Coastguard Worker_LIBCPP_END_NAMESPACE_STD
803*58b9f456SAndroid Build Coastguard Worker
804*58b9f456SAndroid Build Coastguard Worker#endif  // _LIBCPP_QUEUE
805