Cleanup: Use named function for math::Axis char constructor

It was too easy for implicit conversions to use this constructor
by mistake, when values are often 0,1,2 in enum properties.
This commit is contained in:
Hans Goudey
2024-02-23 12:32:35 -05:00
parent e842e9fd4c
commit 77f8a79a96
@@ -61,9 +61,11 @@ class Axis {
constexpr Axis(const Value axis) : axis_(axis){};
/** Convert an uppercase axis character 'X', 'Y' or 'Z' to an enum value. */
constexpr explicit Axis(char axis_char) : axis_(static_cast<Value>(axis_char - 'X'))
constexpr static Axis from_char(char axis_char)
{
BLI_assert(Value::X <= axis_ && axis_ <= Value::Z);
const Axis axis = static_cast<Value>(axis_char - 'X');
BLI_assert(int(Value::X) <= axis.as_int() && axis.as_int() <= int(Value::Z));
return axis;
}
/** Allow casting from DNA enums stored as short / int. */
@@ -180,12 +182,12 @@ class AxisSigned {
friend std::ostream &operator<<(std::ostream &stream, const AxisSigned axis);
};
constexpr static bool operator<=(const Axis::Value a, const Axis::Value b)
constexpr bool operator<=(const Axis::Value a, const Axis::Value b)
{
return int(a) <= int(b);
}
constexpr static bool operator<=(const AxisSigned::Value a, const AxisSigned::Value b)
constexpr bool operator<=(const AxisSigned::Value a, const AxisSigned::Value b)
{
return int(a) <= int(b);
}