Revert "Roll NDK to r11c and extract it into its own repository."
[android_tools.git] / ndk / sources / cxx-stl / llvm-libc++ / libcxx / include / queue
blobbdfd70603553a9dc2d4fccf23b798bf0161bd43b
1 // -*- C++ -*-
2 //===--------------------------- queue ------------------------------------===//
3 //
4 //                     The LLVM Compiler Infrastructure
5 //
6 // This file is dual licensed under the MIT and the University of Illinois Open
7 // Source Licenses. See LICENSE.TXT for details.
8 //
9 //===----------------------------------------------------------------------===//
11 #ifndef _LIBCPP_QUEUE
12 #define _LIBCPP_QUEUE
15     queue synopsis
17 namespace std
20 template <class T, class Container = deque<T>>
21 class queue
23 public:
24     typedef Container                                container_type;
25     typedef typename container_type::value_type      value_type;
26     typedef typename container_type::reference       reference;
27     typedef typename container_type::const_reference const_reference;
28     typedef typename container_type::size_type       size_type;
30 protected:
31     container_type c;
33 public:
34     queue() = default;
35     ~queue() = default;
37     queue(const queue& q) = default;
38     queue(queue&& q) = default;
40     queue& operator=(const queue& q) = default;
41     queue& operator=(queue&& q) = default;
43     explicit queue(const container_type& c);
44     explicit queue(container_type&& c)
45     template <class Alloc>
46         explicit queue(const Alloc& a);
47     template <class Alloc>
48         queue(const container_type& c, const Alloc& a);
49     template <class Alloc>
50         queue(container_type&& c, const Alloc& a);
51     template <class Alloc>
52         queue(const queue& q, const Alloc& a);
53     template <class Alloc>
54         queue(queue&& q, const Alloc& a);
56     bool      empty() const;
57     size_type size() const;
59     reference       front();
60     const_reference front() const;
61     reference       back();
62     const_reference back() const;
64     void push(const value_type& v);
65     void push(value_type&& v);
66     template <class... Args> void emplace(Args&&... args);
67     void pop();
69     void swap(queue& q) noexcept(noexcept(swap(c, q.c)));
72 template <class T, class Container>
73   bool operator==(const queue<T, Container>& x,const queue<T, Container>& y);
75 template <class T, class Container>
76   bool operator< (const queue<T, Container>& x,const queue<T, Container>& y);
78 template <class T, class Container>
79   bool operator!=(const queue<T, Container>& x,const queue<T, Container>& y);
81 template <class T, class Container>
82   bool operator> (const queue<T, Container>& x,const queue<T, Container>& y);
84 template <class T, class Container>
85   bool operator>=(const queue<T, Container>& x,const queue<T, Container>& y);
87 template <class T, class Container>
88   bool operator<=(const queue<T, Container>& x,const queue<T, Container>& y);
90 template <class T, class Container>
91   void swap(queue<T, Container>& x, queue<T, Container>& y)
92   noexcept(noexcept(x.swap(y)));
94 template <class T, class Container = vector<T>,
95           class Compare = less<typename Container::value_type>>
96 class priority_queue
98 public:
99     typedef Container                                container_type;
100     typedef typename container_type::value_type      value_type;
101     typedef typename container_type::reference       reference;
102     typedef typename container_type::const_reference const_reference;
103     typedef typename container_type::size_type       size_type;
105 protected:
106     container_type c;
107     Compare comp;
109 public:
110     priority_queue() = default;
111     ~priority_queue() = default;
113     priority_queue(const priority_queue& q) = default;
114     priority_queue(priority_queue&& q) = default;
116     priority_queue& operator=(const priority_queue& q) = default;
117     priority_queue& operator=(priority_queue&& q) = default;
119     explicit priority_queue(const Compare& comp);
120     priority_queue(const Compare& comp, const container_type& c);
121     explicit priority_queue(const Compare& comp, container_type&& c);
122     template <class InputIterator>
123         priority_queue(InputIterator first, InputIterator last,
124                        const Compare& comp = Compare());
125     template <class InputIterator>
126         priority_queue(InputIterator first, InputIterator last,
127                        const Compare& comp, const container_type& c);
128     template <class InputIterator>
129         priority_queue(InputIterator first, InputIterator last,
130                        const Compare& comp, container_type&& c);
131     template <class Alloc>
132         explicit priority_queue(const Alloc& a);
133     template <class Alloc>
134         priority_queue(const Compare& comp, const Alloc& a);
135     template <class Alloc>
136         priority_queue(const Compare& comp, const container_type& c,
137                        const Alloc& a);
138     template <class Alloc>
139         priority_queue(const Compare& comp, container_type&& c,
140                        const Alloc& a);
141     template <class Alloc>
142         priority_queue(const priority_queue& q, const Alloc& a);
143     template <class Alloc>
144         priority_queue(priority_queue&& q, const Alloc& a);
146     bool            empty() const;
147     size_type       size() const;
148     const_reference top() const;
150     void push(const value_type& v);
151     void push(value_type&& v);
152     template <class... Args> void emplace(Args&&... args);
153     void pop();
155     void swap(priority_queue& q)
156         noexcept(noexcept(swap(c, q.c)) && noexcept(swap(comp.q.comp)));
159 template <class T, class Container, class Compare>
160   void swap(priority_queue<T, Container, Compare>& x,
161             priority_queue<T, Container, Compare>& y)
162             noexcept(noexcept(x.swap(y)));
164 }  // std
168 #include <__config>
169 #include <deque>
170 #include <vector>
171 #include <functional>
172 #include <algorithm>
174 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
175 #pragma GCC system_header
176 #endif
178 _LIBCPP_BEGIN_NAMESPACE_STD
180 template <class _Tp, class _Container> class _LIBCPP_TYPE_VIS_ONLY queue;
182 template <class _Tp, class _Container>
183 _LIBCPP_INLINE_VISIBILITY
184 bool
185 operator==(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y);
187 template <class _Tp, class _Container>
188 _LIBCPP_INLINE_VISIBILITY
189 bool
190 operator< (const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y);
192 template <class _Tp, class _Container = deque<_Tp> >
193 class _LIBCPP_TYPE_VIS_ONLY queue
195 public:
196     typedef _Container                               container_type;
197     typedef typename container_type::value_type      value_type;
198     typedef typename container_type::reference       reference;
199     typedef typename container_type::const_reference const_reference;
200     typedef typename container_type::size_type       size_type;
202 protected:
203     container_type c;
205 public:
206     _LIBCPP_INLINE_VISIBILITY
207     queue()
208         _NOEXCEPT_(is_nothrow_default_constructible<container_type>::value)
209         : c() {}
211     _LIBCPP_INLINE_VISIBILITY
212     queue(const queue& __q) : c(__q.c) {}
214 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
215     _LIBCPP_INLINE_VISIBILITY
216     queue(queue&& __q)
217         _NOEXCEPT_(is_nothrow_move_constructible<container_type>::value)
218         : c(_VSTD::move(__q.c)) {}
219 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
221     _LIBCPP_INLINE_VISIBILITY
222     queue& operator=(const queue& __q) {c = __q.c; return *this;}
224 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
225     _LIBCPP_INLINE_VISIBILITY
226     queue& operator=(queue&& __q)
227         _NOEXCEPT_(is_nothrow_move_assignable<container_type>::value)
228         {c = _VSTD::move(__q.c); return *this;}
229 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
231     _LIBCPP_INLINE_VISIBILITY
232     explicit queue(const container_type& __c)  : c(__c) {}
233 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
234     _LIBCPP_INLINE_VISIBILITY
235     explicit queue(container_type&& __c) : c(_VSTD::move(__c)) {}
236 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
237     template <class _Alloc>
238         _LIBCPP_INLINE_VISIBILITY
239         explicit queue(const _Alloc& __a,
240                        typename enable_if<uses_allocator<container_type,
241                                                          _Alloc>::value>::type* = 0)
242             : c(__a) {}
243     template <class _Alloc>
244         _LIBCPP_INLINE_VISIBILITY
245         queue(const queue& __q, const _Alloc& __a,
246                        typename enable_if<uses_allocator<container_type,
247                                                          _Alloc>::value>::type* = 0)
248             : c(__q.c, __a) {}
249     template <class _Alloc>
250         _LIBCPP_INLINE_VISIBILITY
251         queue(const container_type& __c, const _Alloc& __a,
252                        typename enable_if<uses_allocator<container_type,
253                                                          _Alloc>::value>::type* = 0)
254             : c(__c, __a) {}
255 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
256     template <class _Alloc>
257         _LIBCPP_INLINE_VISIBILITY
258         queue(container_type&& __c, const _Alloc& __a,
259                        typename enable_if<uses_allocator<container_type,
260                                                          _Alloc>::value>::type* = 0)
261             : c(_VSTD::move(__c), __a) {}
262     template <class _Alloc>
263         _LIBCPP_INLINE_VISIBILITY
264         queue(queue&& __q, const _Alloc& __a,
265                        typename enable_if<uses_allocator<container_type,
266                                                          _Alloc>::value>::type* = 0)
267             : c(_VSTD::move(__q.c), __a) {}
269 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
271     _LIBCPP_INLINE_VISIBILITY
272     bool      empty() const {return c.empty();}
273     _LIBCPP_INLINE_VISIBILITY
274     size_type size() const  {return c.size();}
276     _LIBCPP_INLINE_VISIBILITY
277     reference       front()       {return c.front();}
278     _LIBCPP_INLINE_VISIBILITY
279     const_reference front() const {return c.front();}
280     _LIBCPP_INLINE_VISIBILITY
281     reference       back()        {return c.back();}
282     _LIBCPP_INLINE_VISIBILITY
283     const_reference back() const  {return c.back();}
285     _LIBCPP_INLINE_VISIBILITY
286     void push(const value_type& __v) {c.push_back(__v);}
287 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
288     _LIBCPP_INLINE_VISIBILITY
289     void push(value_type&& __v)      {c.push_back(_VSTD::move(__v));}
290 #ifndef _LIBCPP_HAS_NO_VARIADICS
291     template <class... _Args>
292         _LIBCPP_INLINE_VISIBILITY
293         void emplace(_Args&&... __args)
294             {c.emplace_back(_VSTD::forward<_Args>(__args)...);}
295 #endif  // _LIBCPP_HAS_NO_VARIADICS
296 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
297     _LIBCPP_INLINE_VISIBILITY
298     void pop() {c.pop_front();}
300     _LIBCPP_INLINE_VISIBILITY
301     void swap(queue& __q)
302         _NOEXCEPT_(__is_nothrow_swappable<container_type>::value)
303     {
304         using _VSTD::swap;
305         swap(c, __q.c);
306     }
308     template <class _T1, class _C1>
309     friend
310     _LIBCPP_INLINE_VISIBILITY
311     bool
312     operator==(const queue<_T1, _C1>& __x,const queue<_T1, _C1>& __y);
314     template <class _T1, class _C1>
315     friend
316     _LIBCPP_INLINE_VISIBILITY
317     bool
318     operator< (const queue<_T1, _C1>& __x,const queue<_T1, _C1>& __y);
321 template <class _Tp, class _Container>
322 inline _LIBCPP_INLINE_VISIBILITY
323 bool
324 operator==(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y)
326     return __x.c == __y.c;
329 template <class _Tp, class _Container>
330 inline _LIBCPP_INLINE_VISIBILITY
331 bool
332 operator< (const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y)
334     return __x.c < __y.c;
337 template <class _Tp, class _Container>
338 inline _LIBCPP_INLINE_VISIBILITY
339 bool
340 operator!=(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y)
342     return !(__x == __y);
345 template <class _Tp, class _Container>
346 inline _LIBCPP_INLINE_VISIBILITY
347 bool
348 operator> (const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y)
350     return __y < __x;
353 template <class _Tp, class _Container>
354 inline _LIBCPP_INLINE_VISIBILITY
355 bool
356 operator>=(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y)
358     return !(__x < __y);
361 template <class _Tp, class _Container>
362 inline _LIBCPP_INLINE_VISIBILITY
363 bool
364 operator<=(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y)
366     return !(__y < __x);
369 template <class _Tp, class _Container>
370 inline _LIBCPP_INLINE_VISIBILITY
371 void
372 swap(queue<_Tp, _Container>& __x, queue<_Tp, _Container>& __y)
373     _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y)))
375     __x.swap(__y);
378 template <class _Tp, class _Container, class _Alloc>
379 struct _LIBCPP_TYPE_VIS_ONLY uses_allocator<queue<_Tp, _Container>, _Alloc>
380     : public uses_allocator<_Container, _Alloc>
384 template <class _Tp, class _Container = vector<_Tp>,
385           class _Compare = less<typename _Container::value_type> >
386 class _LIBCPP_TYPE_VIS_ONLY priority_queue
388 public:
389     typedef _Container                               container_type;
390     typedef _Compare                                 value_compare;
391     typedef typename container_type::value_type      value_type;
392     typedef typename container_type::reference       reference;
393     typedef typename container_type::const_reference const_reference;
394     typedef typename container_type::size_type       size_type;
396 protected:
397     container_type c;
398     value_compare comp;
400 public:
401     _LIBCPP_INLINE_VISIBILITY
402     priority_queue()
403         _NOEXCEPT_(is_nothrow_default_constructible<container_type>::value &&
404                    is_nothrow_default_constructible<value_compare>::value)
405         : c(), comp() {}
407     _LIBCPP_INLINE_VISIBILITY
408     priority_queue(const priority_queue& __q) : c(__q.c), comp(__q.comp) {}
410 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
411     _LIBCPP_INLINE_VISIBILITY
412     priority_queue(priority_queue&& __q)
413         _NOEXCEPT_(is_nothrow_move_constructible<container_type>::value &&
414                    is_nothrow_move_constructible<value_compare>::value)
415         : c(_VSTD::move(__q.c)), comp(_VSTD::move(__q.comp)) {}
416 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
418     _LIBCPP_INLINE_VISIBILITY
419     priority_queue& operator=(const priority_queue& __q)
420         {c = __q.c; comp = __q.comp; return *this;}
422 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
423     _LIBCPP_INLINE_VISIBILITY
424     priority_queue& operator=(priority_queue&& __q)
425         _NOEXCEPT_(is_nothrow_move_assignable<container_type>::value &&
426                    is_nothrow_move_assignable<value_compare>::value)
427         {c = _VSTD::move(__q.c); comp = _VSTD::move(__q.comp); return *this;}
428 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
430     _LIBCPP_INLINE_VISIBILITY
431     explicit priority_queue(const value_compare& __comp)
432         : c(), comp(__comp) {}
433     priority_queue(const value_compare& __comp, const container_type& __c);
434 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
435     explicit priority_queue(const value_compare& __comp, container_type&& __c);
436 #endif
437     template <class _InputIter>
438         priority_queue(_InputIter __f, _InputIter __l,
439                        const value_compare& __comp = value_compare());
440     template <class _InputIter>
441         priority_queue(_InputIter __f, _InputIter __l,
442                        const value_compare& __comp, const container_type& __c);
443 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
444     template <class _InputIter>
445         priority_queue(_InputIter __f, _InputIter __l,
446                        const value_compare& __comp, container_type&& __c);
447 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
448     template <class _Alloc>
449         explicit priority_queue(const _Alloc& __a,
450                        typename enable_if<uses_allocator<container_type,
451                                                          _Alloc>::value>::type* = 0);
452     template <class _Alloc>
453         priority_queue(const value_compare& __comp, const _Alloc& __a,
454                        typename enable_if<uses_allocator<container_type,
455                                                          _Alloc>::value>::type* = 0);
456     template <class _Alloc>
457         priority_queue(const value_compare& __comp, const container_type& __c,
458                        const _Alloc& __a,
459                        typename enable_if<uses_allocator<container_type,
460                                                          _Alloc>::value>::type* = 0);
461     template <class _Alloc>
462         priority_queue(const priority_queue& __q, const _Alloc& __a,
463                        typename enable_if<uses_allocator<container_type,
464                                                          _Alloc>::value>::type* = 0);
465 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
466     template <class _Alloc>
467         priority_queue(const value_compare& __comp, container_type&& __c,
468                        const _Alloc& __a,
469                        typename enable_if<uses_allocator<container_type,
470                                                          _Alloc>::value>::type* = 0);
471     template <class _Alloc>
472         priority_queue(priority_queue&& __q, const _Alloc& __a,
473                        typename enable_if<uses_allocator<container_type,
474                                                          _Alloc>::value>::type* = 0);
475 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
477     _LIBCPP_INLINE_VISIBILITY
478     bool            empty() const {return c.empty();}
479     _LIBCPP_INLINE_VISIBILITY
480     size_type       size() const  {return c.size();}
481     _LIBCPP_INLINE_VISIBILITY
482     const_reference top() const   {return c.front();}
484     void push(const value_type& __v);
485 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
486     void push(value_type&& __v);
487 #ifndef _LIBCPP_HAS_NO_VARIADICS
488     template <class... _Args> void emplace(_Args&&... __args);
489 #endif
490 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
491     void pop();
493     void swap(priority_queue& __q)
494         _NOEXCEPT_(__is_nothrow_swappable<container_type>::value &&
495                    __is_nothrow_swappable<value_compare>::value);
498 template <class _Tp, class _Container, class _Compare>
499 inline _LIBCPP_INLINE_VISIBILITY
500 priority_queue<_Tp, _Container, _Compare>::priority_queue(const _Compare& __comp,
501                                                           const container_type& __c)
502     : c(__c),
503       comp(__comp)
505     _VSTD::make_heap(c.begin(), c.end(), comp);
508 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
510 template <class _Tp, class _Container, class _Compare>
511 inline _LIBCPP_INLINE_VISIBILITY
512 priority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp,
513                                                           container_type&& __c)
514     : c(_VSTD::move(__c)),
515       comp(__comp)
517     _VSTD::make_heap(c.begin(), c.end(), comp);
520 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
522 template <class _Tp, class _Container, class _Compare>
523 template <class _InputIter>
524 inline _LIBCPP_INLINE_VISIBILITY
525 priority_queue<_Tp, _Container, _Compare>::priority_queue(_InputIter __f, _InputIter __l,
526                                                           const value_compare& __comp)
527     : c(__f, __l),
528       comp(__comp)
530     _VSTD::make_heap(c.begin(), c.end(), comp);
533 template <class _Tp, class _Container, class _Compare>
534 template <class _InputIter>
535 inline _LIBCPP_INLINE_VISIBILITY
536 priority_queue<_Tp, _Container, _Compare>::priority_queue(_InputIter __f, _InputIter __l,
537                                                           const value_compare& __comp,
538                                                           const container_type& __c)
539     : c(__c),
540       comp(__comp)
542     c.insert(c.end(), __f, __l);
543     _VSTD::make_heap(c.begin(), c.end(), comp);
546 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
548 template <class _Tp, class _Container, class _Compare>
549 template <class _InputIter>
550 inline _LIBCPP_INLINE_VISIBILITY
551 priority_queue<_Tp, _Container, _Compare>::priority_queue(_InputIter __f, _InputIter __l,
552                                                           const value_compare& __comp,
553                                                           container_type&& __c)
554     : c(_VSTD::move(__c)),
555       comp(__comp)
557     c.insert(c.end(), __f, __l);
558     _VSTD::make_heap(c.begin(), c.end(), comp);
561 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
563 template <class _Tp, class _Container, class _Compare>
564 template <class _Alloc>
565 inline _LIBCPP_INLINE_VISIBILITY
566 priority_queue<_Tp, _Container, _Compare>::priority_queue(const _Alloc& __a,
567                        typename enable_if<uses_allocator<container_type,
568                                                          _Alloc>::value>::type*)
569     : c(__a)
573 template <class _Tp, class _Container, class _Compare>
574 template <class _Alloc>
575 inline _LIBCPP_INLINE_VISIBILITY
576 priority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp,
577                                                           const _Alloc& __a,
578                        typename enable_if<uses_allocator<container_type,
579                                                          _Alloc>::value>::type*)
580     : c(__a),
581       comp(__comp)
585 template <class _Tp, class _Container, class _Compare>
586 template <class _Alloc>
587 inline _LIBCPP_INLINE_VISIBILITY
588 priority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp,
589                                                           const container_type& __c,
590                                                           const _Alloc& __a,
591                        typename enable_if<uses_allocator<container_type,
592                                                          _Alloc>::value>::type*)
593     : c(__c, __a),
594       comp(__comp)
596     _VSTD::make_heap(c.begin(), c.end(), comp);
599 template <class _Tp, class _Container, class _Compare>
600 template <class _Alloc>
601 inline _LIBCPP_INLINE_VISIBILITY
602 priority_queue<_Tp, _Container, _Compare>::priority_queue(const priority_queue& __q,
603                                                           const _Alloc& __a,
604                        typename enable_if<uses_allocator<container_type,
605                                                          _Alloc>::value>::type*)
606     : c(__q.c, __a),
607       comp(__q.comp)
609     _VSTD::make_heap(c.begin(), c.end(), comp);
612 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
614 template <class _Tp, class _Container, class _Compare>
615 template <class _Alloc>
616 inline _LIBCPP_INLINE_VISIBILITY
617 priority_queue<_Tp, _Container, _Compare>::priority_queue(const value_compare& __comp,
618                                                           container_type&& __c,
619                                                           const _Alloc& __a,
620                        typename enable_if<uses_allocator<container_type,
621                                                          _Alloc>::value>::type*)
622     : c(_VSTD::move(__c), __a),
623       comp(__comp)
625     _VSTD::make_heap(c.begin(), c.end(), comp);
628 template <class _Tp, class _Container, class _Compare>
629 template <class _Alloc>
630 inline _LIBCPP_INLINE_VISIBILITY
631 priority_queue<_Tp, _Container, _Compare>::priority_queue(priority_queue&& __q,
632                                                           const _Alloc& __a,
633                        typename enable_if<uses_allocator<container_type,
634                                                          _Alloc>::value>::type*)
635     : c(_VSTD::move(__q.c), __a),
636       comp(_VSTD::move(__q.comp))
638     _VSTD::make_heap(c.begin(), c.end(), comp);
641 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
643 template <class _Tp, class _Container, class _Compare>
644 inline _LIBCPP_INLINE_VISIBILITY
645 void
646 priority_queue<_Tp, _Container, _Compare>::push(const value_type& __v)
648     c.push_back(__v);
649     _VSTD::push_heap(c.begin(), c.end(), comp);
652 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
654 template <class _Tp, class _Container, class _Compare>
655 inline _LIBCPP_INLINE_VISIBILITY
656 void
657 priority_queue<_Tp, _Container, _Compare>::push(value_type&& __v)
659     c.push_back(_VSTD::move(__v));
660     _VSTD::push_heap(c.begin(), c.end(), comp);
663 #ifndef _LIBCPP_HAS_NO_VARIADICS
665 template <class _Tp, class _Container, class _Compare>
666 template <class... _Args>
667 inline _LIBCPP_INLINE_VISIBILITY
668 void
669 priority_queue<_Tp, _Container, _Compare>::emplace(_Args&&... __args)
671     c.emplace_back(_VSTD::forward<_Args>(__args)...);
672     _VSTD::push_heap(c.begin(), c.end(), comp);
675 #endif  // _LIBCPP_HAS_NO_VARIADICS
676 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
678 template <class _Tp, class _Container, class _Compare>
679 inline _LIBCPP_INLINE_VISIBILITY
680 void
681 priority_queue<_Tp, _Container, _Compare>::pop()
683     _VSTD::pop_heap(c.begin(), c.end(), comp);
684     c.pop_back();
687 template <class _Tp, class _Container, class _Compare>
688 inline _LIBCPP_INLINE_VISIBILITY
689 void
690 priority_queue<_Tp, _Container, _Compare>::swap(priority_queue& __q)
691         _NOEXCEPT_(__is_nothrow_swappable<container_type>::value &&
692                    __is_nothrow_swappable<value_compare>::value)
694     using _VSTD::swap;
695     swap(c, __q.c);
696     swap(comp, __q.comp);
699 template <class _Tp, class _Container, class _Compare>
700 inline _LIBCPP_INLINE_VISIBILITY
701 void
702 swap(priority_queue<_Tp, _Container, _Compare>& __x,
703      priority_queue<_Tp, _Container, _Compare>& __y)
704     _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y)))
706     __x.swap(__y);
709 template <class _Tp, class _Container, class _Compare, class _Alloc>
710 struct _LIBCPP_TYPE_VIS_ONLY uses_allocator<priority_queue<_Tp, _Container, _Compare>, _Alloc>
711     : public uses_allocator<_Container, _Alloc>
715 _LIBCPP_END_NAMESPACE_STD
717 #endif  // _LIBCPP_QUEUE