MUDA
Loading...
Searching...
No Matches
var_view.h
1#pragma once
2#include <cuda.h>
3#include <cinttypes>
4#include <muda/view/view_base.h>
5#include <muda/viewer/dense.h>
6
7namespace muda
8{
9template <bool IsConst, typename T>
10class VarViewT : public ViewBase<IsConst>
11{
12 using Base = ViewBase<IsConst>;
13
14 template <bool OtherIsConst, typename U>
15 friend class VarViewT;
16
17 protected:
18 template <typename U>
19 using auto_const_t = typename Base::template auto_const_t<U>;
20
21 auto_const_t<T>* m_data = nullptr;
22
23 public:
26
27 using ConstViewer = CDense<T>;
29 using ThisViewer = typename std::conditional_t<IsConst, ConstViewer, NonConstViewer>;
30
31 MUDA_GENERIC VarViewT() MUDA_NOEXCEPT = default;
32 MUDA_GENERIC VarViewT(auto_const_t<T>* data) MUDA_NOEXCEPT;
33
34 MUDA_GENERIC VarViewT(const VarViewT& other) MUDA_NOEXCEPT = default;
35 template <bool OtherIsConst>
36 MUDA_GENERIC VarViewT(const VarViewT<OtherIsConst, T>& other) MUDA_NOEXCEPT;
37
38 MUDA_GENERIC auto_const_t<T>* data() const MUDA_NOEXCEPT;
39
40 MUDA_GENERIC ConstView as_const() const MUDA_NOEXCEPT;
41
42 MUDA_GENERIC ConstViewer cviewer() const MUDA_NOEXCEPT;
43 MUDA_GENERIC ThisViewer viewer() const MUDA_NOEXCEPT;
44
45 MUDA_HOST void fill(const T& value) const MUDA_REQUIRES(!IsConst);
46 MUDA_HOST void copy_to(T* data) const;
47 MUDA_HOST void copy_from(const T* data) const MUDA_REQUIRES(!IsConst);
48 MUDA_HOST void copy_from(const ConstView& val) const MUDA_REQUIRES(!IsConst);
49
50 /**********************************************************************************
51 * VarView As Iterator
52 ***********************************************************************************/
53
54 // Random Access Iterator Interface
55 using value_type = T;
56 using reference = T&;
57 using pointer = T*;
58 using iterator_category = std::random_access_iterator_tag;
59 using difference_type = size_t;
60
61 MUDA_GENERIC reference operator*() { return *data(); }
62 MUDA_GENERIC auto_const_t<T>& operator[](int i) const { return *data(); }
63};
64
65template <typename T>
67
68template <typename T>
70
71// viewer traits
72template <typename T>
74{
75 using type = CVarView<T>;
76};
77
78template <typename T>
80{
81 using type = VarView<T>;
82};
83} // namespace muda
84
85
86#include "details/var_view.inl"
Definition dense_0d.h:8
Definition var_view.h:11
Definition view_base.h:8
Definition type_modifier.h:22
Definition type_modifier.h:28