39 #ifndef ECUDA_ALGO_EQUAL_HPP 
   40 #define ECUDA_ALGO_EQUAL_HPP 
   45 #include "../global.hpp" 
   46 #include "../iterator.hpp" 
   47 #include "../utility.hpp" 
   52 template<
class InputIterator1,
class InputIterator2> 
__HOST__ __DEVICE__ inline bool equal( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2 );
 
   57 template<
class InputIterator1,
class InputIterator2>
 
   67 template<
class InputIterator1,
class InputIterator2>
 
   73     typedef typename ecuda::remove_const<typename ecuda::iterator_traits<InputIterator1>::value_type>::type valtype1;
 
   74     std::vector< valtype1, host_allocator<valtype1> > v1( static_cast<std::size_t>(
ecuda::distance(first1,last1)) );
 
   76     return std::equal( v1.begin(), v1.end(), first2 );
 
   81 template<
class InputIterator,
typename T,
typename P>
 
   83     device_contiguous_block_iterator<T,P> first1,
 
   84     device_contiguous_block_iterator<T,P> last1,
 
   89     while( first1 != last1 ) {
 
   90         typename device_contiguous_block_iterator<T,P>::contiguous_iterator blockBegin = first1.contiguous_begin();
 
   91         typename device_contiguous_block_iterator<T,P>::contiguous_iterator blockEnd = first1.contiguous_end();
 
   92         if( !::
ecuda::equal( blockBegin, blockEnd, first2 ) ) 
return false;
 
  101 template<
class InputIterator1,
class InputIterator2>
 
  104     InputIterator2 last2 = first2;
 
  109 template<
class InputIterator1,
typename T,
typename P>
 
  111     InputIterator1 first1, InputIterator1 last1,
 
  112     device_contiguous_block_iterator<T,P> first2,
 
  116     while( first1 != last1 ) {
 
  117         typename device_contiguous_block_iterator<T,P>::contiguous_iterator blockBegin = first2.contiguous_begin();
 
  118         typename device_contiguous_block_iterator<T,P>::contiguous_iterator blockEnd = first2.contiguous_end();
 
  119         if( !
equal( blockBegin, blockEnd, first1 ) ) 
return false;
 
  127 template<
class InputIterator1,
class InputIterator2>
 
  129     InputIterator1 first1, InputIterator1 last1,
 
  130     InputIterator2 first2,
 
  135     for( ; first1 != last1; ++first1, ++first2 ) 
if( !(*first1 == *first2) ) 
return false;
 
  139     typedef typename ecuda::remove_const<typename ecuda::iterator_traits<InputIterator1>::value_type>::type valtype1;
 
  140     typedef typename ecuda::remove_const<typename ecuda::iterator_traits<InputIterator2>::value_type>::type valtype2;
 
  141     InputIterator2 last2 = first2;
 
  144     std::vector< valtype1, host_allocator<valtype1> > v1( 
ecuda::distance( first1, last1 ) );
 
  145     std::vector< valtype2, host_allocator<valtype2> > v2( 
ecuda::distance( first2, last2 ) );
 
  148     return std::equal( v1.begin(), v1.end(), v2.begin() );
 
  172 template<
class InputIterator1,
class InputIterator2>
 
__HOST__ __DEVICE__ OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result)
Replacement for std::copy. 
ECUDA_SUPPRESS_HD_WARNINGS __HOST__ __DEVICE__ void advance(InputIterator &iterator, Distance n)
Increments given iterator by n elements. 
ecuda::false_type is_device_iterator
ECUDA_SUPPRESS_HD_WARNINGS __HOST__ __DEVICE__ bool equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2)
Replacement for std::equal. 
Couples together a pair of values. 
__HOST__ __DEVICE__ bool equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2)
Replacement for std::equal. 
#define ECUDA_SUPPRESS_HD_WARNINGS
ECUDA_SUPPRESS_HD_WARNINGS __HOST__ __DEVICE__ std::iterator_traits< Iterator >::difference_type distance(const Iterator &first, const Iterator &last)