muda
type_modifier.h
1 #pragma once
2 #include <type_traits>
3 #include <muda/muda_def.h>
4 
5 namespace muda
6 {
7 /*************************************************************************
8 *
9 * Raw Type
10 *
11 *************************************************************************/
12 template <typename T>
13 using raw_type_t = std::remove_all_extents_t<std::remove_reference_t<T>>;
14 
15 /*************************************************************************
16 *
17 * View Type
18 *
19 *************************************************************************/
20 template <typename T>
22 {
23  using type = T;
24 };
25 
26 template <typename T>
28 {
29  using type = T;
30 };
31 
32 template <typename T>
33 using read_only_viewer_t = typename read_only_viewer<T>::type;
34 
35 template <typename T>
36 constexpr bool is_read_only_viewer_v = std::is_same_v<T, read_only_viewer_t<T>>;
37 
38 template <typename T>
39 using read_write_viewer_t = typename read_write_viewer<T>::type;
40 
41 template <typename T>
42 constexpr bool is_read_write_viewer_v = std::is_same_v<T, read_write_viewer_t<T>>;
43 
44 template <typename T>
45 constexpr bool is_uniform_viewer_v =
46  is_read_only_viewer_v<T> && is_read_write_viewer_v<T>;
47 
48 #pragma once
49 
50 template <typename T>
51 MUDA_GENERIC MUDA_INLINE T* remove_const(const T* ptr) noexcept
52 {
53  return const_cast<T*>(ptr);
54 }
55 
56 template <typename T>
57 MUDA_GENERIC MUDA_INLINE T& remove_const(const T& ref) noexcept
58 {
59  return const_cast<T&>(ref);
60 }
61 } // namespace muda
Definition: type_modifier.h:21
Definition: type_modifier.h:27
Definition: assert.h:13