[CLASSPNP] Fix MSVC build. Brought to you by Timo.
[reactos.git] / reactos / sdk / include / c++ / stlport / stl / _heap.h
1 /*
2 *
3 * Copyright (c) 1994
4 * Hewlett-Packard Company
5 *
6 * Permission to use, copy, modify, distribute and sell this software
7 * and its documentation for any purpose is hereby granted without fee,
8 * provided that the above copyright notice appear in all copies and
9 * that both that copyright notice and this permission notice appear
10 * in supporting documentation. Hewlett-Packard Company makes no
11 * representations about the suitability of this software for any
12 * purpose. It is provided "as is" without express or implied warranty.
13 *
14 * Copyright (c) 1997
15 * Silicon Graphics Computer Systems, Inc.
16 *
17 * Permission to use, copy, modify, distribute and sell this software
18 * and its documentation for any purpose is hereby granted without fee,
19 * provided that the above copyright notice appear in all copies and
20 * that both that copyright notice and this permission notice appear
21 * in supporting documentation. Silicon Graphics makes no
22 * representations about the suitability of this software for any
23 * purpose. It is provided "as is" without express or implied warranty.
24 */
25
26 /* NOTE: This is an internal header file, included by other STL headers.
27 * You should not attempt to use it directly.
28 */
29
30 #ifndef _STLP_INTERNAL_HEAP_H
31 #define _STLP_INTERNAL_HEAP_H
32
33 _STLP_BEGIN_NAMESPACE
34
35 // Heap-manipulation functions: push_heap, pop_heap, make_heap, sort_heap.
36
37 template <class _RandomAccessIterator>
38 void
39 push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last);
40
41
42 template <class _RandomAccessIterator, class _Compare>
43 void
44 push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
45 _Compare __comp);
46
47 template <class _RandomAccessIterator, class _Distance, class _Tp>
48 void
49 __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
50 _Distance __len, _Tp __val);
51
52 template <class _RandomAccessIterator, class _Tp, class _Distance>
53 inline void
54 __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
55 _RandomAccessIterator __result, _Tp __val, _Distance*)
56 {
57 *__result = *__first;
58 __adjust_heap(__first, _Distance(0), _Distance(__last - __first), __val);
59 }
60
61 template <class _RandomAccessIterator>
62 void pop_heap(_RandomAccessIterator __first,
63 _RandomAccessIterator __last);
64
65 template <class _RandomAccessIterator, class _Distance,
66 class _Tp, class _Compare>
67 void
68 __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
69 _Distance __len, _Tp __val, _Compare __comp);
70
71 template <class _RandomAccessIterator, class _Tp, class _Compare,
72 class _Distance>
73 inline void
74 __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
75 _RandomAccessIterator __result, _Tp __val, _Compare __comp,
76 _Distance*)
77 {
78 *__result = *__first;
79 __adjust_heap(__first, _Distance(0), _Distance(__last - __first),
80 __val, __comp);
81 }
82
83 template <class _RandomAccessIterator, class _Compare>
84 void
85 pop_heap(_RandomAccessIterator __first,
86 _RandomAccessIterator __last, _Compare __comp);
87
88 template <class _RandomAccessIterator>
89 void
90 make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last);
91
92 template <class _RandomAccessIterator, class _Compare>
93 void
94 make_heap(_RandomAccessIterator __first,
95 _RandomAccessIterator __last, _Compare __comp);
96
97 template <class _RandomAccessIterator>
98 _STLP_INLINE_LOOP
99 void sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
100 {
101 while (__last - __first > 1)
102 pop_heap(__first, __last--);
103 }
104
105 template <class _RandomAccessIterator, class _Compare>
106 _STLP_INLINE_LOOP
107 void
108 sort_heap(_RandomAccessIterator __first,
109 _RandomAccessIterator __last, _Compare __comp)
110 {
111 while (__last - __first > 1)
112 pop_heap(__first, __last--, __comp);
113 }
114
115 _STLP_END_NAMESPACE
116
117 # if !defined (_STLP_LINK_TIME_INSTANTIATION)
118 # include <stl/_heap.c>
119 # endif
120
121 #endif /* _STLP_INTERNAL_HEAP_H */
122
123 // Local Variables:
124 // mode:C++
125 // End: