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