Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(670)

Side by Side Diff: third_party/libcxx/include/queue

Issue 75213003: Add libc++ and libc++abi to third-party. (Closed) Base URL: https://src.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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 //===----------------------------------------------------------------------===//
10
11 #ifndef _LIBCPP_QUEUE
12 #define _LIBCPP_QUEUE
13
14 /*
15 queue synopsis
16
17 namespace std
18 {
19
20 template <class T, class Container = deque<T>>
21 class queue
22 {
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;
29
30 protected:
31 container_type c;
32
33 public:
34 queue() = default;
35 ~queue() = default;
36
37 queue(const queue& q) = default;
38 queue(queue&& q) = default;
39
40 queue& operator=(const queue& q) = default;
41 queue& operator=(queue&& q) = default;
42
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);
55
56 bool empty() const;
57 size_type size() const;
58
59 reference front();
60 const_reference front() const;
61 reference back();
62 const_reference back() const;
63
64 void push(const value_type& v);
65 void push(value_type&& v);
66 template <class... Args> void emplace(Args&&... args);
67 void pop();
68
69 void swap(queue& q) noexcept(noexcept(swap(c, q.c)));
70 };
71
72 template <class T, class Container>
73 bool operator==(const queue<T, Container>& x,const queue<T, Container>& y);
74
75 template <class T, class Container>
76 bool operator< (const queue<T, Container>& x,const queue<T, Container>& y);
77
78 template <class T, class Container>
79 bool operator!=(const queue<T, Container>& x,const queue<T, Container>& y);
80
81 template <class T, class Container>
82 bool operator> (const queue<T, Container>& x,const queue<T, Container>& y);
83
84 template <class T, class Container>
85 bool operator>=(const queue<T, Container>& x,const queue<T, Container>& y);
86
87 template <class T, class Container>
88 bool operator<=(const queue<T, Container>& x,const queue<T, Container>& y);
89
90 template <class T, class Container>
91 void swap(queue<T, Container>& x, queue<T, Container>& y)
92 noexcept(noexcept(x.swap(y)));
93
94 template <class T, class Container = vector<T>,
95 class Compare = less<typename Container::value_type>>
96 class priority_queue
97 {
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;
104
105 protected:
106 container_type c;
107 Compare comp;
108
109 public:
110 priority_queue() = default;
111 ~priority_queue() = default;
112
113 priority_queue(const priority_queue& q) = default;
114 priority_queue(priority_queue&& q) = default;
115
116 priority_queue& operator=(const priority_queue& q) = default;
117 priority_queue& operator=(priority_queue&& q) = default;
118
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);
145
146 bool empty() const;
147 size_type size() const;
148 const_reference top() const;
149
150 void push(const value_type& v);
151 void push(value_type&& v);
152 template <class... Args> void emplace(Args&&... args);
153 void pop();
154
155 void swap(priority_queue& q)
156 noexcept(noexcept(swap(c, q.c)) && noexcept(swap(comp.q.comp)));
157 };
158
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)));
163
164 } // std
165
166 */
167
168 #include <__config>
169 #include <deque>
170 #include <vector>
171 #include <functional>
172 #include <algorithm>
173
174 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
175 #pragma GCC system_header
176 #endif
177
178 _LIBCPP_BEGIN_NAMESPACE_STD
179
180 template <class _Tp, class _Container> class _LIBCPP_TYPE_VIS_ONLY queue;
181
182 template <class _Tp, class _Container>
183 _LIBCPP_INLINE_VISIBILITY
184 bool
185 operator==(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y);
186
187 template <class _Tp, class _Container>
188 _LIBCPP_INLINE_VISIBILITY
189 bool
190 operator< (const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y);
191
192 template <class _Tp, class _Container = deque<_Tp> >
193 class _LIBCPP_TYPE_VIS_ONLY queue
194 {
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;
201
202 protected:
203 container_type c;
204
205 public:
206 _LIBCPP_INLINE_VISIBILITY
207 queue()
208 _NOEXCEPT_(is_nothrow_default_constructible<container_type>::value)
209 : c() {}
210
211 _LIBCPP_INLINE_VISIBILITY
212 queue(const queue& __q) : c(__q.c) {}
213
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
220
221 _LIBCPP_INLINE_VISIBILITY
222 queue& operator=(const queue& __q) {c = __q.c; return *this;}
223
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
230
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) {}
268
269 #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
270
271 _LIBCPP_INLINE_VISIBILITY
272 bool empty() const {return c.empty();}
273 _LIBCPP_INLINE_VISIBILITY
274 size_type size() const {return c.size();}
275
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();}
284
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();}
299
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 }
307
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);
313
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);
319 };
320
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)
325 {
326 return __x.c == __y.c;
327 }
328
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)
333 {
334 return __x.c < __y.c;
335 }
336
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)
341 {
342 return !(__x == __y);
343 }
344
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)
349 {
350 return __y < __x;
351 }
352
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)
357 {
358 return !(__x < __y);
359 }
360
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)
365 {
366 return !(__y < __x);
367 }
368
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)))
374 {
375 __x.swap(__y);
376 }
377
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>
381 {
382 };
383
384 template <class _Tp, class _Container = vector<_Tp>,
385 class _Compare = less<typename _Container::value_type> >
386 class _LIBCPP_TYPE_VIS_ONLY priority_queue
387 {
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;
395
396 protected:
397 container_type c;
398 value_compare comp;
399
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() {}
406
407 _LIBCPP_INLINE_VISIBILITY
408 priority_queue(const priority_queue& __q) : c(__q.c), comp(__q.comp) {}
409
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
417
418 _LIBCPP_INLINE_VISIBILITY
419 priority_queue& operator=(const priority_queue& __q)
420 {c = __q.c; comp = __q.comp; return *this;}
421
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
429
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
476
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();}
483
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();
492
493 void swap(priority_queue& __q)
494 _NOEXCEPT_(__is_nothrow_swappable<container_type>::value &&
495 __is_nothrow_swappable<value_compare>::value);
496 };
497
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)
504 {
505 _VSTD::make_heap(c.begin(), c.end(), comp);
506 }
507
508 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
509
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)
516 {
517 _VSTD::make_heap(c.begin(), c.end(), comp);
518 }
519
520 #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
521
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, _Input Iter __l,
526 const value_compare& _ _comp)
527 : c(__f, __l),
528 comp(__comp)
529 {
530 _VSTD::make_heap(c.begin(), c.end(), comp);
531 }
532
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, _Input Iter __l,
537 const value_compare& _ _comp,
538 const container_type& __c)
539 : c(__c),
540 comp(__comp)
541 {
542 c.insert(c.end(), __f, __l);
543 _VSTD::make_heap(c.begin(), c.end(), comp);
544 }
545
546 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
547
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, _Input Iter __l,
552 const value_compare& _ _comp,
553 container_type&& __c)
554 : c(_VSTD::move(__c)),
555 comp(__comp)
556 {
557 c.insert(c.end(), __f, __l);
558 _VSTD::make_heap(c.begin(), c.end(), comp);
559 }
560
561 #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
562
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)
570 {
571 }
572
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)
582 {
583 }
584
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)
595 {
596 _VSTD::make_heap(c.begin(), c.end(), comp);
597 }
598
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)
608 {
609 _VSTD::make_heap(c.begin(), c.end(), comp);
610 }
611
612 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
613
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)
624 {
625 _VSTD::make_heap(c.begin(), c.end(), comp);
626 }
627
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))
637 {
638 _VSTD::make_heap(c.begin(), c.end(), comp);
639 }
640
641 #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
642
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)
647 {
648 c.push_back(__v);
649 _VSTD::push_heap(c.begin(), c.end(), comp);
650 }
651
652 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
653
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)
658 {
659 c.push_back(_VSTD::move(__v));
660 _VSTD::push_heap(c.begin(), c.end(), comp);
661 }
662
663 #ifndef _LIBCPP_HAS_NO_VARIADICS
664
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)
670 {
671 c.emplace_back(_VSTD::forward<_Args>(__args)...);
672 _VSTD::push_heap(c.begin(), c.end(), comp);
673 }
674
675 #endif // _LIBCPP_HAS_NO_VARIADICS
676 #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
677
678 template <class _Tp, class _Container, class _Compare>
679 inline _LIBCPP_INLINE_VISIBILITY
680 void
681 priority_queue<_Tp, _Container, _Compare>::pop()
682 {
683 _VSTD::pop_heap(c.begin(), c.end(), comp);
684 c.pop_back();
685 }
686
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)
693 {
694 using _VSTD::swap;
695 swap(c, __q.c);
696 swap(comp, __q.comp);
697 }
698
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)))
705 {
706 __x.swap(__y);
707 }
708
709 template <class _Tp, class _Container, class _Compare, class _Alloc>
710 struct _LIBCPP_TYPE_VIS_ONLY uses_allocator<priority_queue<_Tp, _Container, _Com pare>, _Alloc>
711 : public uses_allocator<_Container, _Alloc>
712 {
713 };
714
715 _LIBCPP_END_NAMESPACE_STD
716
717 #endif // _LIBCPP_QUEUE
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698