29 std::fill_n(data_.get(), n_, val);
35 std::copy(init.begin(), init.end(), data_.get());
39 if constexpr (std::is_same_v<T, real>) {
48 std::copy_n(o.data_.get(), n_, data_.get());
53 data_(std::move(o.data_)),
62 data_.reset(
new T[n_]);
63 std::copy_n(o.data_.get(), n_, data_.get());
70 if constexpr (std::is_same_v<T, real>) {
75 data_ = std::move(o.data_);
83 constexpr idx size() const noexcept {
return n_; }
88 T*
data() {
return data_.get(); }
89 const T*
data()
const {
return data_.get(); }
94 T*
begin() {
return data_.get(); }
95 T*
end() {
return data_.get() + n_; }
96 const T*
begin()
const {
return data_.get(); }
97 const T*
end()
const {
return data_.get() + n_; }
100 if constexpr (std::is_same_v<T, real>) {
109 if constexpr (std::is_same_v<T, real>) {
120 bool on_gpu()
const {
return d_data_ !=
nullptr; }
124 std::unique_ptr<T[]> data_;
125 real* d_data_ =
nullptr;
const real * gpu_data() const
BasicVector(idx n, T val)
BasicVector & operator=(BasicVector &&o) noexcept
BasicVector & operator=(const BasicVector &o)
T operator[](idx i) const
BasicVector(BasicVector &&o) noexcept
const BasicVector & vec() const
constexpr idx size() const noexcept
BasicVector(const BasicVector &o)
BasicVector(std::initializer_list< T > init)
Backend enum and default backend selection.
void to_device(real *dst, const real *src, idx n)
Copy host to device.
void free(real *ptr)
Free device memory.
real * alloc(idx n)
Allocate device memory.
void to_host(real *dst, const real *src, idx n)
Copy device to host.
void scale(Vector &v, real alpha, Backend b=default_backend)
Compute .
real dot(const Vector &x, const Vector &y, Backend b=default_backend)
Compute .
real norm(const Vector &x, Backend b=default_backend)
Compute .
std::complex< real > cplx
void axpy(real alpha, const Vector &x, Vector &y, Backend b=default_backend)
Compute .
constexpr Backend default_backend
void add(const Vector &x, const Vector &y, Vector &z, Backend b=default_backend)
Compute .
BasicVector< cplx > CVector
Complex-valued dense vector (sequential; no GPU)
real x(idx i) const noexcept
real y(idx i) const noexcept
idx size() const noexcept
Non-owning view of a flat vector as pairs.
real x(idx i) const noexcept
idx size() const noexcept
real y(idx i) const noexcept