14 #if defined(EIGEN_GPU_COMPILE_PHASE) 18 #if defined(EIGEN_CUDA_ARCH) 19 #include <math_constants.h> 22 #if defined(EIGEN_HIP_DEVICE_COMPILE) 23 #include "Eigen/src/Core/arch/HIP/hcc/math_constants.h" 29 #define EIGEN_ICC_NEEDS_CSTDINT (EIGEN_COMP_ICC>=1600 && EIGEN_COMP_CXXVER >= 11) 32 #if EIGEN_HAS_CXX11 || EIGEN_ICC_NEEDS_CSTDINT 36 typedef std::uint8_t uint8_t;
37 typedef std::int8_t int8_t;
38 typedef std::uint16_t uint16_t;
39 typedef std::int16_t int16_t;
40 typedef std::uint32_t uint32_t;
41 typedef std::int32_t int32_t;
42 typedef std::uint64_t uint64_t;
43 typedef std::int64_t int64_t;
52 typedef ::uint8_t uint8_t;
53 typedef ::int8_t int8_t;
54 typedef ::uint16_t uint16_t;
55 typedef ::int16_t int16_t;
56 typedef ::uint32_t uint32_t;
57 typedef ::int32_t int32_t;
58 typedef ::uint64_t uint64_t;
59 typedef ::int64_t int64_t;
66 typedef EIGEN_DEFAULT_DENSE_INDEX_TYPE DenseIndex;
74 typedef EIGEN_DEFAULT_DENSE_INDEX_TYPE
Index;
87 #if EIGEN_ICC_NEEDS_CSTDINT 88 typedef std::intptr_t IntPtr;
89 typedef std::uintptr_t UIntPtr;
91 typedef std::ptrdiff_t IntPtr;
92 typedef std::size_t UIntPtr;
94 #undef EIGEN_ICC_NEEDS_CSTDINT 96 struct true_type {
enum { value = 1 }; };
97 struct false_type {
enum { value = 0 }; };
99 template<
bool Condition>
100 struct bool_constant;
103 struct bool_constant<true> : true_type {};
106 struct bool_constant<false> : false_type {};
108 template<
bool Condition,
typename Then,
typename Else>
109 struct conditional {
typedef Then type; };
111 template<
typename Then,
typename Else>
112 struct conditional <false, Then, Else> {
typedef Else type; };
114 template<
typename T>
struct remove_reference {
typedef T type; };
115 template<
typename T>
struct remove_reference<T&> {
typedef T type; };
117 template<
typename T>
struct remove_pointer {
typedef T type; };
118 template<
typename T>
struct remove_pointer<T*> {
typedef T type; };
119 template<
typename T>
struct remove_pointer<T*
const> {
typedef T type; };
121 template <
class T>
struct remove_const {
typedef T type; };
122 template <
class T>
struct remove_const<const T> {
typedef T type; };
123 template <
class T>
struct remove_const<const T[]> {
typedef T type[]; };
124 template <
class T,
unsigned int Size>
struct remove_const<const T[Size]> {
typedef T type[Size]; };
126 template<
typename T>
struct remove_all {
typedef T type; };
127 template<
typename T>
struct remove_all<const T> {
typedef typename remove_all<T>::type type; };
128 template<
typename T>
struct remove_all<T const&> {
typedef typename remove_all<T>::type type; };
129 template<
typename T>
struct remove_all<T&> {
typedef typename remove_all<T>::type type; };
130 template<
typename T>
struct remove_all<T const*> {
typedef typename remove_all<T>::type type; };
131 template<
typename T>
struct remove_all<T*> {
typedef typename remove_all<T>::type type; };
133 template<
typename T>
struct is_arithmetic {
enum { value =
false }; };
134 template<>
struct is_arithmetic<float> {
enum { value =
true }; };
135 template<>
struct is_arithmetic<double> {
enum { value =
true }; };
136 template<>
struct is_arithmetic<long double> {
enum { value =
true }; };
137 template<>
struct is_arithmetic<bool> {
enum { value =
true }; };
138 template<>
struct is_arithmetic<char> {
enum { value =
true }; };
139 template<>
struct is_arithmetic<signed char> {
enum { value =
true }; };
140 template<>
struct is_arithmetic<unsigned char> {
enum { value =
true }; };
141 template<>
struct is_arithmetic<signed short> {
enum { value =
true }; };
142 template<>
struct is_arithmetic<unsigned short>{
enum { value =
true }; };
143 template<>
struct is_arithmetic<signed int> {
enum { value =
true }; };
144 template<>
struct is_arithmetic<unsigned int> {
enum { value =
true }; };
145 template<>
struct is_arithmetic<signed long> {
enum { value =
true }; };
146 template<>
struct is_arithmetic<unsigned long> {
enum { value =
true }; };
148 template<
typename T,
typename U>
struct is_same {
enum { value = 0 }; };
149 template<
typename T>
struct is_same<T,T> {
enum { value = 1 }; };
152 struct is_void : is_same<void, typename remove_const<T>::type> {};
155 template<>
struct is_arithmetic<signed long long> {
enum { value =
true }; };
156 template<>
struct is_arithmetic<unsigned long long> {
enum { value =
true }; };
157 using std::is_integral;
159 template<
typename T>
struct is_integral {
enum { value =
false }; };
160 template<>
struct is_integral<bool> {
enum { value =
true }; };
161 template<>
struct is_integral<char> {
enum { value =
true }; };
162 template<>
struct is_integral<signed char> {
enum { value =
true }; };
163 template<>
struct is_integral<unsigned char> {
enum { value =
true }; };
164 template<>
struct is_integral<signed short> {
enum { value =
true }; };
165 template<>
struct is_integral<unsigned short> {
enum { value =
true }; };
166 template<>
struct is_integral<signed int> {
enum { value =
true }; };
167 template<>
struct is_integral<unsigned int> {
enum { value =
true }; };
168 template<>
struct is_integral<signed long> {
enum { value =
true }; };
169 template<>
struct is_integral<unsigned long> {
enum { value =
true }; };
171 template<>
struct is_integral<signed __int64> {
enum { value =
true }; };
172 template<>
struct is_integral<unsigned __int64> {
enum { value =
true }; };
177 using std::make_unsigned;
182 template<
typename>
struct make_unsigned;
183 template<>
struct make_unsigned<char> {
typedef unsigned char type; };
184 template<>
struct make_unsigned<signed char> {
typedef unsigned char type; };
185 template<>
struct make_unsigned<unsigned char> {
typedef unsigned char type; };
186 template<>
struct make_unsigned<signed short> {
typedef unsigned short type; };
187 template<>
struct make_unsigned<unsigned short> {
typedef unsigned short type; };
188 template<>
struct make_unsigned<signed int> {
typedef unsigned int type; };
189 template<>
struct make_unsigned<unsigned int> {
typedef unsigned int type; };
190 template<>
struct make_unsigned<signed long> {
typedef unsigned long type; };
191 template<>
struct make_unsigned<unsigned long> {
typedef unsigned long type; };
193 template<>
struct make_unsigned<signed __int64> {
typedef unsigned __int64 type; };
194 template<>
struct make_unsigned<unsigned __int64> {
typedef unsigned __int64 type; };
202 #if EIGEN_OS_MAC || EIGEN_COMP_MINGW 203 template<>
struct make_unsigned<unsigned long long> {
typedef unsigned long long type; };
204 template<>
struct make_unsigned<long long> {
typedef unsigned long long type; };
208 template <
typename T>
struct add_const {
typedef const T type; };
209 template <
typename T>
struct add_const<T&> {
typedef T& type; };
211 template <
typename T>
struct is_const {
enum { value = 0 }; };
212 template <
typename T>
struct is_const<T const> {
enum { value = 1 }; };
214 template<
typename T>
struct add_const_on_value_type {
typedef const T type; };
215 template<
typename T>
struct add_const_on_value_type<T&> {
typedef T
const& type; };
216 template<
typename T>
struct add_const_on_value_type<T*> {
typedef T
const* type; };
217 template<
typename T>
struct add_const_on_value_type<T*
const> {
typedef T
const*
const type; };
218 template<
typename T>
struct add_const_on_value_type<T const*
const> {
typedef T
const*
const type; };
222 using std::is_convertible;
226 template<
typename From,
typename To>
227 struct is_convertible_impl
230 struct any_conversion
232 template <
typename T> any_conversion(
const volatile T&);
233 template <
typename T> any_conversion(T&);
235 struct yes {
int a[1];};
236 struct no {
int a[2];};
239 static yes test(T,
int);
242 static no test(any_conversion, ...);
245 static typename internal::remove_reference<From>::type* ms_from;
246 #ifdef __INTEL_COMPILER 248 #pragma warning ( disable : 2259 ) 250 enum { value =
sizeof(test<To>(*ms_from, 0))==
sizeof(yes) };
251 #ifdef __INTEL_COMPILER 256 template<
typename From,
typename To>
257 struct is_convertible
259 enum { value = is_convertible_impl<From,To>::value };
263 struct is_convertible<T,T&> {
enum { value =
false }; };
266 struct is_convertible<const T,const T&> {
enum { value =
true }; };
273 template<
bool Condition,
typename T=
void>
struct enable_if;
275 template<
typename T>
struct enable_if<true,T>
278 #if defined(EIGEN_GPU_COMPILE_PHASE) && !EIGEN_HAS_CXX11 279 #if !defined(__FLT_EPSILON__) 280 #define __FLT_EPSILON__ FLT_EPSILON 281 #define __DBL_EPSILON__ DBL_EPSILON 286 template<
typename T>
struct numeric_limits
289 static EIGEN_CONSTEXPR T epsilon() {
return 0; }
290 static T (max)() { assert(
false &&
"Highest not supported for this type"); }
291 static T (min)() { assert(
false &&
"Lowest not supported for this type"); }
292 static T infinity() { assert(
false &&
"Infinity not supported for this type"); }
293 static T quiet_NaN() { assert(
false &&
"quiet_NaN not supported for this type"); }
295 template<>
struct numeric_limits<float>
297 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
298 static float epsilon() {
return __FLT_EPSILON__; }
300 static float (max)() {
301 #if defined(EIGEN_CUDA_ARCH) 302 return CUDART_MAX_NORMAL_F;
304 return HIPRT_MAX_NORMAL_F;
307 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
308 static float (min)() {
return FLT_MIN; }
310 static float infinity() {
311 #if defined(EIGEN_CUDA_ARCH) 318 static float quiet_NaN() {
319 #if defined(EIGEN_CUDA_ARCH) 326 template<>
struct numeric_limits<double>
328 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
329 static double epsilon() {
return __DBL_EPSILON__; }
330 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
331 static double (max)() {
return DBL_MAX; }
332 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
333 static double (min)() {
return DBL_MIN; }
335 static double infinity() {
336 #if defined(EIGEN_CUDA_ARCH) 343 static double quiet_NaN() {
344 #if defined(EIGEN_CUDA_ARCH) 351 template<>
struct numeric_limits<int>
353 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
354 static int epsilon() {
return 0; }
355 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
356 static int (max)() {
return INT_MAX; }
357 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
358 static int (min)() {
return INT_MIN; }
360 template<>
struct numeric_limits<unsigned int>
362 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
363 static unsigned int epsilon() {
return 0; }
364 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
365 static unsigned int (max)() {
return UINT_MAX; }
366 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
367 static unsigned int (min)() {
return 0; }
369 template<>
struct numeric_limits<long>
371 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
372 static long epsilon() {
return 0; }
373 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
374 static long (max)() {
return LONG_MAX; }
375 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
376 static long (min)() {
return LONG_MIN; }
378 template<>
struct numeric_limits<unsigned long>
380 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
381 static unsigned long epsilon() {
return 0; }
382 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
383 static unsigned long (max)() {
return ULONG_MAX; }
384 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
385 static unsigned long (min)() {
return 0; }
387 template<>
struct numeric_limits<long long>
389 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
390 static long long epsilon() {
return 0; }
391 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
392 static long long (max)() {
return LLONG_MAX; }
393 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
394 static long long (min)() {
return LLONG_MIN; }
396 template<>
struct numeric_limits<unsigned long long>
398 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
399 static unsigned long long epsilon() {
return 0; }
400 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
401 static unsigned long long (max)() {
return ULLONG_MAX; }
402 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
403 static unsigned long long (min)() {
return 0; }
405 template<>
struct numeric_limits<bool>
407 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
408 static bool epsilon() {
return false; }
409 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
410 static bool (max)() {
return true; }
411 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
412 static bool (min)() {
return false; }
417 #endif // defined(EIGEN_GPU_COMPILE_PHASE) && !EIGEN_HAS_CXX11 424 EIGEN_DEVICE_FUNC noncopyable(
const noncopyable&);
425 EIGEN_DEVICE_FUNC
const noncopyable& operator=(
const noncopyable&);
427 EIGEN_DEVICE_FUNC noncopyable() {}
428 EIGEN_DEVICE_FUNC ~noncopyable() {}
445 template<
typename T,
typename EnableIf =
void>
struct array_size {
449 template<
typename T>
struct array_size<T,typename internal::enable_if<((T::SizeAtCompileTime&0)==0)>::type> {
450 enum { value = T::SizeAtCompileTime };
453 template<
typename T,
int N>
struct array_size<const T (&)[N]> {
456 template<
typename T,
int N>
struct array_size<T (&)[N]> {
461 template<
typename T, std::
size_t N>
struct array_size<const std::array<T,N> > {
464 template<
typename T, std::
size_t N>
struct array_size<std::array<T,N> > {
479 EIGEN_CONSTEXPR Index size(
const T& x) {
return x.size(); }
481 template<
typename T,std::
size_t N>
482 EIGEN_CONSTEXPR Index size(
const T (&) [N]) {
return N; }
499 #if EIGEN_HAS_STD_INVOKE_RESULT 500 template<
typename T>
struct result_of;
502 template<
typename F,
typename... ArgTypes>
503 struct result_of<F(ArgTypes...)> {
504 typedef typename std::invoke_result<F, ArgTypes...>::type type1;
505 typedef typename remove_all<type1>::type type;
507 #elif EIGEN_HAS_STD_RESULT_OF 508 template<
typename T>
struct result_of {
509 typedef typename std::result_of<T>::type type1;
510 typedef typename remove_all<type1>::type type;
513 template<
typename T>
struct result_of { };
515 struct has_none {
int a[1];};
516 struct has_std_result_type {
int a[2];};
517 struct has_tr1_result {
int a[3];};
519 template<
typename Func,
int SizeOf>
520 struct nullary_result_of_select {};
522 template<
typename Func>
523 struct nullary_result_of_select<Func, sizeof(has_std_result_type)> {
typedef typename Func::result_type type;};
525 template<
typename Func>
526 struct nullary_result_of_select<Func, sizeof(has_tr1_result)> {
typedef typename Func::template result<Func()>::type type;};
528 template<
typename Func>
529 struct result_of<Func()> {
531 static has_std_result_type testFunctor(T
const *,
typename T::result_type
const * = 0);
533 static has_tr1_result testFunctor(T
const *,
typename T::template result<T()>::type
const * = 0);
534 static has_none testFunctor(...);
537 enum {FunctorType =
sizeof(testFunctor(static_cast<Func*>(0)))};
538 typedef typename nullary_result_of_select<Func, FunctorType>::type type;
541 template<
typename Func,
typename ArgType,
int SizeOf=sizeof(has_none)>
542 struct unary_result_of_select {
typedef typename internal::remove_all<ArgType>::type type;};
544 template<
typename Func,
typename ArgType>
545 struct unary_result_of_select<Func, ArgType, sizeof(has_std_result_type)> {
typedef typename Func::result_type type;};
547 template<
typename Func,
typename ArgType>
548 struct unary_result_of_select<Func, ArgType, sizeof(has_tr1_result)> {
typedef typename Func::template result<Func(ArgType)>::type type;};
550 template<
typename Func,
typename ArgType>
551 struct result_of<Func(ArgType)> {
553 static has_std_result_type testFunctor(T
const *,
typename T::result_type
const * = 0);
555 static has_tr1_result testFunctor(T
const *,
typename T::template result<T(ArgType)>::type
const * = 0);
556 static has_none testFunctor(...);
559 enum {FunctorType =
sizeof(testFunctor(static_cast<Func*>(0)))};
560 typedef typename unary_result_of_select<Func, ArgType, FunctorType>::type type;
563 template<
typename Func,
typename ArgType0,
typename ArgType1,
int SizeOf=sizeof(has_none)>
564 struct binary_result_of_select {
typedef typename internal::remove_all<ArgType0>::type type;};
566 template<
typename Func,
typename ArgType0,
typename ArgType1>
567 struct binary_result_of_select<Func, ArgType0, ArgType1, sizeof(has_std_result_type)>
568 {
typedef typename Func::result_type type;};
570 template<
typename Func,
typename ArgType0,
typename ArgType1>
571 struct binary_result_of_select<Func, ArgType0, ArgType1, sizeof(has_tr1_result)>
572 {
typedef typename Func::template result<Func(ArgType0,ArgType1)>::type type;};
574 template<
typename Func,
typename ArgType0,
typename ArgType1>
575 struct result_of<Func(ArgType0,ArgType1)> {
577 static has_std_result_type testFunctor(T
const *,
typename T::result_type
const * = 0);
579 static has_tr1_result testFunctor(T
const *,
typename T::template result<T(ArgType0,ArgType1)>::type
const * = 0);
580 static has_none testFunctor(...);
583 enum {FunctorType =
sizeof(testFunctor(static_cast<Func*>(0)))};
584 typedef typename binary_result_of_select<Func, ArgType0, ArgType1, FunctorType>::type type;
587 template<
typename Func,
typename ArgType0,
typename ArgType1,
typename ArgType2,
int SizeOf=sizeof(has_none)>
588 struct ternary_result_of_select {
typedef typename internal::remove_all<ArgType0>::type type;};
590 template<
typename Func,
typename ArgType0,
typename ArgType1,
typename ArgType2>
591 struct ternary_result_of_select<Func, ArgType0, ArgType1, ArgType2, sizeof(has_std_result_type)>
592 {
typedef typename Func::result_type type;};
594 template<
typename Func,
typename ArgType0,
typename ArgType1,
typename ArgType2>
595 struct ternary_result_of_select<Func, ArgType0, ArgType1, ArgType2, sizeof(has_tr1_result)>
596 {
typedef typename Func::template result<Func(ArgType0,ArgType1,ArgType2)>::type type;};
598 template<
typename Func,
typename ArgType0,
typename ArgType1,
typename ArgType2>
599 struct result_of<Func(ArgType0,ArgType1,ArgType2)> {
601 static has_std_result_type testFunctor(T
const *,
typename T::result_type
const * = 0);
603 static has_tr1_result testFunctor(T
const *,
typename T::template result<T(ArgType0,ArgType1,ArgType2)>::type
const * = 0);
604 static has_none testFunctor(...);
607 enum {FunctorType =
sizeof(testFunctor(static_cast<Func*>(0)))};
608 typedef typename ternary_result_of_select<Func, ArgType0, ArgType1, ArgType2, FunctorType>::type type;
613 #if EIGEN_HAS_STD_INVOKE_RESULT 614 template<
typename F,
typename... ArgTypes>
615 struct invoke_result {
616 typedef typename std::invoke_result<F, ArgTypes...>::type type1;
617 typedef typename remove_all<type1>::type type;
619 #elif EIGEN_HAS_CXX11 620 template<
typename F,
typename... ArgTypes>
621 struct invoke_result {
622 typedef typename result_of<F(ArgTypes...)>::type type1;
623 typedef typename remove_all<type1>::type type;
626 template<
typename F,
typename ArgType0 =
void,
typename ArgType1 =
void,
typename ArgType2 =
void>
627 struct invoke_result {
628 typedef typename result_of<F(ArgType0, ArgType1, ArgType2)>::type type1;
629 typedef typename remove_all<type1>::type type;
633 struct invoke_result<F, void, void, void> {
634 typedef typename result_of<F()>::type type1;
635 typedef typename remove_all<type1>::type type;
638 template<
typename F,
typename ArgType0>
639 struct invoke_result<F, ArgType0, void, void> {
640 typedef typename result_of<F(ArgType0)>::type type1;
641 typedef typename remove_all<type1>::type type;
644 template<
typename F,
typename ArgType0,
typename ArgType1>
645 struct invoke_result<F, ArgType0, ArgType1, void> {
646 typedef typename result_of<F(ArgType0, ArgType1)>::type type1;
647 typedef typename remove_all<type1>::type type;
651 struct meta_yes {
char a[1]; };
652 struct meta_no {
char a[2]; };
655 template <
typename T>
656 struct has_ReturnType
658 template <
typename C>
static meta_yes testFunctor(C
const *,
typename C::ReturnType
const * = 0);
659 template <
typename C>
static meta_no testFunctor(...);
661 enum { value =
sizeof(testFunctor<T>(
static_cast<T*
>(0))) ==
sizeof(meta_yes) };
664 template<
typename T>
const T* return_ptr();
666 template <
typename T,
typename IndexType=Index>
667 struct has_nullary_operator
669 template <
typename C>
static meta_yes testFunctor(C
const *,
typename enable_if<(
sizeof(return_ptr<C>()->
operator()())>0)>::type * = 0);
670 static meta_no testFunctor(...);
672 enum { value =
sizeof(testFunctor(static_cast<T*>(0))) ==
sizeof(meta_yes) };
675 template <
typename T,
typename IndexType=Index>
676 struct has_unary_operator
678 template <
typename C>
static meta_yes testFunctor(C
const *,
typename enable_if<(
sizeof(return_ptr<C>()->
operator()(IndexType(0)))>0)>::type * = 0);
679 static meta_no testFunctor(...);
681 enum { value =
sizeof(testFunctor(static_cast<T*>(0))) ==
sizeof(meta_yes) };
684 template <
typename T,
typename IndexType=Index>
685 struct has_binary_operator
687 template <
typename C>
static meta_yes testFunctor(C
const *,
typename enable_if<(
sizeof(return_ptr<C>()->
operator()(IndexType(0),IndexType(0)))>0)>::type * = 0);
688 static meta_no testFunctor(...);
690 enum { value =
sizeof(testFunctor(static_cast<T*>(0))) ==
sizeof(meta_yes) };
698 int SupX = ((Y==1) ? 1 : Y/2),
699 bool Done = ((SupX-InfX)<=1 ?
true : ((SupX*SupX <= Y) && ((SupX+1)*(SupX+1) > Y))) >
704 MidX = (InfX+SupX)/2,
705 TakeInf = MidX*MidX > Y ? 1 : 0,
706 NewInf =
int(TakeInf) ? InfX : int(MidX),
707 NewSup = int(TakeInf) ? int(MidX) : SupX
710 enum { ret = meta_sqrt<Y,NewInf,NewSup>::ret };
713 template<
int Y,
int InfX,
int SupX>
714 class meta_sqrt<Y, InfX, SupX, true> {
public:
enum { ret = (SupX*SupX <= Y) ? SupX : InfX }; };
720 template<
int A,
int B,
int K=1,
bool Done = ((A*K)%B)==0,
bool Big=(A>=B)>
721 struct meta_least_common_multiple
723 enum { ret = meta_least_common_multiple<A,B,K+1>::ret };
725 template<
int A,
int B,
int K,
bool Done>
726 struct meta_least_common_multiple<A,B,K,Done,false>
728 enum { ret = meta_least_common_multiple<B,A,K>::ret };
730 template<
int A,
int B,
int K>
731 struct meta_least_common_multiple<A,B,K,true,true>
738 template<
typename T,
typename U>
struct scalar_product_traits
740 enum { Defined = 0 };
752 template<
unsigned Len,
unsigned Align>
753 struct aligned_storage {
755 EIGEN_ALIGN_TO_BOUNDARY(Align)
unsigned char data[Len];
763 #if defined(EIGEN_GPU_COMPILE_PHASE) 764 template<
typename T> EIGEN_DEVICE_FUNC
void swap(T &a, T &b) { T tmp = b; b = a; a = tmp; }
766 template<
typename T> EIGEN_STRONG_INLINE
void swap(T &a, T &b) { std::swap(a,b); }
769 #if defined(EIGEN_GPU_COMPILE_PHASE) && !EIGEN_HAS_CXX11 770 using internal::device::numeric_limits;
772 using std::numeric_limits;
779 T div_ceil(
const T &a,
const T &b)
786 template<
typename X,
typename Y> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC
787 bool equal_strict(
const X& x,
const Y& y) {
return x == y; }
789 #if !defined(EIGEN_GPU_COMPILE_PHASE) || (!defined(EIGEN_CUDA_ARCH) && defined(EIGEN_CONSTEXPR_ARE_DEVICE_FUNC)) 790 template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC
791 bool equal_strict(
const float& x,
const float& y) {
return std::equal_to<float>()(x,y); }
793 template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC
794 bool equal_strict(
const double& x,
const double& y) {
return std::equal_to<double>()(x,y); }
797 template<
typename X,
typename Y> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC
798 bool not_equal_strict(
const X& x,
const Y& y) {
return x != y; }
800 #if !defined(EIGEN_GPU_COMPILE_PHASE) || (!defined(EIGEN_CUDA_ARCH) && defined(EIGEN_CONSTEXPR_ARE_DEVICE_FUNC)) 801 template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC
802 bool not_equal_strict(
const float& x,
const float& y) {
return std::not_equal_to<float>()(x,y); }
804 template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC
805 bool not_equal_strict(
const double& x,
const double& y) {
return std::not_equal_to<double>()(x,y); }
812 #endif // EIGEN_META_H Namespace containing all symbols from the Eigen library.
Definition: Core:141
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:74
Definition: Eigen_Colamd.h:50
const int Dynamic
Definition: Constants.h:22