39 #ifndef ECUDA_ALGO_MAX_ELEMENT_HPP
40 #define ECUDA_ALGO_MAX_ELEMENT_HPP
45 #include "../global.hpp"
46 #include "../iterator.hpp"
56 template<
class ForwardIterator>
60 if( first == last )
return last;
61 ForwardIterator largest = first;
63 for( ; first != last; ++first ) {
64 if( *largest < *first ) largest = first;
68 const bool isIteratorContiguous = ecuda::is_same<typename ecuda::iterator_traits<ForwardIterator>::is_contiguous,ecuda::true_type>::value;
69 ECUDA_STATIC_ASSERT(isIteratorContiguous,CANNOT_FIND_MAX_ELEMENT_IN_RANGE_REPRESENTED_BY_NONCONTIGUOUS_DEVICE_MEMORY);
71 std::vector<typename ecuda::iterator_traits<ForwardIterator>::value_type> hostVector( n );
73 const std::size_t index =
std::max_element( hostVector.begin(), hostVector.end() ) - hostVector.begin();
80 template<
class ForwardIterator>
93 template<
class ForwardIterator>
__HOST__ __DEVICE__ OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result)
Replacement for std::copy.
ecuda::false_type is_device_iterator
__HOST__ __DEVICE__ ForwardIterator max_element(ForwardIterator first, ForwardIterator last)
#define ECUDA_STATIC_ASSERT(x, msg)
base_type::difference_type difference_type
ECUDA_SUPPRESS_HD_WARNINGS __HOST__ __DEVICE__ std::iterator_traits< Iterator >::difference_type distance(const Iterator &first, const Iterator &last)