39 #ifndef ECUDA_MODEL_DEVICE_SEQUENCE_HPP
40 #define ECUDA_MODEL_DEVICE_SEQUENCE_HPP
42 #include "../global.hpp"
43 #include "../memory.hpp"
44 #include "../iterator.hpp"
65 template<
typename T,
class P>
72 typedef typename ecuda::add_lvalue_reference<T>::type reference;
73 typedef typename ecuda::add_lvalue_reference<const T>::type const_reference;
74 typedef std::size_t size_type;
75 typedef std::ptrdiff_t difference_type;
77 typedef device_iterator< value_type,typename make_unmanaged<pointer>::type > iterator;
78 typedef device_iterator<const value_type,typename make_unmanaged_const<pointer>::type> const_iterator;
80 typedef reverse_device_iterator<iterator > reverse_iterator;
81 typedef reverse_device_iterator<const_iterator> const_reverse_iterator;
87 template<
typename U,
class Q>
friend class device_sequence;
94 __HOST__ __DEVICE__ device_sequence( pointer ptr = pointer(), size_type length = 0 ) : ptr(ptr), length(length) {}
96 __HOST__ __DEVICE__ device_sequence(
const device_sequence& src ) : ptr(src.ptr), length(src.length) {}
98 template<
typename U,
class Q>
__HOST__ __DEVICE__ device_sequence(
const device_sequence<U,Q>& src ) : ptr(src.ptr), length(src.length) {}
100 __HOST__ device_sequence& operator=(
const device_sequence& src )
107 #ifdef ECUDA_CPP11_AVAILABLE
108 __HOST__ device_sequence( device_sequence&& src ) : ptr(std::move(src.ptr)), length(std::move(src.length)) {}
109 __HOST__ device_sequence& operator=( device_sequence&& src )
111 ptr = std::move(src.ptr);
112 length = std::move(src.length);
119 __DEVICE__ inline reference operator[](
const size_type x ) {
return *(unmanaged_cast( ptr ) + x); }
120 __DEVICE__ inline const_reference operator[](
const size_type x )
const {
return *(unmanaged_cast( ptr ) + x); }
126 #ifdef ECUDA_CPP11_AVAILABLE
135 #ifdef ECUDA_CPP11_AVAILABLE
__HOST__ __DEVICE__ void swap(T &a, T &b) __NOEXCEPT__