diff --git a/yoga/YGFloatOptional.h b/yoga/YGFloatOptional.h index 80a851a0..7ca1fc12 100644 --- a/yoga/YGFloatOptional.h +++ b/yoga/YGFloatOptional.h @@ -22,25 +22,48 @@ public: constexpr float unwrap() const { return value_; } bool isUndefined() const { return std::isnan(value_); } - - YGFloatOptional operator+(YGFloatOptional op) const { - return YGFloatOptional{value_ + op.value_}; - } - bool operator>(YGFloatOptional op) const { return value_ > op.value_; } - bool operator<(YGFloatOptional op) const { return value_ < op.value_; } - bool operator>=(YGFloatOptional op) const { - return *this > op || *this == op; - } - bool operator<=(YGFloatOptional op) const { - return *this < op || *this == op; - } - bool operator==(YGFloatOptional op) const { - return value_ == op.value_ || (isUndefined() && op.isUndefined()); - } - bool operator!=(YGFloatOptional op) const { return !(*this == op); } - - bool operator==(float val) const { - return value_ == val || (isUndefined() && yoga::isUndefined(val)); - } - bool operator!=(float val) const { return !(*this == val); } }; + +// operators take YGFloatOptional by value, as it is a 32bit value + +inline bool operator==(YGFloatOptional lhs, YGFloatOptional rhs) { + return lhs.unwrap() == rhs.unwrap() || + (lhs.isUndefined() && rhs.isUndefined()); +} +inline bool operator!=(YGFloatOptional lhs, YGFloatOptional rhs) { + return !(lhs == rhs); +} + +inline bool operator==(YGFloatOptional lhs, float rhs) { + return lhs == YGFloatOptional{rhs}; +} +inline bool operator!=(YGFloatOptional lhs, float rhs) { + return !(lhs == rhs); +} + +inline bool operator==(float lhs, YGFloatOptional rhs) { + return rhs == lhs; +} +inline bool operator!=(float lhs, YGFloatOptional rhs) { + return !(lhs == rhs); +} + +inline YGFloatOptional operator+(YGFloatOptional lhs, YGFloatOptional rhs) { + return YGFloatOptional{lhs.unwrap() + rhs.unwrap()}; +} + +inline bool operator>(YGFloatOptional lhs, YGFloatOptional rhs) { + return lhs.unwrap() > rhs.unwrap(); +} + +inline bool operator<(YGFloatOptional lhs, YGFloatOptional rhs) { + return lhs.unwrap() < rhs.unwrap(); +} + +inline bool operator>=(YGFloatOptional lhs, YGFloatOptional rhs) { + return lhs > rhs || lhs == rhs; +} + +inline bool operator<=(YGFloatOptional lhs, YGFloatOptional rhs) { + return lhs < rhs || lhs == rhs; +}