NumCpp  2.8.0
A Templatized Header Only C++ Implementation of the Python NumPy Library
TypeTraits.hpp
Go to the documentation of this file.
1 #pragma once
29 
30 #include <complex>
31 #include <type_traits>
32 
33 namespace nc
34 {
35  //============================================================================
36  // Class Description:
39  template<bool B, class T = void>
40  using enable_if_t = typename std::enable_if<B, T>::type;
41 
42  //============================================================================
43  // Class Description:
46  template<class A, class B>
47  constexpr bool is_same_v = std::is_same<A, B>::value;
48 
49  //============================================================================
50  // Class Description:
53  template<typename T>
54  constexpr bool is_arithmetic_v = std::is_arithmetic<T>::value;
55 
56  //============================================================================
57  // Class Description:
60  template<typename T>
61  constexpr bool is_integral_v = std::is_integral<T>::value;
62 
63  //============================================================================
64  // Class Description:
67  template<typename T>
68  constexpr bool is_unsigned_v = std::is_unsigned<T>::value;
69 
70  //============================================================================
71  // Class Description:
74  template<typename T>
75  constexpr bool is_floating_point_v = std::is_floating_point<T>::value;
76 
77  //============================================================================
78  // Class Description:
81  template<typename... Ts>
83 
84  //============================================================================
85  // Class Description:
88  template<typename Head, typename... Tail>
89  struct all_arithmetic<Head, Tail...>
90  {
91  static constexpr bool value = std::is_arithmetic<Head>::value && all_arithmetic<Tail...>::value;
92  };
93 
94  //============================================================================
95  // Class Description:
98  template<typename T>
99  struct all_arithmetic<T>
100  {
101  static constexpr bool value = std::is_arithmetic<T>::value;
102  };
103 
104  //============================================================================
105  // Class Description:
108  template<typename... Ts>
109  constexpr bool all_arithmetic_v = all_arithmetic<Ts...>::value;
110 
111  //============================================================================
112  // Class Description:
115  template<typename T1, typename... Ts>
116  struct all_same;
117 
118  //============================================================================
119  // Class Description:
122  template<typename T1, typename Head, typename... Tail>
123  struct all_same<T1, Head, Tail...>
124  {
125  static constexpr bool value = std::is_same<T1, Head>::value && all_same<T1, Tail...>::value;
126  };
127 
128  //============================================================================
129  // Class Description:
132  template<typename T1, typename T2>
133  struct all_same<T1, T2>
134  {
135  static constexpr bool value = std::is_same<T1, T2>::value;
136  };
137 
138  //============================================================================
139  // Class Description:
142  template<typename... Ts>
143  constexpr bool all_same_v = all_same<Ts...>::value;
144 
145  //============================================================================
146  // Class Description:
149  template<typename dtype>
151  {
152  static constexpr bool value =
153  std::is_default_constructible<dtype>::value && std::is_nothrow_copy_constructible<dtype>::value &&
154  std::is_nothrow_move_constructible<dtype>::value && std::is_nothrow_copy_assignable<dtype>::value &&
155  std::is_nothrow_move_assignable<dtype>::value && std::is_nothrow_destructible<dtype>::value &&
156  !std::is_void<dtype>::value && !std::is_pointer<dtype>::value && !std::is_array<dtype>::value &&
157  !std::is_union<dtype>::value && !std::is_function<dtype>::value && !std::is_abstract<dtype>::value;
158  };
159 
160  //============================================================================
161  // Class Description:
164  template<class dtype>
166 
167  //============================================================================
168  // Class Description:
171  template<class T>
172  struct is_complex
173  {
174  static constexpr bool value = false;
175  };
176 
177  //============================================================================
178  // Class Description:
181  template<class T>
182  struct is_complex<std::complex<T>>
183  {
184  static constexpr bool value = true;
185  };
186 
187  //============================================================================
188  // Class Description:
191  template<class T>
193 
194  //============================================================================
195  // Class Description:
198  template<std::size_t Value1, std::size_t Value2>
199  struct greaterThan
200  {
201  static constexpr bool value = Value1 > Value2;
202  };
203 
204  //============================================================================
205  // Class Description:
208  template<std::size_t Value1, std::size_t Value2>
210 } // namespace nc
Definition: Coordinate.hpp:45
constexpr bool is_same_v
Definition: TypeTraits.hpp:47
constexpr bool all_arithmetic_v
Definition: TypeTraits.hpp:109
constexpr bool is_integral_v
Definition: TypeTraits.hpp:61
constexpr bool is_floating_point_v
Definition: TypeTraits.hpp:75
constexpr bool greaterThan_v
Definition: TypeTraits.hpp:209
auto complex(dtype inReal)
Definition: complex.hpp:47
constexpr bool is_valid_dtype_v
Definition: TypeTraits.hpp:165
constexpr bool is_unsigned_v
Definition: TypeTraits.hpp:68
constexpr bool all_same_v
Definition: TypeTraits.hpp:143
constexpr bool is_arithmetic_v
Definition: TypeTraits.hpp:54
typename std::enable_if< B, T >::type enable_if_t
Definition: TypeTraits.hpp:40
constexpr bool is_complex_v
Definition: TypeTraits.hpp:192
Definition: TypeTraits.hpp:82
Definition: TypeTraits.hpp:116
Definition: TypeTraits.hpp:200
static constexpr bool value
Definition: TypeTraits.hpp:201
Definition: TypeTraits.hpp:173
static constexpr bool value
Definition: TypeTraits.hpp:174
Definition: TypeTraits.hpp:151
static constexpr bool value
Definition: TypeTraits.hpp:152