35#ifndef _BLAZE_UTIL_NUMERICCAST_H_
36#define _BLAZE_UTIL_NUMERICCAST_H_
69template<
typename To,
typename From >
70constexpr bool IsCriticalIntIntConversion_v =
71 ( IsIntegral_v<To> && IsIntegral_v<From> && !IsSame_v<To,From> );
81template<
typename To,
typename From >
82constexpr bool IsCriticalFloatIntConversion_v =
83 ( IsIntegral_v<To> && IsFloatingPoint_v<From> );
93template<
typename To,
typename From >
94constexpr bool IsCriticalFloatFloatConversion_v =
95 ( IsFloatingPoint_v<To> && IsFloatingPoint_v<From> && (
sizeof(To) <
sizeof(From) ) );
105template<
typename To,
typename From >
106constexpr bool IsUncriticalConversion_v =
107 ( !IsCriticalIntIntConversion_v<To,From> &&
108 !IsCriticalFloatIntConversion_v<To,From> &&
109 !IsCriticalFloatFloatConversion_v<To,From> );
125template<
typename To,
typename From >
inline To
numeric_cast( From from );
138template<
typename To,
typename From >
139inline EnableIf_t< IsUncriticalConversion_v<To,From>, To >
140 numeric_cast_backend( From from )
noexcept
158template<
typename To,
typename From >
159inline EnableIf_t< IsCriticalIntIntConversion_v<To,From>, To >
160 numeric_cast_backend( From from )
162 if( (
sizeof(To) <
sizeof(From) || ( IsSigned_v<To> && IsUnsigned_v<From> ) ) &&
167 if( IsSigned_v<From> &&
190template<
typename To,
typename From >
191inline EnableIf_t< IsCriticalFloatIntConversion_v<To,From>, To >
192 numeric_cast_backend( From from )
222template<
typename To,
typename From >
223inline EnableIf_t< IsCriticalFloatFloatConversion_v<To,From>, To >
224 numeric_cast_backend( From from )
280 return numeric_cast_backend<To>( from );
Header file for run time assertion macros.
Header file for the EnableIf class template.
Header file for the IntegralConstant class template.
Header file for the IsFloatingPoint type trait.
Header file for the IsIntegral type trait.
Header file for the IsSame and IsStrictlySame type traits.
Header file for the IsSigned type trait.
Header file for the IsUnsigned type trait.
Constraint on the data type.
#define BLAZE_CONSTRAINT_MUST_BE_NUMERIC_TYPE(T)
Constraint on the data type.
Definition: Numeric.h:61
decltype(auto) trunc(const DenseMatrix< MT, SO > &dm)
Applies the trunc() function to each single element of the dense matrix dm.
Definition: DMatMapExpr.h:1408
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:1339
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:1375
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.
Definition: Assert.h:101
To numeric_cast(From from)
Checked conversion of values of numeric type.
Definition: NumericCast.h:275
#define BLAZE_THROW_UNDERFLOW_ERROR(MESSAGE)
Macro for the emission of a std::underflow_error exception.
Definition: Exception.h:475
#define BLAZE_THROW_OVERFLOW_ERROR(MESSAGE)
Macro for the emission of a std::overflow_error exception.
Definition: Exception.h:427
Header file for exception macros.