epoc32/include/stdapis/boost/pending/is_heap.hpp
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
permissions -rw-r--r--
Final list of Symbian^2 public API header files
     1 //
     2 //=======================================================================
     3 // Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
     4 // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
     5 //
     6 // Distributed under the Boost Software License, Version 1.0. (See
     7 // accompanying file LICENSE_1_0.txt or copy at
     8 // http://www.boost.org/LICENSE_1_0.txt)
     9 //=======================================================================
    10 //
    11 #if __KCC
    12 namespace std {
    13 
    14 template <class RandomAccessIterator, class Distance>
    15 bool __is_heap(RandomAccessIterator first, RandomAccessIterator last,
    16                Distance*)
    17 {
    18   const Distance n = last - first;
    19 
    20   Distance parent = 0;
    21   for (Distance child = 1; child < n; ++child) {
    22     if (first[parent] < first[child]) 
    23       return false;
    24     if ((child & 1) == 0)
    25       ++parent;
    26   }
    27   return true;
    28 }
    29 
    30 template <class RandomAccessIterator>
    31 inline bool is_heap(RandomAccessIterator first, RandomAccessIterator last)
    32 {
    33   return __is_heap(first, last, distance_type(first));
    34 }
    35 
    36 
    37 template <class RandomAccessIterator, class Distance, class StrictWeakOrdering>
    38 bool __is_heap(RandomAccessIterator first, RandomAccessIterator last,
    39                StrictWeakOrdering comp,
    40                Distance*)
    41 {
    42   const Distance n = last - first;
    43 
    44   Distance parent = 0;
    45   for (Distance child = 1; child < n; ++child) {
    46     if (comp(first[parent], first[child]))
    47       return false;
    48     if ((child & 1) == 0)
    49       ++parent;
    50   }
    51   return true;
    52 }
    53 
    54 template <class RandomAccessIterator, class StrictWeakOrdering>
    55 inline bool is_heap(RandomAccessIterator first, RandomAccessIterator last,
    56                     StrictWeakOrdering comp)
    57 {
    58   return __is_heap(first, last, comp, distance_type(first));
    59 }
    60 
    61 }
    62 #endif