| @@ -16,32 +16,54 @@ | |||||
| #if !defined __DH_MATRIX_H__ | #if !defined __DH_MATRIX_H__ | ||||
| #define __DH_MATRIX_H__ | #define __DH_MATRIX_H__ | ||||
| template <typename T> struct Vector2 | |||||
| #define OPERATORS(elems) \ | |||||
| inline Vec##elems<T> operator+(Vec##elems<T> const &op) const \ | |||||
| { \ | |||||
| Vec##elems<T> ret; \ | |||||
| for (int n = 0; n < elems; n++) \ | |||||
| ret[n] = (*this)[n] + op[n]; \ | |||||
| return ret; \ | |||||
| } \ | |||||
| \ | |||||
| inline Vec##elems<T> operator-(Vec##elems<T> const &op) const \ | |||||
| { \ | |||||
| Vec##elems<T> ret; \ | |||||
| for (int n = 0; n < elems; n++) \ | |||||
| ret[n] = (*this)[n] - op[n]; \ | |||||
| return ret; \ | |||||
| } | |||||
| template <typename T> struct Vec2 | |||||
| { | { | ||||
| Vector2() { x = y = 0; } | |||||
| Vector2(T _x, T _y) { x = _x; y = _y; } | |||||
| Vec2() { x = y = 0; } | |||||
| Vec2(T _x, T _y) { x = _x; y = _y; } | |||||
| T& operator[](int n) { return *(&x + n); } | T& operator[](int n) { return *(&x + n); } | ||||
| T const& operator[](int n) const { return *(&x + n); } | |||||
| OPERATORS(2) | |||||
| union { T x; T a; T i; }; | union { T x; T a; T i; }; | ||||
| union { T y; T b; T j; }; | union { T y; T b; T j; }; | ||||
| }; | }; | ||||
| typedef Vector2<float> Float2; | |||||
| typedef Vector2<int> Int2; | |||||
| typedef Vec2<float> Float2; | |||||
| typedef Vec2<int> Int2; | |||||
| template <typename T> struct Vector3 | |||||
| template <typename T> struct Vec3 | |||||
| { | { | ||||
| Vector3() { x = y = z = 0; } | |||||
| Vector3(T _x, T _y, T _z) { x = _x; y = _y; z = _z; } | |||||
| Vec3() { x = y = z = 0; } | |||||
| Vec3(T _x, T _y, T _z) { x = _x; y = _y; z = _z; } | |||||
| T& operator[](int n) { return *(&x + n); } | T& operator[](int n) { return *(&x + n); } | ||||
| OPERATORS(3) | |||||
| union { T x; T a; T i; }; | union { T x; T a; T i; }; | ||||
| union { T y; T b; T j; }; | union { T y; T b; T j; }; | ||||
| union { T z; T c; T k; }; | union { T z; T c; T k; }; | ||||
| }; | }; | ||||
| typedef Vector3<float> Float3; | |||||
| typedef Vector3<int> Int3; | |||||
| typedef Vec3<float> Float3; | |||||
| typedef Vec3<int> Int3; | |||||
| #endif // __DH_MATRIX_H__ | #endif // __DH_MATRIX_H__ | ||||