diff --git a/ostd/vecmath.hh b/ostd/vecmath.hh index e6b1f1c..a7db303 100644 --- a/ostd/vecmath.hh +++ b/ostd/vecmath.hh @@ -16,8 +16,26 @@ struct Vec2 { struct { T x, y; }; T value[2]; }; + + Vec2(): x(0), y(0) {} + Vec2(const Vec2 &v): x(v.x), y(v.y) {} + Vec2(T v): x(v), y(v) {} + Vec2(T x, T y): x(x), y(y) {} + + T &operator[](Size idx) { return value[idx]; } + T operator[](Size idx) const { return value[idx]; } }; +template +inline bool operator==(const Vec2 &a, const Vec2 &b) { + return (a.x == b.x) && (a.y == b.y); +} + +template +inline bool operator!=(const Vec2 &a, const Vec2 &b) { + return (a.x != b.x) || (a.y != b.y); +} + using Vec2f = Vec2; using Vec2d = Vec2; using Vec2b = Vec2; @@ -31,8 +49,23 @@ struct Vec3 { struct { T r, g, b; }; T value[3]; }; + + Vec3(): x(0), y(0), z(0) {} + Vec3(const Vec3 &v): x(v.x), y(v.y), z(v.z) {} + Vec3(T v): x(v), y(v), z(v) {} + Vec3(T x, T y, T z): x(x), y(y), z(z) {} }; +template +inline bool operator==(const Vec3 &a, const Vec3 &b) { + return (a.x == b.x) && (a.y == b.y) && (a.z == b.z); +} + +template +inline bool operator!=(const Vec3 &a, const Vec3 &b) { + return (a.x != b.x) || (a.y != b.y) || (a.z != b.z); +} + using Vec3f = Vec3; using Vec3d = Vec3; using Vec3b = Vec3; @@ -46,8 +79,23 @@ struct Vec4 { struct { T r, g, b, a; }; T value[4]; }; + + Vec4(): x(0), y(0), z(0), w(0) {} + Vec4(const Vec3 &v): x(v.x), y(v.y), z(v.z), w(v.w) {} + Vec4(T v): x(v), y(v), z(v), w(v) {} + Vec4(T x, T y, T z, T w): x(x), y(y), z(z), w(w) {} }; +template +inline bool operator==(const Vec4 &a, const Vec4 &b) { + return (a.x == b.x) && (a.y == b.y) && (a.z == b.z) && (a.w == b.w); +} + +template +inline bool operator!=(const Vec4 &a, const Vec4 &b) { + return (a.x != b.x) || (a.y != b.y) || (a.z != b.z) || (a.w != b.w); +} + using Vec4f = Vec4; using Vec4d = Vec4; using Vec4b = Vec4;