HAMR
The Heterogeneous Accelerator Memory Resource
hamr_copier_traits.h
1 #ifndef hamr_copier_traits_h
2 #define hamr_copier_traits_h
3 
4 #include "hamr_config.h"
5 #include <type_traits>
6 
7 namespace hamr
8 {
9 /// @name type trait that enables object copy
10 ///@{
11 template <typename T, typename U, bool val = (!std::is_arithmetic<T>::value || !std::is_arithmetic<U>::value)> struct use_object_copier : std::false_type {};
12 template <typename T, typename U> struct use_object_copier<T, U, true> : std::true_type {};
13 template <typename T, typename U> using use_object_copier_t = typename std::enable_if<use_object_copier<T,U>::value>::type;
14 ///@}
15 
16 
17 /// @name type trait that enables POD copy from different types
18 ///@{
19 #if defined(HAMR_ENABLE_OBJECTS)
20 template <typename T, typename U, bool val = (!std::is_same<T,U>::value)> struct use_cons_copier : std::false_type {};
21 template <typename T, typename U> struct use_cons_copier<T, U, true> : std::true_type {};
22 template <typename T, typename U> using use_cons_copier_t = typename std::enable_if<use_cons_copier<T,U>::value>::type;
23 #else
24 template <typename T, typename U, bool val = (!std::is_same<T,U>::value && std::is_arithmetic<T>::value)> struct use_cons_copier : std::false_type {};
25 template <typename T, typename U> struct use_cons_copier<T, U, true> : std::true_type {};
26 template <typename T, typename U> using use_cons_copier_t = typename std::enable_if<use_cons_copier<T,U>::value>::type;
27 #endif
28 ///@}
29 
30 /// @name type trait that enables POD copy from the same types
31 ///@{
32 template <typename T, typename U, bool obj = (std::is_same<T,U>::value && std::is_arithmetic<T>::value)> struct use_bytes_copier : std::false_type {};
33 template <typename T, typename U> struct use_bytes_copier<T, U, true> : std::true_type {};
34 template <typename T, typename U> using use_bytes_copier_t = typename std::enable_if<use_bytes_copier<T,U>::value>::type;
35 ///@}
36 
37 }
38 
39 #endif
hamr::use_object_copier
Definition: hamr_copier_traits.h:11
hamr::use_bytes_copier
Definition: hamr_copier_traits.h:32
hamr
heterogeneous accelerator memory resource
Definition: hamr_buffer.h:13
hamr::use_cons_copier
Definition: hamr_copier_traits.h:24