add relational operators
This commit is contained in:
		
							parent
							
								
									201062cade
								
							
						
					
					
						commit
						b1bbf2ef84
					
				| @ -101,7 +101,7 @@ class FixedPointNumber | |||||||
|     // cast to floating point type T, return value
 |     // cast to floating point type T, return value
 | ||||||
|     template <typename T, |     template <typename T, | ||||||
|               typename std::enable_if<std::is_floating_point<T>::value>::type * = nullptr> |               typename std::enable_if<std::is_floating_point<T>::value>::type * = nullptr> | ||||||
|     explicit operator T() const noexcept |     explicit operator const T() const noexcept | ||||||
|     { |     { | ||||||
|         // casts to external type (signed or unsigned) and then to float
 |         // casts to external type (signed or unsigned) and then to float
 | ||||||
|         return static_cast<T>(static_cast<state_signage>(m_fixed_point_state)) / PRECISION; |         return static_cast<T>(static_cast<state_signage>(m_fixed_point_state)) / PRECISION; | ||||||
| @ -116,11 +116,22 @@ class FixedPointNumber | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // compare, ie. sort fixed-point numbers
 |     // compare, ie. sort fixed-point numbers
 | ||||||
|     void operator<(const FixedPointNumber &other) const noexcept |     bool operator<(const FixedPointNumber &other) const noexcept | ||||||
|     { |     { | ||||||
|         return m_fixed_point_state < other.m_fixed_point_state; |         return m_fixed_point_state < other.m_fixed_point_state; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     // equality, ie. sort fixed-point numbers
 | ||||||
|  |     bool operator==(const FixedPointNumber &other) const noexcept | ||||||
|  |     { | ||||||
|  |         return m_fixed_point_state == other.m_fixed_point_state; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     bool operator!=(const FixedPointNumber &other) const { return !(*this == other); } | ||||||
|  |     bool operator>(const FixedPointNumber &other) const { return other < *this; } | ||||||
|  |     bool operator<=(const FixedPointNumber &other) const { return !(other < *this); } | ||||||
|  |     bool operator>=(const FixedPointNumber &other) const { return !(*this < other); } | ||||||
|  | 
 | ||||||
|     // arithmetic operators
 |     // arithmetic operators
 | ||||||
|     FixedPointNumber operator+(const FixedPointNumber &other) const noexcept |     FixedPointNumber operator+(const FixedPointNumber &other) const noexcept | ||||||
|     { |     { | ||||||
| @ -170,7 +181,10 @@ class FixedPointNumber | |||||||
|         temp *= other.m_fixed_point_state; |         temp *= other.m_fixed_point_state; | ||||||
| 
 | 
 | ||||||
|         // rounding!
 |         // rounding!
 | ||||||
|  |         if (!truncate_results) | ||||||
|  |         { | ||||||
|             temp = temp + ((temp & 1 << (FractionalBitSize - 1)) << 1); |             temp = temp + ((temp & 1 << (FractionalBitSize - 1)) << 1); | ||||||
|  |         } | ||||||
|         temp >>= FractionalBitSize; |         temp >>= FractionalBitSize; | ||||||
|         this->m_fixed_point_state = static_cast<decltype(m_fixed_point_state)>(temp); |         this->m_fixed_point_state = static_cast<decltype(m_fixed_point_state)>(temp); | ||||||
|         return *this; |         return *this; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user