fixed_point: Replace CONSTEXPR14 with constexpr
As we require the latest C++ standards to compile yuzu, checking for C++14 constexpr is not needed.
This commit is contained in:
		| @@ -6,12 +6,6 @@ | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #if __cplusplus >= 201402L | ||||
| #define CONSTEXPR14 constexpr | ||||
| #else | ||||
| #define CONSTEXPR14 | ||||
| #endif | ||||
|  | ||||
| #include <cstddef> // for size_t | ||||
| #include <cstdint> | ||||
| #include <exception> | ||||
| @@ -105,7 +99,7 @@ constexpr B next_to_base(N rhs) { | ||||
| struct divide_by_zero : std::exception {}; | ||||
|  | ||||
| template <size_t I, size_t F> | ||||
| CONSTEXPR14 FixedPoint<I, F> divide( | ||||
| constexpr FixedPoint<I, F> divide( | ||||
|     FixedPoint<I, F> numerator, FixedPoint<I, F> denominator, FixedPoint<I, F>& remainder, | ||||
|     typename std::enable_if<type_from_size<I + F>::next_size::is_specialized>::type* = nullptr) { | ||||
|  | ||||
| @@ -125,7 +119,7 @@ CONSTEXPR14 FixedPoint<I, F> divide( | ||||
| } | ||||
|  | ||||
| template <size_t I, size_t F> | ||||
| CONSTEXPR14 FixedPoint<I, F> divide( | ||||
| constexpr FixedPoint<I, F> divide( | ||||
|     FixedPoint<I, F> numerator, FixedPoint<I, F> denominator, FixedPoint<I, F>& remainder, | ||||
|     typename std::enable_if<!type_from_size<I + F>::next_size::is_specialized>::type* = nullptr) { | ||||
|  | ||||
| @@ -195,7 +189,7 @@ CONSTEXPR14 FixedPoint<I, F> divide( | ||||
|  | ||||
| // this is the usual implementation of multiplication | ||||
| template <size_t I, size_t F> | ||||
| CONSTEXPR14 FixedPoint<I, F> multiply( | ||||
| constexpr FixedPoint<I, F> multiply( | ||||
|     FixedPoint<I, F> lhs, FixedPoint<I, F> rhs, | ||||
|     typename std::enable_if<type_from_size<I + F>::next_size::is_specialized>::type* = nullptr) { | ||||
|  | ||||
| @@ -214,7 +208,7 @@ CONSTEXPR14 FixedPoint<I, F> multiply( | ||||
| // it is slightly slower, but is more robust since it doesn't | ||||
| // require and upgraded type | ||||
| template <size_t I, size_t F> | ||||
| CONSTEXPR14 FixedPoint<I, F> multiply( | ||||
| constexpr FixedPoint<I, F> multiply( | ||||
|     FixedPoint<I, F> lhs, FixedPoint<I, F> rhs, | ||||
|     typename std::enable_if<!type_from_size<I + F>::next_size::is_specialized>::type* = nullptr) { | ||||
|  | ||||
| @@ -283,7 +277,7 @@ public: // constructors | ||||
|  | ||||
| public: // conversion | ||||
|     template <size_t I2, size_t F2> | ||||
|     CONSTEXPR14 explicit FixedPoint(FixedPoint<I2, F2> other) { | ||||
|     constexpr explicit FixedPoint(FixedPoint<I2, F2> other) { | ||||
|         static_assert(I2 <= I && F2 <= F, "Scaling conversion can only upgrade types"); | ||||
|         using T = FixedPoint<I2, F2>; | ||||
|  | ||||
| @@ -352,81 +346,81 @@ public: // unary operators | ||||
|         return FixedPoint::from_base(+data_); | ||||
|     } | ||||
|  | ||||
|     CONSTEXPR14 FixedPoint& operator++() { | ||||
|     constexpr FixedPoint& operator++() { | ||||
|         data_ += one; | ||||
|         return *this; | ||||
|     } | ||||
|  | ||||
|     CONSTEXPR14 FixedPoint& operator--() { | ||||
|     constexpr FixedPoint& operator--() { | ||||
|         data_ -= one; | ||||
|         return *this; | ||||
|     } | ||||
|  | ||||
|     CONSTEXPR14 FixedPoint operator++(int) { | ||||
|     constexpr FixedPoint operator++(int) { | ||||
|         FixedPoint tmp(*this); | ||||
|         data_ += one; | ||||
|         return tmp; | ||||
|     } | ||||
|  | ||||
|     CONSTEXPR14 FixedPoint operator--(int) { | ||||
|     constexpr FixedPoint operator--(int) { | ||||
|         FixedPoint tmp(*this); | ||||
|         data_ -= one; | ||||
|         return tmp; | ||||
|     } | ||||
|  | ||||
| public: // basic math operators | ||||
|     CONSTEXPR14 FixedPoint& operator+=(FixedPoint n) { | ||||
|     constexpr FixedPoint& operator+=(FixedPoint n) { | ||||
|         data_ += n.data_; | ||||
|         return *this; | ||||
|     } | ||||
|  | ||||
|     CONSTEXPR14 FixedPoint& operator-=(FixedPoint n) { | ||||
|     constexpr FixedPoint& operator-=(FixedPoint n) { | ||||
|         data_ -= n.data_; | ||||
|         return *this; | ||||
|     } | ||||
|  | ||||
|     CONSTEXPR14 FixedPoint& operator*=(FixedPoint n) { | ||||
|     constexpr FixedPoint& operator*=(FixedPoint n) { | ||||
|         return assign(detail::multiply(*this, n)); | ||||
|     } | ||||
|  | ||||
|     CONSTEXPR14 FixedPoint& operator/=(FixedPoint n) { | ||||
|     constexpr FixedPoint& operator/=(FixedPoint n) { | ||||
|         FixedPoint temp; | ||||
|         return assign(detail::divide(*this, n, temp)); | ||||
|     } | ||||
|  | ||||
| private: | ||||
|     CONSTEXPR14 FixedPoint& assign(FixedPoint rhs) { | ||||
|     constexpr FixedPoint& assign(FixedPoint rhs) { | ||||
|         data_ = rhs.data_; | ||||
|         return *this; | ||||
|     } | ||||
|  | ||||
| public: // binary math operators, effects underlying bit pattern since these | ||||
|         // don't really typically make sense for non-integer values | ||||
|     CONSTEXPR14 FixedPoint& operator&=(FixedPoint n) { | ||||
|     constexpr FixedPoint& operator&=(FixedPoint n) { | ||||
|         data_ &= n.data_; | ||||
|         return *this; | ||||
|     } | ||||
|  | ||||
|     CONSTEXPR14 FixedPoint& operator|=(FixedPoint n) { | ||||
|     constexpr FixedPoint& operator|=(FixedPoint n) { | ||||
|         data_ |= n.data_; | ||||
|         return *this; | ||||
|     } | ||||
|  | ||||
|     CONSTEXPR14 FixedPoint& operator^=(FixedPoint n) { | ||||
|     constexpr FixedPoint& operator^=(FixedPoint n) { | ||||
|         data_ ^= n.data_; | ||||
|         return *this; | ||||
|     } | ||||
|  | ||||
|     template <class Integer, | ||||
|               class = typename std::enable_if<std::is_integral<Integer>::value>::type> | ||||
|     CONSTEXPR14 FixedPoint& operator>>=(Integer n) { | ||||
|     constexpr FixedPoint& operator>>=(Integer n) { | ||||
|         data_ >>= n; | ||||
|         return *this; | ||||
|     } | ||||
|  | ||||
|     template <class Integer, | ||||
|               class = typename std::enable_if<std::is_integral<Integer>::value>::type> | ||||
|     CONSTEXPR14 FixedPoint& operator<<=(Integer n) { | ||||
|     constexpr FixedPoint& operator<<=(Integer n) { | ||||
|         data_ <<= n; | ||||
|         return *this; | ||||
|     } | ||||
| @@ -484,7 +478,7 @@ public: // conversion to basic types | ||||
|     } | ||||
|  | ||||
| public: | ||||
|     CONSTEXPR14 void swap(FixedPoint& rhs) { | ||||
|     constexpr void swap(FixedPoint& rhs) { | ||||
|         using std::swap; | ||||
|         swap(data_, rhs.data_); | ||||
|     } | ||||
| @@ -496,8 +490,8 @@ public: | ||||
| // if we have the same fractional portion, but differing integer portions, we trivially upgrade the | ||||
| // smaller type | ||||
| template <size_t I1, size_t I2, size_t F> | ||||
| CONSTEXPR14 typename std::conditional<I1 >= I2, FixedPoint<I1, F>, FixedPoint<I2, F>>::type | ||||
| operator+(FixedPoint<I1, F> lhs, FixedPoint<I2, F> rhs) { | ||||
| constexpr typename std::conditional<I1 >= I2, FixedPoint<I1, F>, FixedPoint<I2, F>>::type operator+( | ||||
|     FixedPoint<I1, F> lhs, FixedPoint<I2, F> rhs) { | ||||
|  | ||||
|     using T = typename std::conditional<I1 >= I2, FixedPoint<I1, F>, FixedPoint<I2, F>>::type; | ||||
|  | ||||
| @@ -507,8 +501,8 @@ operator+(FixedPoint<I1, F> lhs, FixedPoint<I2, F> rhs) { | ||||
| } | ||||
|  | ||||
| template <size_t I1, size_t I2, size_t F> | ||||
| CONSTEXPR14 typename std::conditional<I1 >= I2, FixedPoint<I1, F>, FixedPoint<I2, F>>::type | ||||
| operator-(FixedPoint<I1, F> lhs, FixedPoint<I2, F> rhs) { | ||||
| constexpr typename std::conditional<I1 >= I2, FixedPoint<I1, F>, FixedPoint<I2, F>>::type operator-( | ||||
|     FixedPoint<I1, F> lhs, FixedPoint<I2, F> rhs) { | ||||
|  | ||||
|     using T = typename std::conditional<I1 >= I2, FixedPoint<I1, F>, FixedPoint<I2, F>>::type; | ||||
|  | ||||
| @@ -518,8 +512,8 @@ operator-(FixedPoint<I1, F> lhs, FixedPoint<I2, F> rhs) { | ||||
| } | ||||
|  | ||||
| template <size_t I1, size_t I2, size_t F> | ||||
| CONSTEXPR14 typename std::conditional<I1 >= I2, FixedPoint<I1, F>, FixedPoint<I2, F>>::type | ||||
| operator*(FixedPoint<I1, F> lhs, FixedPoint<I2, F> rhs) { | ||||
| constexpr typename std::conditional<I1 >= I2, FixedPoint<I1, F>, FixedPoint<I2, F>>::type operator*( | ||||
|     FixedPoint<I1, F> lhs, FixedPoint<I2, F> rhs) { | ||||
|  | ||||
|     using T = typename std::conditional<I1 >= I2, FixedPoint<I1, F>, FixedPoint<I2, F>>::type; | ||||
|  | ||||
| @@ -529,8 +523,8 @@ operator*(FixedPoint<I1, F> lhs, FixedPoint<I2, F> rhs) { | ||||
| } | ||||
|  | ||||
| template <size_t I1, size_t I2, size_t F> | ||||
| CONSTEXPR14 typename std::conditional<I1 >= I2, FixedPoint<I1, F>, FixedPoint<I2, F>>::type | ||||
| operator/(FixedPoint<I1, F> lhs, FixedPoint<I2, F> rhs) { | ||||
| constexpr typename std::conditional<I1 >= I2, FixedPoint<I1, F>, FixedPoint<I2, F>>::type operator/( | ||||
|     FixedPoint<I1, F> lhs, FixedPoint<I2, F> rhs) { | ||||
|  | ||||
|     using T = typename std::conditional<I1 >= I2, FixedPoint<I1, F>, FixedPoint<I2, F>>::type; | ||||
|  | ||||
| @@ -547,75 +541,75 @@ std::ostream& operator<<(std::ostream& os, FixedPoint<I, F> f) { | ||||
|  | ||||
| // basic math operators | ||||
| template <size_t I, size_t F> | ||||
| CONSTEXPR14 FixedPoint<I, F> operator+(FixedPoint<I, F> lhs, FixedPoint<I, F> rhs) { | ||||
| constexpr FixedPoint<I, F> operator+(FixedPoint<I, F> lhs, FixedPoint<I, F> rhs) { | ||||
|     lhs += rhs; | ||||
|     return lhs; | ||||
| } | ||||
| template <size_t I, size_t F> | ||||
| CONSTEXPR14 FixedPoint<I, F> operator-(FixedPoint<I, F> lhs, FixedPoint<I, F> rhs) { | ||||
| constexpr FixedPoint<I, F> operator-(FixedPoint<I, F> lhs, FixedPoint<I, F> rhs) { | ||||
|     lhs -= rhs; | ||||
|     return lhs; | ||||
| } | ||||
| template <size_t I, size_t F> | ||||
| CONSTEXPR14 FixedPoint<I, F> operator*(FixedPoint<I, F> lhs, FixedPoint<I, F> rhs) { | ||||
| constexpr FixedPoint<I, F> operator*(FixedPoint<I, F> lhs, FixedPoint<I, F> rhs) { | ||||
|     lhs *= rhs; | ||||
|     return lhs; | ||||
| } | ||||
| template <size_t I, size_t F> | ||||
| CONSTEXPR14 FixedPoint<I, F> operator/(FixedPoint<I, F> lhs, FixedPoint<I, F> rhs) { | ||||
| constexpr FixedPoint<I, F> operator/(FixedPoint<I, F> lhs, FixedPoint<I, F> rhs) { | ||||
|     lhs /= rhs; | ||||
|     return lhs; | ||||
| } | ||||
|  | ||||
| template <size_t I, size_t F, class Number, | ||||
|           class = typename std::enable_if<std::is_arithmetic<Number>::value>::type> | ||||
| CONSTEXPR14 FixedPoint<I, F> operator+(FixedPoint<I, F> lhs, Number rhs) { | ||||
| constexpr FixedPoint<I, F> operator+(FixedPoint<I, F> lhs, Number rhs) { | ||||
|     lhs += FixedPoint<I, F>(rhs); | ||||
|     return lhs; | ||||
| } | ||||
| template <size_t I, size_t F, class Number, | ||||
|           class = typename std::enable_if<std::is_arithmetic<Number>::value>::type> | ||||
| CONSTEXPR14 FixedPoint<I, F> operator-(FixedPoint<I, F> lhs, Number rhs) { | ||||
| constexpr FixedPoint<I, F> operator-(FixedPoint<I, F> lhs, Number rhs) { | ||||
|     lhs -= FixedPoint<I, F>(rhs); | ||||
|     return lhs; | ||||
| } | ||||
| template <size_t I, size_t F, class Number, | ||||
|           class = typename std::enable_if<std::is_arithmetic<Number>::value>::type> | ||||
| CONSTEXPR14 FixedPoint<I, F> operator*(FixedPoint<I, F> lhs, Number rhs) { | ||||
| constexpr FixedPoint<I, F> operator*(FixedPoint<I, F> lhs, Number rhs) { | ||||
|     lhs *= FixedPoint<I, F>(rhs); | ||||
|     return lhs; | ||||
| } | ||||
| template <size_t I, size_t F, class Number, | ||||
|           class = typename std::enable_if<std::is_arithmetic<Number>::value>::type> | ||||
| CONSTEXPR14 FixedPoint<I, F> operator/(FixedPoint<I, F> lhs, Number rhs) { | ||||
| constexpr FixedPoint<I, F> operator/(FixedPoint<I, F> lhs, Number rhs) { | ||||
|     lhs /= FixedPoint<I, F>(rhs); | ||||
|     return lhs; | ||||
| } | ||||
|  | ||||
| template <size_t I, size_t F, class Number, | ||||
|           class = typename std::enable_if<std::is_arithmetic<Number>::value>::type> | ||||
| CONSTEXPR14 FixedPoint<I, F> operator+(Number lhs, FixedPoint<I, F> rhs) { | ||||
| constexpr FixedPoint<I, F> operator+(Number lhs, FixedPoint<I, F> rhs) { | ||||
|     FixedPoint<I, F> tmp(lhs); | ||||
|     tmp += rhs; | ||||
|     return tmp; | ||||
| } | ||||
| template <size_t I, size_t F, class Number, | ||||
|           class = typename std::enable_if<std::is_arithmetic<Number>::value>::type> | ||||
| CONSTEXPR14 FixedPoint<I, F> operator-(Number lhs, FixedPoint<I, F> rhs) { | ||||
| constexpr FixedPoint<I, F> operator-(Number lhs, FixedPoint<I, F> rhs) { | ||||
|     FixedPoint<I, F> tmp(lhs); | ||||
|     tmp -= rhs; | ||||
|     return tmp; | ||||
| } | ||||
| template <size_t I, size_t F, class Number, | ||||
|           class = typename std::enable_if<std::is_arithmetic<Number>::value>::type> | ||||
| CONSTEXPR14 FixedPoint<I, F> operator*(Number lhs, FixedPoint<I, F> rhs) { | ||||
| constexpr FixedPoint<I, F> operator*(Number lhs, FixedPoint<I, F> rhs) { | ||||
|     FixedPoint<I, F> tmp(lhs); | ||||
|     tmp *= rhs; | ||||
|     return tmp; | ||||
| } | ||||
| template <size_t I, size_t F, class Number, | ||||
|           class = typename std::enable_if<std::is_arithmetic<Number>::value>::type> | ||||
| CONSTEXPR14 FixedPoint<I, F> operator/(Number lhs, FixedPoint<I, F> rhs) { | ||||
| constexpr FixedPoint<I, F> operator/(Number lhs, FixedPoint<I, F> rhs) { | ||||
|     FixedPoint<I, F> tmp(lhs); | ||||
|     tmp /= rhs; | ||||
|     return tmp; | ||||
| @@ -624,13 +618,13 @@ CONSTEXPR14 FixedPoint<I, F> operator/(Number lhs, FixedPoint<I, F> rhs) { | ||||
| // shift operators | ||||
| template <size_t I, size_t F, class Integer, | ||||
|           class = typename std::enable_if<std::is_integral<Integer>::value>::type> | ||||
| CONSTEXPR14 FixedPoint<I, F> operator<<(FixedPoint<I, F> lhs, Integer rhs) { | ||||
| constexpr FixedPoint<I, F> operator<<(FixedPoint<I, F> lhs, Integer rhs) { | ||||
|     lhs <<= rhs; | ||||
|     return lhs; | ||||
| } | ||||
| template <size_t I, size_t F, class Integer, | ||||
|           class = typename std::enable_if<std::is_integral<Integer>::value>::type> | ||||
| CONSTEXPR14 FixedPoint<I, F> operator>>(FixedPoint<I, F> lhs, Integer rhs) { | ||||
| constexpr FixedPoint<I, F> operator>>(FixedPoint<I, F> lhs, Integer rhs) { | ||||
|     lhs >>= rhs; | ||||
|     return lhs; | ||||
| } | ||||
| @@ -699,5 +693,3 @@ constexpr bool operator!=(Number lhs, FixedPoint<I, F> rhs) { | ||||
| } | ||||
|  | ||||
| } // namespace Common | ||||
|  | ||||
| #undef CONSTEXPR14 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user