#ifndef EIGEN_META_H
#define EIGEN_META_H
#include "../InternalHeaderCheck.h"
#if defined(EIGEN_GPU_COMPILE_PHASE)
#include <cfloat>
#if defined(EIGEN_CUDA_ARCH)
#include <math_constants.h>
#endif
#if defined(EIGEN_HIP_DEVICE_COMPILE)
#include "Eigen/src/Core/arch/HIP/hcc/math_constants.h"
#endif
#endif
#include <cstdint>
namespace Eigen {
namespace numext {
uint8_t;
int8_t;
uint16_t;
int16_t;
uint32_t;
int32_t;
uint64_t;
int64_t;
template <size_t Size>
struct get_integer_by_size { … };
template <>
struct get_integer_by_size<1> { … };
template <>
struct get_integer_by_size<2> { … };
template <>
struct get_integer_by_size<4> { … };
template <>
struct get_integer_by_size<8> { … };
}
}
namespace Eigen {
DenseIndex;
Index;
namespace internal {
struct true_type { … };
struct false_type { … };
template <bool Condition>
struct bool_constant;
template <>
struct bool_constant<true> : true_type { … };
template <>
struct bool_constant<false> : false_type { … };
conditional;
remove_const;
remove_pointer;
remove_reference;
template <typename T>
struct remove_all { … };
remove_all<const T>;
remove_all<const T &>;
remove_all<T &>;
remove_all<const T *>;
remove_all<T *>;
remove_all_t;
template <typename T>
struct is_arithmetic { … };
template <>
struct is_arithmetic<float> { … };
template <>
struct is_arithmetic<double> { … };
#ifndef EIGEN_GPU_COMPILE_PHASE
template <>
struct is_arithmetic<long double> { … };
#endif
template <>
struct is_arithmetic<bool> { … };
template <>
struct is_arithmetic<char> { … };
template <>
struct is_arithmetic<signed char> { … };
template <>
struct is_arithmetic<unsigned char> { … };
template <>
struct is_arithmetic<signed short> { … };
template <>
struct is_arithmetic<unsigned short> { … };
template <>
struct is_arithmetic<signed int> { … };
template <>
struct is_arithmetic<unsigned int> { … };
template <>
struct is_arithmetic<signed long> { … };
template <>
struct is_arithmetic<unsigned long> { … };
template <typename T, typename U>
struct is_same { … };
is_same<T, T>;
template <class T>
struct is_void : is_same<void, std::remove_const_t<T>> { … };
#if EIGEN_COMP_CXXVER >= 17
void_t;
#else
template <typename...>
using void_t = void;
#endif
template <>
struct is_arithmetic<signed long long> { … };
template <>
struct is_arithmetic<unsigned long long> { … };
is_integral;
make_unsigned;
template <typename T>
struct is_const { … };
is_const<const T>;
template <typename T>
struct add_const_on_value_type { … };
add_const_on_value_type<T &>;
add_const_on_value_type<T *>;
add_const_on_value_type<T *const>;
add_const_on_value_type<const T *const>;
add_const_on_value_type_t;
is_convertible;
class noncopyable { … };
template <typename T, typename EnableIf = void>
struct array_size { … };
array_size<T, std::enable_if_t<((T::SizeAtCompileTime & 0) == 0)>>;
array_size<const T (&)[N]>;
array_size<T (&)[N]>;
array_size<const std::array<T, N>>;
array_size<std::array<T, N>>;
#if EIGEN_COMP_CXXVER < 20 || EIGEN_GNUC_STRICT_LESS_THAN(10, 0, 0)
template <typename T>
EIGEN_CONSTEXPR auto index_list_size(const T& x) {
using R = std::common_type_t<std::ptrdiff_t, std::make_signed_t<decltype(x.size())>>;
return static_cast<R>(x.size());
}
template <typename T, std::ptrdiff_t N>
EIGEN_CONSTEXPR std::ptrdiff_t index_list_size(const T (&)[N]) {
return N;
}
#else
template <typename T>
EIGEN_CONSTEXPR auto index_list_size(T&& x) { … }
#endif
#if EIGEN_HAS_STD_INVOKE_RESULT
template <typename T>
struct result_of;
result_of<F (ArgTypes...)>;
template <typename F, typename... ArgTypes>
struct invoke_result { … };
#else
template <typename T>
struct result_of {
typedef typename std::result_of<T>::type type1;
typedef remove_all_t<type1> type;
};
template <typename F, typename... ArgTypes>
struct invoke_result {
typedef typename result_of<F(ArgTypes...)>::type type1;
typedef remove_all_t<type1> type;
};
#endif
reduce_all;
reduce_any;
struct meta_yes { … };
struct meta_no { … };
template <typename T>
struct has_ReturnType { … };
template <typename T>
const T* return_ptr();
template <typename T, typename IndexType = Index>
struct has_nullary_operator { … };
template <typename T, typename IndexType = Index>
struct has_unary_operator { … };
template <typename T, typename IndexType = Index>
struct has_binary_operator { … };
template <int Y, int InfX = 0, int SupX = ((Y == 1) ? 1 : Y / 2),
bool Done = ((SupX - InfX) <= 1 || ((SupX * SupX <= Y) && ((SupX + 1) * (SupX + 1) > Y)))>
class meta_sqrt { … };
meta_sqrt<Y, InfX, SupX, true>;
template <int A, int B, int K = 1, bool Done = ((A * K) % B) == 0, bool Big = (A >= B)>
struct meta_least_common_multiple { … };
meta_least_common_multiple<A, B, K, Done, false>;
meta_least_common_multiple<A, B, K, true, true>;
template <typename T, typename U>
struct scalar_product_traits { … };
template <unsigned Len, unsigned Align>
struct aligned_storage { … };
}
template <typename T>
struct NumTraits;
namespace numext {
#if defined(EIGEN_GPU_COMPILE_PHASE)
template <typename T>
EIGEN_DEVICE_FUNC void swap(T& a, T& b) {
T tmp = b;
b = a;
a = tmp;
}
#else
template <typename T>
EIGEN_STRONG_INLINE void swap(T& a, T& b) { … }
#endif
numeric_limits;
template <typename X, typename Y, bool XIsInteger = NumTraits<X>::IsInteger, bool XIsSigned = NumTraits<X>::IsSigned,
bool YIsInteger = NumTraits<Y>::IsInteger, bool YIsSigned = NumTraits<Y>::IsSigned>
struct equal_strict_impl { … };
equal_strict_impl<X, Y, true, false, true, true>;
equal_strict_impl<X, Y, true, true, true, false>;
template <typename X, typename Y>
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool equal_strict(const X& x, const Y& y) { … }
#if !defined(EIGEN_GPU_COMPILE_PHASE) || (!defined(EIGEN_CUDA_ARCH) && defined(EIGEN_CONSTEXPR_ARE_DEVICE_FUNC))
template <>
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool equal_strict(const float& x, const float& y) { … }
template <>
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool equal_strict(const double& x, const double& y) { … }
#endif
template <typename X>
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool is_exactly_zero(const X& x) { … }
template <typename X>
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool is_exactly_one(const X& x) { … }
template <typename X, typename Y>
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool not_equal_strict(const X& x, const Y& y) { … }
#if !defined(EIGEN_GPU_COMPILE_PHASE) || (!defined(EIGEN_CUDA_ARCH) && defined(EIGEN_CONSTEXPR_ARE_DEVICE_FUNC))
template <>
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool not_equal_strict(const float& x, const float& y) { … }
template <>
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool not_equal_strict(const double& x, const double& y) { … }
#endif
}
namespace internal {
template <typename Scalar>
struct is_identically_zero_impl { … };
template <typename Scalar>
EIGEN_STRONG_INLINE bool is_identically_zero(const Scalar& s) { … }
is_int_or_enum_v;
template <typename A, typename B>
inline constexpr void plain_enum_asserts(A, B) { … }
template <typename A, typename B>
inline constexpr int plain_enum_min(A a, B b) { … }
template <typename A, typename B>
inline constexpr int plain_enum_max(A a, B b) { … }
template <typename A, typename B>
inline constexpr int min_size_prefer_dynamic(A a, B b) { … }
template <typename A, typename B>
inline constexpr int min_size_prefer_fixed(A a, B b) { … }
template <typename A, typename B>
inline constexpr int max_size_prefer_dynamic(A a, B b) { … }
template <typename A, typename B>
inline constexpr bool enum_eq_not_dynamic(A a, B b) { … }
template <typename A, typename B>
inline constexpr bool enum_lt_not_dynamic(A a, B b) { … }
template <typename A, typename B>
inline constexpr bool enum_le_not_dynamic(A a, B b) { … }
template <typename A, typename B>
inline constexpr bool enum_gt_not_dynamic(A a, B b) { … }
template <typename A, typename B>
inline constexpr bool enum_ge_not_dynamic(A a, B b) { … }
inline constexpr bool logical_xor(bool a, bool b) { … }
inline constexpr bool check_implication(bool a, bool b) { … }
#if EIGEN_COMP_CXXVER >= 20
is_constant_evaluated;
#else
constexpr bool is_constant_evaluated() { return false; }
#endif
}
}
#endif