From 89179626bea2a344ce9b3fd45b46dcb2a7443f67 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Fri, 21 Jun 2013 15:23:07 +1000 Subject: [PATCH] Improved Vector2 with floats & non-member operators --- libs/Codebase/vector2.hpp | 31 ++++++++++++++++++++----------- test/main.cpp | 9 +++++++-- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/libs/Codebase/vector2.hpp b/libs/Codebase/vector2.hpp index 36c6186..e582a26 100644 --- a/libs/Codebase/vector2.hpp +++ b/libs/Codebase/vector2.hpp @@ -27,21 +27,21 @@ class Vector2 { public: - double x = 0, y = 0; + float x = 0, y = 0; Vector2() = default; - Vector2(double i, double j) { + Vector2(float i, float j) { x = i; y = j; } - double Length() const { + float Length() const { return sqrt(x*x+y*y); } - double SquaredLength() const { + float SquaredLength() const { return x*x+y*y; } - double operator[](size_t i) { + float operator[](size_t i) { if (i >= 2) - throw(std::runtime_error("Out of range")); + throw(std::domain_error("Out of range")); return *(&x+i); } @@ -49,23 +49,23 @@ public: Vector2 operator+(Vector2 v) const { return Vector2(x + v.x, y + v.y); } Vector2 operator-(Vector2 v) const { return Vector2(x - v.x, y - v.y); } Vector2 operator*(Vector2 v) const { return Vector2(x * v.x, y * v.y); } - Vector2 operator*(double d) const { return Vector2(x * d, y * d); } + Vector2 operator*(float d) const { return Vector2(x * d, y * d); } Vector2 operator/(Vector2 v) { if (!v.x || !v.y) - throw(std::runtime_error("Divide by zero")); + throw(std::domain_error("Divide by zero")); return Vector2(x / v.x, y / v.y); } - Vector2 operator/(double d) { + Vector2 operator/(float d) { if (!d) - throw(std::runtime_error("Divide by zero")); + throw(std::domain_error("Divide by zero")); return Vector2(x / d, y / d); } bool operator==(Vector2 v) { return (x == v.x && y == v.y); } bool operator!=(Vector2 v) { return (x != v.x || y != v.y); } - //templates + //member templates template Vector2 operator+=(T t) { return *this = *this + t; } template Vector2 operator-=(T t) { return *this = *this - t; } template Vector2 operator*=(T t) { return *this = *this * t; } @@ -74,4 +74,13 @@ public: template bool operator!=(T t) { return (x != t || y != t); } }; +//non-member templates +template Vector2 operator+(T t, Vector2 v) { return v + t; } +template Vector2 operator-(T t, Vector2 v) { return v - t; } +template Vector2 operator*(T t, Vector2 v) { return v * t; } +template Vector2 operator/(T t, Vector2 v) { return v / t; } + +template bool operator==(T t, Vector2 v) { return v == t; } +template bool operator!=(T t, Vector2 v) { return v != t; } + #endif diff --git a/test/main.cpp b/test/main.cpp index b858b9d..f98a689 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -1,7 +1,12 @@ -#include "defines.hpp" +#include "vector2.hpp" +#include + +using namespace std; int main(int, char**) { - std::string s = itos(5); + Vector2 v = {1, 1}; + Vector2 a = 99 * v; + cout << a.x << ", " << a.y << endl; return 0; } \ No newline at end of file