mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-06-30 10:15:13 +08:00
Fix warnings
This commit is contained in:
parent
38b9cc263b
commit
e605227030
@ -638,19 +638,23 @@ EIGEN_STRONG_INLINE bool is_identically_zero(const Scalar& s) {
|
|||||||
template <typename A>
|
template <typename A>
|
||||||
constexpr bool is_int_or_enum_v = std::is_enum<A>::value || std::is_integral<A>::value;
|
constexpr bool is_int_or_enum_v = std::is_enum<A>::value || std::is_integral<A>::value;
|
||||||
|
|
||||||
|
template <typename A, typename B>
|
||||||
|
inline constexpr void plain_enum_asserts(A a, B b) {
|
||||||
|
static_assert(is_int_or_enum_v<A>, "Argument a must be an integer or enum");
|
||||||
|
static_assert(is_int_or_enum_v<B>, "Argument b must be an integer or enum");
|
||||||
|
}
|
||||||
|
|
||||||
/// \internal Gets the minimum of two values which may be integers or enums
|
/// \internal Gets the minimum of two values which may be integers or enums
|
||||||
template <typename A, typename B>
|
template <typename A, typename B>
|
||||||
inline constexpr int plain_enum_min(A a, B b) {
|
inline constexpr int plain_enum_min(A a, B b) {
|
||||||
static_assert(is_int_or_enum_v<A>, "Argument a must be an integer or enum");
|
plain_enum_asserts(a, b);
|
||||||
static_assert(is_int_or_enum_v<B>, "Argument b must be an integer or enum");
|
|
||||||
return ((int)a <= (int)b) ? (int)a : (int)b;
|
return ((int)a <= (int)b) ? (int)a : (int)b;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \internal Gets the maximum of two values which may be integers or enums
|
/// \internal Gets the maximum of two values which may be integers or enums
|
||||||
template <typename A, typename B>
|
template <typename A, typename B>
|
||||||
inline constexpr int plain_enum_max(A a, B b) {
|
inline constexpr int plain_enum_max(A a, B b) {
|
||||||
static_assert(is_int_or_enum_v<A>, "Argument a must be an integer or enum");
|
plain_enum_asserts(a, b);
|
||||||
static_assert(is_int_or_enum_v<B>, "Argument b must be an integer or enum");
|
|
||||||
return ((int)a >= (int)b) ? (int)a : (int)b;
|
return ((int)a >= (int)b) ? (int)a : (int)b;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -662,8 +666,7 @@ inline constexpr int plain_enum_max(A a, B b) {
|
|||||||
*/
|
*/
|
||||||
template <typename A, typename B>
|
template <typename A, typename B>
|
||||||
inline constexpr int min_size_prefer_dynamic(A a, B b) {
|
inline constexpr int min_size_prefer_dynamic(A a, B b) {
|
||||||
static_assert(is_int_or_enum_v<A>, "Argument a must be an integer or enum");
|
plain_enum_asserts(a, b);
|
||||||
static_assert(is_int_or_enum_v<B>, "Argument b must be an integer or enum");
|
|
||||||
if ((int)a == 0 || (int)b == 0) return 0;
|
if ((int)a == 0 || (int)b == 0) return 0;
|
||||||
if ((int)a == 1 || (int)b == 1) return 1;
|
if ((int)a == 1 || (int)b == 1) return 1;
|
||||||
if ((int)a == Dynamic || (int)b == Dynamic) return Dynamic;
|
if ((int)a == Dynamic || (int)b == Dynamic) return Dynamic;
|
||||||
@ -678,8 +681,7 @@ inline constexpr int min_size_prefer_dynamic(A a, B b) {
|
|||||||
*/
|
*/
|
||||||
template <typename A, typename B>
|
template <typename A, typename B>
|
||||||
inline constexpr int min_size_prefer_fixed(A a, B b) {
|
inline constexpr int min_size_prefer_fixed(A a, B b) {
|
||||||
static_assert(is_int_or_enum_v<A>, "Argument a must be an integer or enum");
|
plain_enum_asserts(a, b);
|
||||||
static_assert(is_int_or_enum_v<B>, "Argument b must be an integer or enum");
|
|
||||||
if ((int)a == 0 || (int)b == 0) return 0;
|
if ((int)a == 0 || (int)b == 0) return 0;
|
||||||
if ((int)a == 1 || (int)b == 1) return 1;
|
if ((int)a == 1 || (int)b == 1) return 1;
|
||||||
if ((int)a == Dynamic && (int)b == Dynamic) return Dynamic;
|
if ((int)a == Dynamic && (int)b == Dynamic) return Dynamic;
|
||||||
@ -691,12 +693,46 @@ inline constexpr int min_size_prefer_fixed(A a, B b) {
|
|||||||
/// \internal see `min_size_prefer_fixed`. No need for a separate variant for MaxSizes here.
|
/// \internal see `min_size_prefer_fixed`. No need for a separate variant for MaxSizes here.
|
||||||
template <typename A, typename B>
|
template <typename A, typename B>
|
||||||
inline constexpr int max_size_prefer_dynamic(A a, B b) {
|
inline constexpr int max_size_prefer_dynamic(A a, B b) {
|
||||||
static_assert(is_int_or_enum_v<A>, "Argument a must be an integer or enum");
|
plain_enum_asserts(a, b);
|
||||||
static_assert(is_int_or_enum_v<B>, "Argument b must be an integer or enum");
|
|
||||||
if ((int)a == Dynamic || (int)b == Dynamic) return Dynamic;
|
if ((int)a == Dynamic || (int)b == Dynamic) return Dynamic;
|
||||||
return plain_enum_max(a, b);
|
return plain_enum_max(a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename A, typename B>
|
||||||
|
inline constexpr bool enum_eq_not_dynamic(A a, B b) {
|
||||||
|
plain_enum_asserts(a, b);
|
||||||
|
if ((int)a == Dynamic || (int)b == Dynamic) return false;
|
||||||
|
return (int)a == (int)b;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename A, typename B>
|
||||||
|
inline constexpr bool enum_lt_not_dynamic(A a, B b) {
|
||||||
|
plain_enum_asserts(a, b);
|
||||||
|
if ((int)a == Dynamic || (int)b == Dynamic) return false;
|
||||||
|
return (int)a < (int)b;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename A, typename B>
|
||||||
|
inline constexpr bool enum_le_not_dynamic(A a, B b) {
|
||||||
|
plain_enum_asserts(a, b);
|
||||||
|
if ((int)a == Dynamic || (int)b == Dynamic) return false;
|
||||||
|
return (int)a <= (int)b;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename A, typename B>
|
||||||
|
inline constexpr bool enum_gt_not_dynamic(A a, B b) {
|
||||||
|
plain_enum_asserts(a, b);
|
||||||
|
if ((int)a == Dynamic || (int)b == Dynamic) return false;
|
||||||
|
return (int)a > (int)b;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename A, typename B>
|
||||||
|
inline constexpr bool enum_ge_not_dynamic(A a, B b) {
|
||||||
|
plain_enum_asserts(a, b);
|
||||||
|
if ((int)a == Dynamic || (int)b == Dynamic) return false;
|
||||||
|
return (int)a >= (int)b;
|
||||||
|
}
|
||||||
|
|
||||||
/// \internal Calculate logical XOR at compile time
|
/// \internal Calculate logical XOR at compile time
|
||||||
inline constexpr bool logical_xor(bool a, bool b) { return a != b; }
|
inline constexpr bool logical_xor(bool a, bool b) { return a != b; }
|
||||||
|
|
||||||
|
@ -37,9 +37,7 @@ struct maybe_coherent_pad_helper {
|
|||||||
template <typename DerivativeType, typename OtherDerivativeType>
|
template <typename DerivativeType, typename OtherDerivativeType>
|
||||||
struct maybe_coherent_pad_helper<
|
struct maybe_coherent_pad_helper<
|
||||||
DerivativeType, OtherDerivativeType,
|
DerivativeType, OtherDerivativeType,
|
||||||
std::enable_if_t<DerivativeType::SizeAtCompileTime >= OtherDerivativeType::SizeAtCompileTime &&
|
std::enable_if_t<enum_ge_not_dynamic(DerivativeType::SizeAtCompileTime, OtherDerivativeType::SizeAtCompileTime)>> {
|
||||||
DerivativeType::SizeAtCompileTime != Dynamic &&
|
|
||||||
OtherDerivativeType::SizeAtCompileTime != Dynamic>> {
|
|
||||||
using type = const DerivativeType&;
|
using type = const DerivativeType&;
|
||||||
static const DerivativeType& pad(const DerivativeType& x, const OtherDerivativeType& /*y*/) { return x; }
|
static const DerivativeType& pad(const DerivativeType& x, const OtherDerivativeType& /*y*/) { return x; }
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user