- Bug fixing for RTTI
- Fixes for declval + separated into own file - is_iterable - fixes for doxygen generation
This commit is contained in:
@@ -44,81 +44,81 @@
|
||||
///
|
||||
///
|
||||
///
|
||||
/// \section section_sign_functions Sign
|
||||
/// \section fennec_math_common_section_sign_functions Sign Functions
|
||||
///
|
||||
/// <table width="100%" class="fieldtable" id="table_fennec_math_common_sign_functions">
|
||||
/// <tr><th style="vertical-align: top">Syntax
|
||||
/// <th style="vertical-align: top">Description
|
||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||
/// \ref fennec::abs(fennec::genType) "genIType abs(genIType x)" <br>
|
||||
/// \ref fennec::abs(fennec::genType) "genFType abs(genFType x)" <br>
|
||||
/// \ref fennec::abs(fennec::genType) "genDType abs(genDType x)"
|
||||
/// \ref fennec::abs "genIType abs(genIType x)" <br>
|
||||
/// \ref fennec::abs "genFType abs(genFType x)" <br>
|
||||
/// \ref fennec::abs "genDType abs(genDType x)"
|
||||
/// <td width="50%" style="vertical-align: top">
|
||||
/// \copydetails fennec::abs(fennec::genType)
|
||||
/// \copydetails fennec::abs
|
||||
///
|
||||
///
|
||||
/// <tr><td width="50%" style="vertical-align: top" class="odd_c"> <br>
|
||||
/// \ref fennec::sign(fennec::genType) "genIType sign(genIType x)" <br>
|
||||
/// \ref fennec::sign(fennec::genType) "genFType sign(genFType x)" <br>
|
||||
/// \ref fennec::sign(fennec::genType) "genDType sign(genDType x)"
|
||||
/// \ref fennec::sign "genIType sign(genIType x)" <br>
|
||||
/// \ref fennec::sign "genFType sign(genFType x)" <br>
|
||||
/// \ref fennec::sign "genDType sign(genDType x)"
|
||||
/// <td width="50%" style="vertical-align: top" class="odd_c">
|
||||
/// \copydetails fennec::sign(fennec::genType)
|
||||
/// \copydetails fennec::sign
|
||||
///
|
||||
/// </table>
|
||||
///
|
||||
///
|
||||
/// \section section_rounding_functions Rounding
|
||||
/// \section fennec_math_common_section_rounding_functions Rounding Functions
|
||||
///
|
||||
/// <table width="100%" class="fieldtable" id="table_fennec_math_common_rounding_functions">
|
||||
/// <tr><th style="vertical-align: top">Syntax
|
||||
/// <th style="vertical-align: top">Description
|
||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||
/// \ref fennec::floor(fennec::genType) "genFType floor(genFType x)" <br>
|
||||
/// \ref fennec::floor(fennec::genType) "genDType floor(genDType x)"
|
||||
/// \ref fennec::floor "genFType floor(genFType x)" <br>
|
||||
/// \ref fennec::floor "genDType floor(genDType x)"
|
||||
/// <td width="50%" style="vertical-align: top">
|
||||
/// \copydetails fennec::floor(fennec::genType)
|
||||
/// \copydetails fennec::floor
|
||||
///
|
||||
///
|
||||
/// <tr><td width="50%" style="vertical-align: top" class="odd_c"> <br>
|
||||
/// \ref fennec::ceil(fennec::genType) "genFType ceil(genFType x)" <br>
|
||||
/// \ref fennec::ceil(fennec::genType) "genDType ceil(genDType x)"
|
||||
/// \ref fennec::ceil "genFType ceil(genFType x)" <br>
|
||||
/// \ref fennec::ceil "genDType ceil(genDType x)"
|
||||
/// <td width="50%" style="vertical-align: top" class="odd_c">
|
||||
/// \copydetails fennec::ceil(fennec::genType)
|
||||
/// \copydetails fennec::ceil
|
||||
///
|
||||
///
|
||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||
/// \ref fennec::round(fennec::genType) "genFType round(genFType x)" <br>
|
||||
/// \ref fennec::round(fennec::genType) "genDType round(genDType x)"
|
||||
/// \ref fennec::round "genFType round(genFType x)" <br>
|
||||
/// \ref fennec::round "genDType round(genDType x)"
|
||||
/// <td width="50%" style="vertical-align: top">
|
||||
/// \copydetails fennec::round(fennec::genType)
|
||||
/// \copydetails fennec::round
|
||||
///
|
||||
///
|
||||
/// <tr><td width="50%" style="vertical-align: top" class="odd_c"> <br>
|
||||
/// \ref fennec::roundEven(fennec::genType) "genFType roundEven(genFType x)" <br>
|
||||
/// \ref fennec::roundEven(fennec::genType) "genDType roundEven(genDType x)"
|
||||
/// \ref fennec::roundEven "genFType roundEven(genFType x)" <br>
|
||||
/// \ref fennec::roundEven "genDType roundEven(genDType x)"
|
||||
/// <td width="50%" style="vertical-align: top" class="odd_c">
|
||||
/// \copydetails fennec::roundEven(fennec::genType)
|
||||
/// \copydetails fennec::roundEven
|
||||
///
|
||||
///
|
||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||
/// \ref fennec::trunc(fennec::genType) "genFType trunc(genFType x)" <br>
|
||||
/// \ref fennec::trunc(fennec::genType) "genDType trunc(genDType x)"
|
||||
/// \ref fennec::trunc "genFType trunc(genFType x)" <br>
|
||||
/// \ref fennec::trunc "genDType trunc(genDType x)"
|
||||
/// <td width="50%" style="vertical-align: top">
|
||||
/// \copydetails fennec::trunc(fennec::genType)
|
||||
/// \copydetails fennec::trunc
|
||||
///
|
||||
/// </table>
|
||||
///
|
||||
///
|
||||
/// \section section_decimal_functions Decimal-Point
|
||||
/// \section fennec_math_common_section_decimal_functions Decimal-Point Functions
|
||||
///
|
||||
/// <table width="100%" class="fieldtable" id="table_fennec_math_common_decimal_functions">
|
||||
/// <tr><th style="vertical-align: top">Syntax
|
||||
/// <th style="vertical-align: top">Description
|
||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||
/// \ref fennec::fract(fennec::genType) "genFType fract(genFType x)" <br>
|
||||
/// \ref fennec::fract(fennec::genType) "genDType fract(genDType x)"
|
||||
/// \ref fennec::fract "genFType fract(genFType x)" <br>
|
||||
/// \ref fennec::fract "genDType fract(genDType x)"
|
||||
/// <td width="50%" style="vertical-align: top">
|
||||
/// \copydetails fennec::fract(fennec::genType)
|
||||
/// \copydetails fennec::fract
|
||||
///
|
||||
/// <tr><td width="50%" style="vertical-align: top" class="odd_c"> <br>
|
||||
/// \ref fennec::mod "genFType mod(genFType x, float y)" <br>
|
||||
@@ -129,59 +129,59 @@
|
||||
/// \copydetails fennec::mod
|
||||
///
|
||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||
/// \ref fennec::modf(fennec::genType, fennec::genType&) "genFType modf(genFType x, out genFType i)" <br>
|
||||
/// \ref fennec::modf(fennec::genType, fennec::genType&) "genDType modf(genDType x, out genDType i)"
|
||||
/// \ref fennec::modf "genFType modf(genFType x, out genFType i)" <br>
|
||||
/// \ref fennec::modf "genDType modf(genDType x, out genDType i)"
|
||||
/// <td width="50%" style="vertical-align: top">
|
||||
/// \copydetails fennec::modf(fennec::genType, fennec::genType&)
|
||||
/// \copydetails fennec::modf
|
||||
///
|
||||
/// <tr><td width="50%" style="vertical-align: top" class="odd_c"> <br>
|
||||
/// \ref fennec::isnan(fennec::genType) "genBType isnan(genFType x)" <br>
|
||||
/// \ref fennec::isnan(fennec::genType) "genBType isnan(genDType x)"
|
||||
/// \ref fennec::isnan "genBType isnan(genFType x)" <br>
|
||||
/// \ref fennec::isnan "genBType isnan(genDType x)"
|
||||
/// <td width="50%" style="vertical-align: top" class="odd_c">
|
||||
/// \copydetails fennec::isnan(fennec::genType)
|
||||
/// \copydetails fennec::isnan
|
||||
///
|
||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||
/// \ref fennec::isinf(fennec::genType) "genBType isinf(genFType x)" <br>
|
||||
/// \ref fennec::isinf(fennec::genType) "genBType isinf(genDType x)"
|
||||
/// \ref fennec::isinf "genBType isinf(genFType x)" <br>
|
||||
/// \ref fennec::isinf "genBType isinf(genDType x)"
|
||||
/// <td width="50%" style="vertical-align: top">
|
||||
/// \copydetails fennec::isinf(fennec::genType)
|
||||
/// \copydetails fennec::isinf
|
||||
///
|
||||
/// <tr><td width="50%" style="vertical-align: top" class="odd_c"> <br>
|
||||
/// \ref fennec::frexp(fennec::genType, fennec::genIType&) "genFType frexp(genFType x, out genIType exp)" <br>
|
||||
/// \ref fennec::frexp(fennec::genType, fennec::genIType&) "genDType frexp(genDType x, out genIType exp)"
|
||||
/// \ref fennec::frexp "genFType frexp(genFType x, out genIType exp)" <br>
|
||||
/// \ref fennec::frexp "genDType frexp(genDType x, out genIType exp)"
|
||||
/// <td width="50%" style="vertical-align: top" class="odd_c">
|
||||
/// \copydetails fennec::frexp(fennec::genType, fennec::genIType&)
|
||||
/// \copydetails fennec::frexp
|
||||
///
|
||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||
/// \ref fennec::ldexp(fennec::genType, fennec::genIType) "genFType ldexp(genFType x, genIType exp)" <br>
|
||||
/// \ref fennec::ldexp(fennec::genType, fennec::genIType) "genDType ldexp(genDType x, genIType exp)"
|
||||
/// \ref fennec::ldexp "genFType ldexp(genFType x, genIType exp)" <br>
|
||||
/// \ref fennec::ldexp "genDType ldexp(genDType x, genIType exp)"
|
||||
/// <td width="50%" style="vertical-align: top">
|
||||
/// \copydetails fennec::ldexp(fennec::genType, fennec::genIType)
|
||||
/// \copydetails fennec::ldexp
|
||||
///
|
||||
/// </table>
|
||||
///
|
||||
///
|
||||
/// \section section_bit_conversion_functions Bit Conversion
|
||||
/// \section fennec_math_common_section_bit_functions Bit Conversion
|
||||
///
|
||||
/// <table width="100%" class="fieldtable" id="table_fennec_math_common_bit_conversions">
|
||||
/// <tr><th style="vertical-align: top">Syntax
|
||||
/// <th style="vertical-align: top">Description
|
||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||
/// \ref fennec::floatBitsToInt(fennec::genType) "genIType floatBitsToInt(genType value)" <br>
|
||||
/// \ref fennec::floatBitsToUint(fennec::genType) "genUType floatBitsToUint(genType value)"
|
||||
/// \ref fennec::floatBitsToInt "genIType floatBitsToInt(genType value)" <br>
|
||||
/// \ref fennec::floatBitsToUint "genUType floatBitsToUint(genType value)"
|
||||
/// <td width="50%" style="vertical-align: top">
|
||||
/// \copydetails fennec::floatBitsToUint(fennec::genType)
|
||||
/// \copydetails fennec::floatBitsToUint
|
||||
///
|
||||
/// <tr><td width="50%" style="vertical-align: top" class="odd_c"> <br>
|
||||
/// \ref fennec::intBitsToFloat(fennec::genIType) "genFType intBitsToFloat(genIType value)" <br>
|
||||
/// \ref fennec::uintBitsToFloat(fennec::genUType) "genFType uintBitsToFloat(genUType value)"
|
||||
/// \ref fennec::intBitsToFloat "genFType intBitsToFloat(genIType value)" <br>
|
||||
/// \ref fennec::uintBitsToFloat "genFType uintBitsToFloat(genUType value)"
|
||||
/// <td width="50%" style="vertical-align: top" class="odd_c">
|
||||
/// \copydetails fennec::uintBitsToFloat(fennec::genType)
|
||||
/// \copydetails fennec::uintBitsToFloat
|
||||
///
|
||||
/// </table>
|
||||
///
|
||||
///
|
||||
/// \section section_comparison_functions Comparison
|
||||
/// \section fennec_math_common_section_comparison_functions Comparison Functions
|
||||
///
|
||||
/// <table width="100%" class="fieldtable" id="table_fennec_math_common_comparison_functions">
|
||||
/// <tr><th style="vertical-align: top">Syntax
|
||||
@@ -226,7 +226,7 @@
|
||||
/// </table>
|
||||
///
|
||||
///
|
||||
/// \section section_curve_functions Curves
|
||||
/// \section fennec_math_common_section_curve_functions Curve Functions
|
||||
///
|
||||
/// <table width="100%" class="fieldtable" id="table_fennec_math_curve_functions">
|
||||
/// <tr><th style="vertical-align: top">Syntax
|
||||
@@ -256,11 +256,11 @@
|
||||
/// \copydetails fennec::mix
|
||||
///
|
||||
/// <tr><td width="50%" style="vertical-align: top" class="odd_c"> <br>
|
||||
/// \ref fennec::mix(fennec::genBType, fennec::genBType, fennec::genBType) "mix(genBType x, genBType y, genBType a)" <br>
|
||||
/// \ref fennec::mix(fennec::genType, fennec::genType, fennec::genBType) "mix(genIType x, genIType y, genBType a)" <br>
|
||||
/// \ref fennec::mix(fennec::genType, fennec::genType, fennec::genBType) "mix(genUType x, genUType y, genBType a)" <br>
|
||||
/// \ref fennec::mix(fennec::genType, fennec::genType, fennec::genBType) "mix(genFType x, genFType y, genBType a)" <br>
|
||||
/// \ref fennec::mix(fennec::genType, fennec::genType, fennec::genBType) "mix(genDType x, genDType y, genBType a)"
|
||||
/// \ref fennec::mix "mix(genBType x, genBType y, genBType a)" <br>
|
||||
/// \ref fennec::mix "mix(genIType x, genIType y, genBType a)" <br>
|
||||
/// \ref fennec::mix "mix(genUType x, genUType y, genBType a)" <br>
|
||||
/// \ref fennec::mix "mix(genFType x, genFType y, genBType a)" <br>
|
||||
/// \ref fennec::mix "mix(genDType x, genDType y, genBType a)"
|
||||
/// <td width="50%" style="vertical-align: top" class="odd_c">
|
||||
/// \copydetails fennec::mix
|
||||
///
|
||||
@@ -308,14 +308,6 @@ constexpr genType sign(genType x) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> sign(const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::sign(x[i]) ...);
|
||||
}
|
||||
|
||||
|
||||
// Absolute Value ======================================================================================================
|
||||
|
||||
///
|
||||
@@ -331,14 +323,6 @@ constexpr genType abs(genType x) {
|
||||
return x * fennec::sign(x);
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> abs(const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::abs(x[i]) ...);
|
||||
}
|
||||
|
||||
/// @}
|
||||
|
||||
|
||||
@@ -366,14 +350,6 @@ constexpr genType floor(genType x) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> floor(const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::floor(x[i]) ...);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Ceil ================================================================================================================
|
||||
|
||||
@@ -391,14 +367,6 @@ constexpr genType ceil(genType x) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> ceil(const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::ceil(x[i]) ...);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Round ===============================================================================================================
|
||||
|
||||
@@ -416,14 +384,6 @@ template<typename genType> constexpr genType round(genType x) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> round(const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::round(x[i]) ...);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Trunc ===============================================================================================================
|
||||
|
||||
@@ -441,14 +401,6 @@ constexpr genType trunc(genType x) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> trunc(const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::trunc(x[i]) ...);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Round Even ==========================================================================================================
|
||||
|
||||
@@ -486,13 +438,6 @@ constexpr genType roundEven(genType x) {
|
||||
//return i + static_cast<genType>(up);
|
||||
}
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> roundEven(const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::roundEven(x[i]) ...);
|
||||
}
|
||||
|
||||
/// @}
|
||||
|
||||
|
||||
@@ -519,14 +464,6 @@ constexpr genType fract(genType x) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> fract(const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::fract(x[i]) ...);
|
||||
}
|
||||
|
||||
|
||||
// Mod =================================================================================================================
|
||||
|
||||
///
|
||||
@@ -544,19 +481,6 @@ constexpr genType mod(genType x, genType y) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> mod(const vector<genType, i...>& x, genType y) {
|
||||
return x - y * fennec::floor(x / y);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> mod(const vector<genType, i...>& x, const vector<genType, i...>& y) {
|
||||
return x - y * fennec::floor(x / y);
|
||||
}
|
||||
|
||||
|
||||
// ModF ================================================================================================================
|
||||
|
||||
///
|
||||
@@ -574,14 +498,6 @@ constexpr genType modf(genType x, genType& i) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> modf(const vector<genType, i...>& x, vector<genType, i...>& I) {
|
||||
I = fennec::floor(x); return fennec::fract(x);
|
||||
}
|
||||
|
||||
|
||||
// Is NaN ==============================================================================================================
|
||||
|
||||
///
|
||||
@@ -603,14 +519,6 @@ constexpr genBType isnan(genType x) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, typename genBType = bool_t, size_t...i> requires(is_bool_v<genBType>)
|
||||
constexpr vector<genBType, i...> isnan(const vector<genType, i...>& x) {
|
||||
return vector<genBType, i...>(fennec::isnan(x[i]) ...);
|
||||
}
|
||||
|
||||
|
||||
// Is Inf ==============================================================================================================
|
||||
|
||||
///
|
||||
@@ -627,19 +535,11 @@ constexpr genBType isinf(genType x) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, typename genBType = bool_t, size_t...i> requires(is_bool_v<genBType>)
|
||||
constexpr vector<genBType, i...> isinf(const vector<genType, i...>& x) {
|
||||
return vector<genBType, i...>(fennec::isinf(x[i]) ...);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Bit Conversion ======================================================================================================
|
||||
|
||||
///
|
||||
/// \copydetails fennec::floatBitsToUint(fennec::genFType)
|
||||
/// \copydetails fennec::floatBitsToUint
|
||||
template<typename genType, typename genIType = int_t> requires(is_floating_point_v<genType> and is_integral_v<genIType> and is_signed_v<genIType> and sizeof(genType) == sizeof(genIType))
|
||||
constexpr genIType floatBitsToInt(genType x) {
|
||||
return fennec::bit_cast<genIType>(x);
|
||||
@@ -669,7 +569,7 @@ constexpr genUType floatBitsToUint(genType x) {
|
||||
|
||||
|
||||
///
|
||||
/// \copydetails fennec::uintBitsToFloat(fennec::genUType)
|
||||
/// \copydetails fennec::uintBitsToFloat
|
||||
template<typename genType = float_t, typename genIType = int_t> requires(is_floating_point_v<genType> and is_integral_v<genIType> and is_signed_v<genIType> and sizeof(genType) == sizeof(genIType))
|
||||
constexpr genType intBitsToFloat(genIType x) {
|
||||
return fennec::bit_cast<genType>(x);
|
||||
@@ -696,29 +596,6 @@ constexpr genType uintBitsToFloat(genUType x) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType = float_t, typename genIType = int_t, size_t...i> requires(is_floating_point_v<genType> and is_integral_v<genIType> and is_signed_v<genIType> and sizeof(genType) == sizeof(genIType))
|
||||
constexpr vector<genIType, i...> floatBitsToInt(const vector<genType, i...>& x) {
|
||||
return vector<genIType, i...>(fennec::bit_cast<genIType>(x[i])...);
|
||||
}
|
||||
|
||||
template<typename genType = float_t, typename genUType = uint_t, size_t...i> requires(is_floating_point_v<genType> and is_integral_v<genUType> and is_unsigned_v<genUType> and sizeof(genType) == sizeof(genUType))
|
||||
constexpr vector<genUType, i...> floatBitsToUint(const vector<genType, i...>& x) {
|
||||
return vector<genUType, i...>(fennec::bit_cast<genUType>(x[i])...);
|
||||
}
|
||||
|
||||
template<typename genType = float_t, typename genIType = int_t, size_t...i> requires(is_floating_point_v<genType> and is_integral_v<genIType> and is_signed_v<genIType> and sizeof(genType) == sizeof(genIType))
|
||||
constexpr vector<genType, i...> intBitsToFloat(const vector<genIType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::bit_cast<genType>(x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType = float_t, typename genUType = uint_t, size_t...i> requires(is_floating_point_v<genType> and is_integral_v<genUType> and is_unsigned_v<genUType> and sizeof(genType) == sizeof(genUType))
|
||||
constexpr vector<genType, i...> uintBitsToFloat(const vector<genUType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::bit_cast<genType>(x[i]) ...);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// fma =================================================================================================================
|
||||
|
||||
@@ -738,14 +615,6 @@ constexpr genType fma(genType a, genType b, genType c) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> fma(const vector<genType, i...>& a, const vector<genType, i...>& b, const vector<genType, i...>& c) {
|
||||
return vector<genType, i...>(fennec::fma(a[i], b[i], c[i]) ...);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// frexp ===============================================================================================================
|
||||
|
||||
@@ -769,14 +638,6 @@ constexpr genType frexp(genType x, genIType& exp) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, typename genIType = int_t, size_t...i> requires(is_integral_v<genIType>)
|
||||
constexpr vector<genType, i...> frexp(const vector<genType, i...>& x, vector<genIType, i...>& exp) {
|
||||
return vector<genType, i...>(fennec::frexp(x[i], exp[i])...);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ldexp ===============================================================================================================
|
||||
|
||||
@@ -802,14 +663,6 @@ constexpr genType ldexp(genType x, genIType exp) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, typename genIType = int_t, size_t...i> requires(is_integral_v<genIType>)
|
||||
constexpr vector<genType, i...> ldexp(const vector<genType, i...>& x, const vector<genIType, i...>& exp) {
|
||||
return vector<genType, i...>(fennec::ldexp(x[i], exp[i])...);
|
||||
}
|
||||
|
||||
|
||||
/// @}
|
||||
|
||||
|
||||
@@ -837,24 +690,6 @@ constexpr genType min(genType x, genType y) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> min(genType x, const vector<genType, i...>& y) {
|
||||
return vector<genType, i...>(fennec::min(x, y[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> min(const vector<genType, i...>& x, genType y) {
|
||||
return vector<genType, i...>(fennec::min(x[i], y) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> min(const vector<genType, i...>& x, const vector<genType, i...>& y) {
|
||||
return vector<genType, i...>(fennec::min(x[i], y[i]) ...);
|
||||
}
|
||||
|
||||
|
||||
// Max =================================================================================================================
|
||||
|
||||
///
|
||||
@@ -872,24 +707,6 @@ constexpr genType max(genType x, genType y) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> max(genType x, const vector<genType, i...>& y) {
|
||||
return vector<genType, i...>(fennec::max(x, y[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> max(const vector<genType, i...>& x, genType y) {
|
||||
return vector<genType, i...>(fennec::max(x[i], y) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> max(const vector<genType, i...>& x, const vector<genType, i...>& y) {
|
||||
return vector<genType, i...>(fennec::max(x[i], y[i]) ...);
|
||||
}
|
||||
|
||||
|
||||
// Clamp ===============================================================================================================
|
||||
|
||||
///
|
||||
@@ -908,19 +725,6 @@ constexpr genType clamp(genType x, genType minVal, genType maxVal) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> clamp(const vector<genType, i...>& x, genType minVal, genType maxVal) {
|
||||
return vector<genType, i...>(fennec::min(fennec::max(x[i], minVal), maxVal)...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> clamp(const vector<genType, i...>& x, const vector<genType, i...>& minVal, const vector<genType, i...>& maxVal) {
|
||||
return vector<genType, i...>(fennec::min(fennec::max(x[i], minVal[i]), maxVal[i])...);
|
||||
}
|
||||
|
||||
|
||||
/// @}
|
||||
|
||||
|
||||
@@ -948,19 +752,6 @@ constexpr genType step(genType edge, genType x) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, size_t...i> requires(is_floating_point_v<genType>)
|
||||
constexpr vector<genType, i...> step(genType edge, const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::step(edge, x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i> requires(is_floating_point_v<genType>)
|
||||
constexpr vector<genType, i...> step(const vector<genType, i...>& edge, const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::step(edge[i], x[i]) ...);
|
||||
}
|
||||
|
||||
|
||||
// Smoothstep ==========================================================================================================
|
||||
|
||||
///
|
||||
@@ -989,19 +780,6 @@ constexpr genType smoothstep(genType edge0, genType edge1, genType x) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, size_t...i> requires(is_floating_point_v<genType>)
|
||||
constexpr vector<genType, i...> smoothstep(genType edge0, genType edge1, const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::smoothstep(edge0, edge1, x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i> requires(is_floating_point_v<genType>)
|
||||
constexpr vector<genType, i...> smoothstep(const vector<genType, i...>& edge0, const vector<genType, i...>& edge1, const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::smoothstep(edge0[i], edge1[i], x[i]) ...);
|
||||
}
|
||||
|
||||
|
||||
// Mix =================================================================================================================
|
||||
|
||||
///
|
||||
@@ -1022,18 +800,6 @@ constexpr genType mix(genType x, genType y, genType a) {
|
||||
return x * (genType(1.0) - a) + y * a;
|
||||
}
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
|
||||
template<typename genType, size_t...i> requires(is_floating_point_v<genType>)
|
||||
constexpr vector<genType, i...> mix(const vector<genType, i...>& x, const vector<genType, i...>& y, genType a) {
|
||||
return x * (genType(1.0) - a) + y * a;
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i> requires(is_floating_point_v<genType>)
|
||||
constexpr vector<genType, i...> mix(const vector<genType, i...>& x, const vector<genType, i...>& y, const vector<genType, i...>& a) {
|
||||
return x * (genType(1.0) - a) + y * a;
|
||||
}
|
||||
|
||||
|
||||
// Mix (Bool) ==========================================================================================================
|
||||
|
||||
@@ -1058,7 +824,177 @@ constexpr genType mix(genType x, genType y, genBType a) {
|
||||
}
|
||||
|
||||
|
||||
// Vector Specializations ----------------------------------------------------------------------------------------------
|
||||
// Internal ============================================================================================================
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> sign(const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::sign(x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> abs(const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::abs(x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> floor(const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::floor(x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> ceil(const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::ceil(x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> round(const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::round(x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> trunc(const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::trunc(x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> roundEven(const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::roundEven(x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> fract(const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::fract(x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> mod(const vector<genType, i...>& x, genType y) {
|
||||
return x - y * fennec::floor(x / y);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> mod(const vector<genType, i...>& x, const vector<genType, i...>& y) {
|
||||
return x - y * fennec::floor(x / y);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> modf(const vector<genType, i...>& x, vector<genType, i...>& I) {
|
||||
I = fennec::floor(x); return fennec::fract(x);
|
||||
}
|
||||
|
||||
template<typename genType, typename genBType = bool_t, size_t...i> requires(is_bool_v<genBType>)
|
||||
constexpr vector<genBType, i...> isnan(const vector<genType, i...>& x) {
|
||||
return vector<genBType, i...>(fennec::isnan(x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, typename genBType = bool_t, size_t...i> requires(is_bool_v<genBType>)
|
||||
constexpr vector<genBType, i...> isinf(const vector<genType, i...>& x) {
|
||||
return vector<genBType, i...>(fennec::isinf(x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType = float_t, typename genIType = int_t, size_t...i> requires(is_floating_point_v<genType> and is_integral_v<genIType> and is_signed_v<genIType> and sizeof(genType) == sizeof(genIType))
|
||||
constexpr vector<genIType, i...> floatBitsToInt(const vector<genType, i...>& x) {
|
||||
return vector<genIType, i...>(fennec::bit_cast<genIType>(x[i])...);
|
||||
}
|
||||
|
||||
template<typename genType = float_t, typename genUType = uint_t, size_t...i> requires(is_floating_point_v<genType> and is_integral_v<genUType> and is_unsigned_v<genUType> and sizeof(genType) == sizeof(genUType))
|
||||
constexpr vector<genUType, i...> floatBitsToUint(const vector<genType, i...>& x) {
|
||||
return vector<genUType, i...>(fennec::bit_cast<genUType>(x[i])...);
|
||||
}
|
||||
|
||||
template<typename genType = float_t, typename genIType = int_t, size_t...i> requires(is_floating_point_v<genType> and is_integral_v<genIType> and is_signed_v<genIType> and sizeof(genType) == sizeof(genIType))
|
||||
constexpr vector<genType, i...> intBitsToFloat(const vector<genIType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::bit_cast<genType>(x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType = float_t, typename genUType = uint_t, size_t...i> requires(is_floating_point_v<genType> and is_integral_v<genUType> and is_unsigned_v<genUType> and sizeof(genType) == sizeof(genUType))
|
||||
constexpr vector<genType, i...> uintBitsToFloat(const vector<genUType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::bit_cast<genType>(x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> fma(const vector<genType, i...>& a, const vector<genType, i...>& b, const vector<genType, i...>& c) {
|
||||
return vector<genType, i...>(fennec::fma(a[i], b[i], c[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, typename genIType = int_t, size_t...i> requires(is_integral_v<genIType>)
|
||||
constexpr vector<genType, i...> frexp(const vector<genType, i...>& x, vector<genIType, i...>& exp) {
|
||||
return vector<genType, i...>(fennec::frexp(x[i], exp[i])...);
|
||||
}
|
||||
|
||||
template<typename genType, typename genIType = int_t, size_t...i> requires(is_integral_v<genIType>)
|
||||
constexpr vector<genType, i...> ldexp(const vector<genType, i...>& x, const vector<genIType, i...>& exp) {
|
||||
return vector<genType, i...>(fennec::ldexp(x[i], exp[i])...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> min(genType x, const vector<genType, i...>& y) {
|
||||
return vector<genType, i...>(fennec::min(x, y[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> min(const vector<genType, i...>& x, genType y) {
|
||||
return vector<genType, i...>(fennec::min(x[i], y) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> min(const vector<genType, i...>& x, const vector<genType, i...>& y) {
|
||||
return vector<genType, i...>(fennec::min(x[i], y[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> max(genType x, const vector<genType, i...>& y) {
|
||||
return vector<genType, i...>(fennec::max(x, y[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> max(const vector<genType, i...>& x, genType y) {
|
||||
return vector<genType, i...>(fennec::max(x[i], y) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> max(const vector<genType, i...>& x, const vector<genType, i...>& y) {
|
||||
return vector<genType, i...>(fennec::max(x[i], y[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> clamp(const vector<genType, i...>& x, genType minVal, genType maxVal) {
|
||||
return vector<genType, i...>(fennec::min(fennec::max(x[i], minVal), maxVal)...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i>
|
||||
constexpr vector<genType, i...> clamp(const vector<genType, i...>& x, const vector<genType, i...>& minVal, const vector<genType, i...>& maxVal) {
|
||||
return vector<genType, i...>(fennec::min(fennec::max(x[i], minVal[i]), maxVal[i])...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i> requires(is_floating_point_v<genType>)
|
||||
constexpr vector<genType, i...> step(genType edge, const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::step(edge, x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i> requires(is_floating_point_v<genType>)
|
||||
constexpr vector<genType, i...> step(const vector<genType, i...>& edge, const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::step(edge[i], x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i> requires(is_floating_point_v<genType>)
|
||||
constexpr vector<genType, i...> smoothstep(genType edge0, genType edge1, const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::smoothstep(edge0, edge1, x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i> requires(is_floating_point_v<genType>)
|
||||
constexpr vector<genType, i...> smoothstep(const vector<genType, i...>& edge0, const vector<genType, i...>& edge1, const vector<genType, i...>& x) {
|
||||
return vector<genType, i...>(fennec::smoothstep(edge0[i], edge1[i], x[i]) ...);
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i> requires(is_floating_point_v<genType>)
|
||||
constexpr vector<genType, i...> mix(const vector<genType, i...>& x, const vector<genType, i...>& y, genType a) {
|
||||
return x * (genType(1.0) - a) + y * a;
|
||||
}
|
||||
|
||||
template<typename genType, size_t...i> requires(is_floating_point_v<genType>)
|
||||
constexpr vector<genType, i...> mix(const vector<genType, i...>& x, const vector<genType, i...>& y, const vector<genType, i...>& a) {
|
||||
return x * (genType(1.0) - a) + y * a;
|
||||
}
|
||||
|
||||
template<typename genType, typename genBType = bool_t, size_t...i> requires(is_bool_v<genBType> and is_floating_point_v<genType>)
|
||||
constexpr vector<genType, i...> mix(const vector<genType, i...>& x, const vector<genType, i...>& y, genBType a) {
|
||||
|
||||
Reference in New Issue
Block a user