__forceinline__ __device__ RandomAccessIterator2 copy_n(const bounded<bound,agent<grainsize> > &b, RandomAccessIterator1 first, Size n, RandomAccessIterator2 result) { typedef typename bounded<bound,agent<grainsize> >::size_type size_type; if(bound <= n) { for(size_type i = 0; i < b.bound(); ++i, ++result, ++first) { *result = *first; } // end for i } // end if else { for(size_type i = 0; i < b.bound(); ++i, ++first) { if(i < n) { *result = *first; ++result; } // end if } // end for i } // end else return result; } // end copy_n()
__forceinline__ __device__ T accumulate(const bounded<bound,bulk::agent<grainsize> > &exec, RandomAccessIterator first, RandomAccessIterator last, T init, BinaryFunction binary_op) { typedef typename bounded<bound,bulk::agent<grainsize> >::size_type size_type; size_type n = last - first; for(size_type i = 0; i < exec.bound(); ++i) { if(i < n) { init = binary_op(init, first[i]); } // end if } // end for i return init; } // end accumulate()