SDL Utility
Vector2.hpp
Go to the documentation of this file.
1 
7 #pragma once
8 #include <type_traits>
9 
10 #include "Util.hpp"
11 
18 template<
19  typename T,
20  typename = typename std::enable_if<std::is_arithmetic<T>::value, T>::type
21 > struct Vector2
22 {
23  T x;
24  T y;
25 
26  //################## CONSTRUCTORS ##################//
27 
29  Vector2() :
30  x(0), y(0)
31  {
32  // Empty
33  }
34 
36  Vector2(T x, T y) :
37  x(x), y(y)
38  {
39  // Empty
40  }
41 
43  Vector2(const Vector2<T>& other) :
44  x(other.x), y(other.y)
45  {
46  // Empty
47  }
48 
49 
50  //################## OPERATORS ##################//
51 
52  friend Vector2<T> operator-(const Vector2<T>& right)
53  {
54  return Vector2<T>(-right.x, -right.y);
55  }
56 
57  friend Vector2<T> operator+(const Vector2<T>& left, const Vector2<T>& right)
58  {
59  return Vector2<T>(left.x + right.x, left.y + right.y);
60  }
61 
62  friend Vector2<T> operator-(const Vector2<T>& left, const Vector2<T>& right)
63  {
64  return left + (-right);
65  }
66 
67  friend Vector2<T> operator*(const Vector2<T>& left, const Vector2<T>& right)
68  {
69  return Vector2<T>(left.x * right.x, left.y * right.y);
70  }
71 
72  friend Vector2<T> operator/(const Vector2<T>& left, const Vector2<T>& right)
73  {
74  return Vector2<T>(left.x / right.x, left.y / right.y);
75  }
76 
77  friend Vector2<T> operator*(T left, const Vector2<T>& right)
78  {
79  return Vector2<T>(left * right.x, left * right.y);
80  }
81 
82  friend Vector2<T> operator*(const Vector2<T>& left, T right)
83  {
84  return right * left;
85  }
86 
87  friend Vector2<T> operator/(const Vector2<T>& left, T right)
88  {
89  return Vector2<T>(left.x / right, left.y / right);
90  }
91 
92  friend Vector2<T>& operator+=(Vector2<T>& left, const Vector2<T>& right)
93  {
94  left.x += right.x;
95  left.y += right.y;
96  return left;
97  }
98 
99  friend Vector2<T>& operator-=(Vector2<T>& left, const Vector2<T>& right)
100  {
101  left += (-right);
102  return left;
103  }
104 
105  friend Vector2<T>& operator*=(Vector2<T>& left, const Vector2<T>& right)
106  {
107  left.x *= right.x;
108  left.y *= right.y;
109  return left;
110  }
111 
112  friend Vector2<T>& operator/(Vector2<T>& left, const Vector2<T>& right)
113  {
114  left.x /= right.x;
115  left.y /= right.y;
116  return left;
117  }
118 
119  friend Vector2<T>& operator*=(Vector2<T>& left, T right)
120  {
121  left.x *= right;
122  left.y *= right;
123  return left;
124  }
125 
126  friend Vector2<T>& operator/=(Vector2<T>& left, T right)
127  {
128  left.x /= right;
129  left.y /= right;
130  return left;
131  }
132 
133  friend bool operator==(const Vector2<T>& left, const Vector2<T>& right)
134  {
135  return ((left.x == right.x) && (left.y == right.y));
136  }
137 
138  friend bool operator!=(const Vector2<T>& left, const Vector2<T>& right)
139  {
140  return !(left == right);
141  }
142 };
143 
144 
145 
146 
147 //################## TYPEDEFS ##################//
148 
153 
154 SDLU_END
Basic utility macros, typedefs...
#define SDLU_BEGIN
Definition: Util.hpp:32
Vector2< unsigned int > Vector2u
Definition: Vector2.hpp:149
Vector2< double > Vec2d
Definition: Vector2.hpp:152
Vector2< int > Vec2i
Definition: Vector2.hpp:150
Vector2< float > Vec2f
Definition: Vector2.hpp:151
Vector2< unsigned int > Vec2u
Definition: Vector2.hpp:149
Vector2< float > Vector2f
Definition: Vector2.hpp:151
Vector2< double > Vector2d
Definition: Vector2.hpp:152
Vector2< int > Vector2i
Definition: Vector2.hpp:150
A struct to handle basic 2D vector operations.
Definition: Vector2.hpp:22
friend bool operator!=(const Vector2< T > &left, const Vector2< T > &right)
Definition: Vector2.hpp:138
Vector2(const Vector2< T > &other)
Copies the components of a vector.
Definition: Vector2.hpp:43
Vector2(T x, T y)
Initializes a vector with default values.
Definition: Vector2.hpp:36
friend Vector2< T > operator-(const Vector2< T > &right)
Definition: Vector2.hpp:52
friend Vector2< T > & operator/(Vector2< T > &left, const Vector2< T > &right)
Definition: Vector2.hpp:112
friend Vector2< T > operator*(T left, const Vector2< T > &right)
Definition: Vector2.hpp:77
T y
y component
Definition: Vector2.hpp:24
friend Vector2< T > operator/(const Vector2< T > &left, const Vector2< T > &right)
Definition: Vector2.hpp:72
friend Vector2< T > & operator+=(Vector2< T > &left, const Vector2< T > &right)
Definition: Vector2.hpp:92
friend Vector2< T > operator/(const Vector2< T > &left, T right)
Definition: Vector2.hpp:87
Vector2()
Initializes a zero vector.
Definition: Vector2.hpp:29
friend Vector2< T > operator-(const Vector2< T > &left, const Vector2< T > &right)
Definition: Vector2.hpp:62
friend Vector2< T > & operator*=(Vector2< T > &left, T right)
Definition: Vector2.hpp:119
friend Vector2< T > operator+(const Vector2< T > &left, const Vector2< T > &right)
Definition: Vector2.hpp:57
T x
x component
Definition: Vector2.hpp:23
friend bool operator==(const Vector2< T > &left, const Vector2< T > &right)
Definition: Vector2.hpp:133
friend Vector2< T > & operator-=(Vector2< T > &left, const Vector2< T > &right)
Definition: Vector2.hpp:99
friend Vector2< T > & operator*=(Vector2< T > &left, const Vector2< T > &right)
Definition: Vector2.hpp:105
friend Vector2< T > operator*(const Vector2< T > &left, const Vector2< T > &right)
Definition: Vector2.hpp:67
friend Vector2< T > & operator/=(Vector2< T > &left, T right)
Definition: Vector2.hpp:126
friend Vector2< T > operator*(const Vector2< T > &left, T right)
Definition: Vector2.hpp:82