63 lines
1.8 KiB
C++
63 lines
1.8 KiB
C++
|
//
|
||
|
//=======================================================================
|
||
|
// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
|
||
|
// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
|
||
|
//
|
||
|
// Distributed under the Boost Software License, Version 1.0. (See
|
||
|
// accompanying file LICENSE_1_0.txt or copy at
|
||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||
|
//=======================================================================
|
||
|
//
|
||
|
#if __KCC
|
||
|
namespace std {
|
||
|
|
||
|
template <class RandomAccessIterator, class Distance>
|
||
|
bool __is_heap(RandomAccessIterator first, RandomAccessIterator last,
|
||
|
Distance*)
|
||
|
{
|
||
|
const Distance n = last - first;
|
||
|
|
||
|
Distance parent = 0;
|
||
|
for (Distance child = 1; child < n; ++child) {
|
||
|
if (first[parent] < first[child])
|
||
|
return false;
|
||
|
if ((child & 1) == 0)
|
||
|
++parent;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
template <class RandomAccessIterator>
|
||
|
inline bool is_heap(RandomAccessIterator first, RandomAccessIterator last)
|
||
|
{
|
||
|
return __is_heap(first, last, distance_type(first));
|
||
|
}
|
||
|
|
||
|
|
||
|
template <class RandomAccessIterator, class Distance, class StrictWeakOrdering>
|
||
|
bool __is_heap(RandomAccessIterator first, RandomAccessIterator last,
|
||
|
StrictWeakOrdering comp,
|
||
|
Distance*)
|
||
|
{
|
||
|
const Distance n = last - first;
|
||
|
|
||
|
Distance parent = 0;
|
||
|
for (Distance child = 1; child < n; ++child) {
|
||
|
if (comp(first[parent], first[child]))
|
||
|
return false;
|
||
|
if ((child & 1) == 0)
|
||
|
++parent;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
template <class RandomAccessIterator, class StrictWeakOrdering>
|
||
|
inline bool is_heap(RandomAccessIterator first, RandomAccessIterator last,
|
||
|
StrictWeakOrdering comp)
|
||
|
{
|
||
|
return __is_heap(first, last, comp, distance_type(first));
|
||
|
}
|
||
|
|
||
|
}
|
||
|
#endif
|