warpcore 0.0.1
Hashing at the Speed of Light on modern CUDA-accelerators
checks.cuh
Go to the documentation of this file.
1 #ifndef WARPCORE_CHECKS_CUH
2 #define WARPCORE_CHECKS_CUH
3 
4 namespace warpcore
5 {
6 
7 /*! \brief assertion helpers
8  */
9 namespace checks
10 {
11 
12  HOSTDEVICEQUALIFIER INLINEQUALIFIER
13  constexpr bool is_valid_cg_size(index_t cgsize) noexcept
14  {
15  if(cgsize == 1 ||
16  cgsize == 2 ||
17  cgsize == 4 ||
18  cgsize == 8 ||
19  cgsize == 16 ||
20  cgsize == 32)
21  {
22  return true;
23  }
24  else
25  {
26  return false;
27  }
28  }
29 
30  template<class T>
31  HOSTDEVICEQUALIFIER INLINEQUALIFIER
32  constexpr bool is_valid_key_type() noexcept
33  {
34  return (
35  std::is_same<T, std::uint32_t>::value ||
36  std::is_same<T, std::uint64_t>::value);
37  }
38 
39  template<class T>
40  HOSTDEVICEQUALIFIER INLINEQUALIFIER
41  constexpr bool is_valid_slot_type() noexcept
42  {
43  return is_valid_key_type<T>();
44  }
45 
46  template<class T>
47  HOSTDEVICEQUALIFIER INLINEQUALIFIER
48  constexpr bool is_valid_value_type() noexcept
49  {
50  return std::is_trivially_copyable<T>::value;
51  }
52 
53  template<class T>
54  HOSTDEVICEQUALIFIER INLINEQUALIFIER
55  constexpr bool is_valid_counter_type() noexcept
56  {
57  return (
58  std::is_same<T, int>::value ||
59  std::is_same<T, std::uint32_t>::value ||
60  std::is_same<T, std::uint64_t>::value);
61  }
62 
63  template<class T>
64  HOSTDEVICEQUALIFIER INLINEQUALIFIER
65  constexpr bool is_hasher() noexcept
66  {
67  return
68  std::is_same<typename T::tag, tags::hasher>::value ||
69  std::is_same<typename T::tag, tags::true_permutation_hasher>::value;
70  }
71 
72  template<class T>
73  HOSTDEVICEQUALIFIER INLINEQUALIFIER
74  constexpr bool is_true_permutation_hasher() noexcept
75  {
76  return std::is_same<typename T::tag, tags::true_permutation_hasher>::value;
77  }
78 
79  template<class T>
80  HOSTDEVICEQUALIFIER INLINEQUALIFIER
81  constexpr bool is_probing_scheme() noexcept
82  {
83  return
84  std::is_same<typename T::tag, tags::probing_scheme>::value ||
85  std::is_same<typename T::tag, tags::cycle_free_probing_scheme>::value;
86  }
87 
88  template<class T>
89  HOSTDEVICEQUALIFIER INLINEQUALIFIER
90  constexpr bool is_cycle_free_probing_scheme() noexcept
91  {
92  return std::is_same<typename T::tag, tags::cycle_free_probing_scheme>::value;
93  }
94 
95  template<class T>
96  HOSTDEVICEQUALIFIER INLINEQUALIFIER
97  constexpr bool is_key_value_storage() noexcept
98  {
99  return std::is_same<typename T::tag, tags::key_value_storage>::value;
100  }
101 
102  template<class T>
103  HOSTDEVICEQUALIFIER INLINEQUALIFIER
104  constexpr bool is_value_storage() noexcept
105  {
106  return
107  std::is_same<typename T::tag, tags::static_value_storage>::value ||
108  std::is_same<typename T::tag, tags::dynamic_value_storage>::value;
109  }
110 
111  template<class T>
112  HOSTDEVICEQUALIFIER INLINEQUALIFIER
113  constexpr bool is_status_handler() noexcept
114  {
115  return std::is_same<typename T::tag, tags::status_handler>::value;
116  }
117 
118 } // namespace checks
119 
120 } // namespace warpcore
121 
122 #endif /* WARPCORE_CHECKS_CUH */