OpenFPM_pdata  1.1.0
Project that contain the implementation of distributed structures
 All Data Structures Namespaces Functions Variables Typedefs Enumerations Friends Pages
common.hpp
1 #ifndef COMMON_HPP
2 #define COMMON_HPP
3 
4 #include <type_traits>
5 #include <random>
6 #include "memory/memory.hpp"
7 #include "util/for_each_ref.hpp"
8 #include "util/variadic_to_vmpl.hpp"
9 
10 #define GCC_VERSION (__GNUC__ * 10000 \
11  + __GNUC_MINOR__ * 100 \
12  + __GNUC_PATCHLEVEL__)
13 
14 namespace std
15 {
16  // We need the definition of std::to_string that work on string
17  inline static std::string to_string(std::string s)
18  {
19  return s;
20  }
21 }
22 
30 namespace openfpm
31 {
32  template <class T>
33  constexpr typename std::add_const<T>::type & as_const(T& t) noexcept
34  {
35  return t;
36  }
37 
38  template <typename> struct Debug;
39 }
40 
42  // {3,3,3,3,3,3,.....}
43  template<size_t index, size_t N> struct Fill_three {
44  enum { value = 3 };
45  };
46 
48  template<size_t index, size_t N> struct Fill_zero {
49  enum { value = 0 };
50  };
51 
53  template<size_t index, size_t N> struct Fill_two {
54  enum { value = 2 };
55  };
56 
58  template<size_t index, size_t N> struct Fill_one {
59  enum { value = 1 };
60  };
61 
63 template<typename> struct Void
64 {
66  typedef void type;
67 };
68 
69 template<typename T, typename Sfinae = void>
70 struct has_attributes: std::false_type {};
71 
72 
84 template<typename T>
85 struct has_attributes<T, typename Void<decltype( T::attributes::name[0] )>::type> : std::true_type
86 {};
87 
88 template<typename T, typename Sfinae = void>
89 struct has_typedef_type: std::false_type {};
90 
101 template<typename T>
102 struct has_typedef_type<T, typename Void< typename T::type>::type> : std::true_type
103 {};
104 
105 template<typename T, typename Sfinae = void>
106 struct has_data: std::false_type {};
107 
117 template<typename T>
118 struct has_data<T, typename Void<decltype( T::data )>::type> : std::true_type
119 {};
120 
121 template<typename T, typename Sfinae = void>
122 struct has_posMask: std::false_type {};
123 
133 template<typename T>
134 struct has_posMask<T, typename Void<decltype( T::stag_mask )>::type> : std::true_type
135 {};
136 
153 template<bool cond, typename T>
155 {
156  enum
157  {
158  value = std::is_same<decltype(T().data),typename T::type>::value
159  };
160 };
161 
162 
163 template<typename T>
165 {
166  enum
167  {
168  value = false
169  };
170 };
171 
172 
173 template<typename T, typename Sfinae = void>
174 struct has_noPointers: std::false_type {};
175 
176 
188 template<typename T>
189 struct has_noPointers<T, typename Void<decltype( T::noPointers() )>::type> : std::true_type
190 {};
191 
204 template<typename ObjType, typename Sfinae = void>
205 struct has_pack: std::false_type {};
206 
207 template<typename ObjType>
208 struct has_pack<ObjType, typename Void<decltype( ObjType::pack() )>::type> : std::true_type
209 {};
210 
211 
224 template<typename ObjType, typename Sfinae = void>
225 struct has_packRequest: std::false_type {};
226 
227 template<typename ObjType>
228 struct has_packRequest<ObjType, typename Void<decltype( ObjType::packRequest() )>::type> : std::true_type
229 {};
230 
231 
244 template<typename ObjType, typename Sfinae = void>
245 struct has_packMem: std::false_type {};
246 
255 template<typename ObjType>
256 struct has_packMem<ObjType, typename Void<decltype( ObjType::packMem() )>::type> : std::true_type
257 {};
258 
269 template<typename T, bool = is_typedef_and_data_same<has_typedef_type<T>::value && has_data<T>::value,T>::value>
270 struct is_openfpm_native : std::false_type
271 {};
272 
273 
274 template<typename T>
275 struct is_openfpm_native<T,true> : std::true_type
276 {};
277 
278 template<typename T, typename Sfinae = void>
279 struct has_value_type: std::false_type {};
280 
290 template<typename T>
291 //struct has_value_type<T, typename Void<decltype( typename T::value_type )>::type> : std::true_type
292 struct has_value_type<T, typename Void< typename T::value_type>::type> : std::true_type
293 {};
294 
295 
297 template<size_t index, size_t N> struct MetaFunc {
298  enum { value = index + N };
299 };
300 
301 
302 template<size_t index, size_t N> struct MetaFuncOrd {
303  enum { value = index };
304 };
305 
306 #endif
{0,0,0,0,....}
Definition: common.hpp:48
has_Pack check if a type has defined a method called Pack
Definition: common.hpp:205
check if T::type and T.data has the same type
Definition: common.hpp:154
has_packRequest check if a type has defined a method called packRequest
Definition: common.hpp:225
is_openfpm_native check if a type is an openfpm native structure type
Definition: common.hpp:270
Compile time array functor needed to generate array at compile-time of type.
Definition: common.hpp:43
Void structure.
Definition: common.hpp:63
[Metafunction definition]
Definition: common.hpp:297
has_calculateMem check if a type has defined a method called calculateMem
Definition: common.hpp:245
{1,1,1,1,....}
Definition: common.hpp:58
{2,2,2,2,....}
Definition: common.hpp:53
void type
define void type
Definition: common.hpp:66