4 * Hewlett-Packard Company
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.
15 * Silicon Graphics Computer Systems, Inc.
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.
26 /* NOTE: This is an internal header file, included by other STL headers.
27 * You should not attempt to use it directly.
30 #ifndef _STLP_INTERNAL_HEAP_H
31 #define _STLP_INTERNAL_HEAP_H
33 #ifndef _STLP_CONFIG_H
34 #include <stl/_config.h>
39 // Heap-manipulation functions: push_heap, pop_heap, make_heap, sort_heap.
41 template <class _RandomAccessIterator>
43 push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last);
46 template <class _RandomAccessIterator, class _Compare>
48 push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
51 template <class _RandomAccessIterator, class _Distance, class _Tp>
53 __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
54 _Distance __len, _Tp __val);
56 template <class _RandomAccessIterator, class _Tp, class _Distance>
58 __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
59 _RandomAccessIterator __result, _Tp __val, _Distance*)
62 __adjust_heap(__first, _Distance(0), _Distance(__last - __first), __val);
65 template <class _RandomAccessIterator>
66 void pop_heap(_RandomAccessIterator __first,
67 _RandomAccessIterator __last);
69 template <class _RandomAccessIterator, class _Distance,
70 class _Tp, class _Compare>
72 __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
73 _Distance __len, _Tp __val, _Compare __comp);
75 template <class _RandomAccessIterator, class _Tp, class _Compare,
78 __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
79 _RandomAccessIterator __result, _Tp __val, _Compare __comp,
83 __adjust_heap(__first, _Distance(0), _Distance(__last - __first),
87 template <class _RandomAccessIterator, class _Compare>
89 pop_heap(_RandomAccessIterator __first,
90 _RandomAccessIterator __last, _Compare __comp);
92 template <class _RandomAccessIterator>
94 make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last);
96 template <class _RandomAccessIterator, class _Compare>
98 make_heap(_RandomAccessIterator __first,
99 _RandomAccessIterator __last, _Compare __comp);
101 template <class _RandomAccessIterator>
103 void sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
105 while (__last - __first > 1)
106 pop_heap(__first, __last--);
109 template <class _RandomAccessIterator, class _Compare>
112 sort_heap(_RandomAccessIterator __first,
113 _RandomAccessIterator __last, _Compare __comp)
115 while (__last - __first > 1)
116 pop_heap(__first, __last--, __comp);
121 # if !defined (_STLP_LINK_TIME_INSTANTIATION)
122 # include <stl/_heap.c>
125 #endif /* _STLP_INTERNAL_HEAP_H */