35 #ifndef _BLAZE_UTIL_NUMERICCAST_H_ 36 #define _BLAZE_UTIL_NUMERICCAST_H_ 71 template<
typename To,
typename From >
72 constexpr
bool IsCriticalIntIntConversion_v =
73 ( IsIntegral_v<To> && IsIntegral_v<From> && !IsSame_v<To,From> );
83 template<
typename To,
typename From >
84 constexpr
bool IsCriticalFloatIntConversion_v =
85 ( IsIntegral_v<To> && IsFloatingPoint_v<From> );
95 template<
typename To,
typename From >
96 constexpr
bool IsCriticalFloatFloatConversion_v =
97 ( IsFloatingPoint_v<To> && IsFloatingPoint_v<From> && (
sizeof(To) <
sizeof(From) ) );
107 template<
typename To,
typename From >
108 constexpr
bool IsUncriticalConversion_v =
109 ( !IsCriticalIntIntConversion_v<To,From> &&
110 !IsCriticalFloatIntConversion_v<To,From> &&
111 !IsCriticalFloatFloatConversion_v<To,From> );
127 template<
typename To,
typename From >
inline To
numeric_cast( From from );
140 template<
typename To,
typename From >
141 inline EnableIf_t< IsUncriticalConversion_v<To,From>, To >
142 numeric_cast_backend( From from ) noexcept
160 template<
typename To,
typename From >
161 inline EnableIf_t< IsCriticalIntIntConversion_v<To,From>, To >
162 numeric_cast_backend( From from )
164 if( (
sizeof(To) <
sizeof(From) || ( IsSigned_v<To> && IsUnsigned_v<From> ) ) &&
168 if( IsSigned_v<From> &&
190 template<
typename To,
typename From >
191 inline EnableIf_t< IsCriticalFloatIntConversion_v<To,From>, To >
192 numeric_cast_backend( From from )
220 template<
typename To,
typename From >
221 inline EnableIf_t< IsCriticalFloatFloatConversion_v<To,From>, To >
222 numeric_cast_backend( From from )
269 template<
typename To
276 return numeric_cast_backend<To>( from );
Constraint on the data type.
Header file for the FalseType type/value trait base class.
Header file for the IsSame and IsStrictlySame type traits.
Header file for exception macros.
Header file for the IsIntegral type trait.
To numeric_cast(From from)
Checked conversion of values of numeric type.
Definition: NumericCast.h:271
#define BLAZE_THROW_OVERFLOW_ERROR(MESSAGE)
Macro for the emission of a std::overflow_error exception.This macro encapsulates the default way of ...
Definition: Exception.h:427
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
Header file for the IsFloatingPoint type trait.
#define BLAZE_THROW_UNDERFLOW_ERROR(MESSAGE)
Macro for the emission of a std::underflow_error exception.This macro encapsulates the default way of...
Definition: Exception.h:475
decltype(auto) min(const DenseMatrix< MT1, SO1 > &lhs, const DenseMatrix< MT2, SO2 > &rhs)
Computes the componentwise minimum of the dense matrices lhs and rhs.
Definition: DMatDMatMapExpr.h:1147
decltype(auto) trunc(const DenseMatrix< MT, SO > &dm)
Applies the trunc() function to each single element of the dense matrix dm.
Definition: DMatMapExpr.h:1268
decltype(auto) max(const DenseMatrix< MT1, SO1 > &lhs, const DenseMatrix< MT2, SO2 > &rhs)
Computes the componentwise maximum of the dense matrices lhs and rhs.
Definition: DMatDMatMapExpr.h:1179
Header file for the EnableIf class template.
Header file for run time assertion macros.
#define BLAZE_CONSTRAINT_MUST_BE_NUMERIC_TYPE(T)
Constraint on the data type.In case the given data type T is not a numeric (integral or floating poin...
Definition: Numeric.h:61
Header file for the IsSigned type trait.
Header file for the IsUnsigned type trait.
Header file for the IntegralConstant class template.
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.In case of an invalid run time expression, the program execution is terminated. The BLAZE_INTERNAL_ASSERT macro can be disabled by setting the BLAZE_USER_ASSERTION flag to zero or by defining NDEBUG during the compilation.
Definition: Assert.h:101
Header file for the TrueType type/value trait base class.