diff --git a/openVulkanoCpp/Math/Int24.hpp b/openVulkanoCpp/Math/Int24.hpp index 21397a6..a73c458 100644 --- a/openVulkanoCpp/Math/Int24.hpp +++ b/openVulkanoCpp/Math/Int24.hpp @@ -7,6 +7,7 @@ #pragma once #include +#include namespace OpenVulkano { @@ -57,94 +58,17 @@ namespace OpenVulkano return *this; } - int24 operator +(const int24& val) const - { - return int24( (int)*this + (int)val ); - } +#define INT24_OPERATORS(op) \ + template, bool> = true> \ + int24 operator op(const T& val) const { return int24( (int)*this op static_cast(val) ); } \ + template, bool> = true> \ + int24& operator op##=(const T& val ) { *this = *this op static_cast(val); return *this; } - int24 operator -(const int24& val) const - { - return int24( (int)*this - (int)val ); - } - - int24 operator *(const int24& val) const - { - return int24( (int)*this * (int)val ); - } - - int24 operator /(const int24& val) const - { - return int24( (int)*this / (int)val ); - } - - int24 operator +(const int val) const - { - return int24( (int)*this + val ); - } - - int24 operator -(const int val) const - { - return int24( (int)*this - val ); - } - - int24 operator *(const int val) const - { - return int24( (int)*this * val ); - } - - int24 operator /(const int val) const - { - return int24( (int)*this / val ); - } - - - int24& operator +=(const int24& val ) - { - *this = *this + val; - return *this; - } - - int24& operator -=(const int24& val ) - { - *this = *this - val; - return *this; - } - - int24& operator *=(const int24& val ) - { - *this = *this * val; - return *this; - } - - int24& operator /=(const int24& val ) - { - *this = *this / val; - return *this; - } - - int24& operator +=(const int val ) - { - *this = *this + val; - return *this; - } - - int24& operator -=(const int val ) - { - *this = *this - val; - return *this; - } - - int24& operator *=(const int val ) - { - *this = *this * val; - return *this; - } - - int24& operator /=(const int val ) - { - *this = *this / val; - return *this; - } + INT24_OPERATORS(+) + INT24_OPERATORS(-) + INT24_OPERATORS(*) + INT24_OPERATORS(/) +#undef INT24_OPERATORS int24 operator >>(const int val) const { @@ -183,64 +107,16 @@ namespace OpenVulkano return int24( -(int)*this ); } - bool operator ==(const int24& val) const + template, bool> = true> + [[nodiscard]] bool operator==(const T& val) const { - return (int)*this == (int)val; + return static_cast(*this) == static_cast(val); } - bool operator !=(const int24& val) const + template, bool> = true> + [[nodiscard]] constexpr auto operator<=>(const T& other) const { - return (int)*this != (int)val; - } - - bool operator >=(const int24& val) const - { - return (int)*this >= (int)val; - } - - bool operator <=(const int24& val) const - { - return (int)*this <= (int)val; - } - - bool operator >(const int24& val) const - { - return (int)*this > (int)val; - } - - bool operator <(const int24& val) const - { - return (int)*this < (int)val; - } - - bool operator ==(const int val) const - { - return (int)*this == val; - } - - bool operator !=(const int val) const - { - return (int)*this != val; - } - - bool operator >=(const int val) const - { - return (int)*this >= val; - } - - bool operator <=(const int val) const - { - return (int)*this <= val; - } - - bool operator >(const int val) const - { - return ((int)*this) > val; - } - - bool operator <(const int val) const - { - return (int)*this < val; + return operator int() <=> static_cast(other); } }; }