1515#endif
1616
1717#include < cassert>
18+ #include < cmath>
1819#include < cstddef>
1920#include < cstring>
2021#include < functional>
@@ -146,16 +147,16 @@ namespace DirectX
146147 operator XMVECTOR () const noexcept { return XMLoadFloat2 (this ); }
147148
148149 // Comparison operators
149- bool operator == (const Vector2& V) const noexcept ;
150- bool operator != (const Vector2& V) const noexcept ;
150+ bool operator == (const Vector2& V) const noexcept { return ((x == V. x ) && (y == V. y )); }
151+ bool operator != (const Vector2& V) const noexcept { return ((x != V. x ) || (y != V. y )); }
151152
152153 // Assignment operators
153154 Vector2& operator = (const XMVECTORF32& F) noexcept { x = F.f [0 ]; y = F.f [1 ]; return *this ; }
154- Vector2& operator += (const Vector2& V) noexcept ;
155- Vector2& operator -= (const Vector2& V) noexcept ;
156- Vector2& operator *= (const Vector2& V) noexcept ;
157- Vector2& operator *= (float S) noexcept ;
158- Vector2& operator /= (float S) noexcept ;
155+ Vector2& operator += (const Vector2& V) noexcept { x += V. x ; y += V. y ; return * this ; }
156+ Vector2& operator -= (const Vector2& V) noexcept { x -= V. x ; y -= V. y ; return * this ; }
157+ Vector2& operator *= (const Vector2& V) noexcept { x *= V. x ; y *= V. y ; return * this ; }
158+ Vector2& operator *= (float S) noexcept { x *= S; y *= S; return * this ; }
159+ Vector2& operator /= (float S) noexcept { x /= S; y /= S; return * this ; }
159160
160161 // Unary operators
161162 Vector2 operator + () const noexcept { return *this ; }
@@ -164,12 +165,12 @@ namespace DirectX
164165 // Vector operations
165166 bool InBounds (const Vector2& Bounds) const noexcept ;
166167
167- float Length () const noexcept ;
168- float LengthSquared () const noexcept ;
168+ float Length () const noexcept { return std::sqrt ((x * x) + (y * y)); }
169+ float LengthSquared () const noexcept { return (x * x) + (y * y); }
169170
170- float Dot (const Vector2& V) const noexcept ;
171- void Cross (const Vector2& V, Vector2& result) const noexcept ;
172- Vector2 Cross (const Vector2& V) const noexcept ;
171+ float Dot (const Vector2& V) const noexcept { return (x * V. x ) + (y * V. y ); }
172+ void Cross (const Vector2& V, Vector2& result) const noexcept { result. x = result. y = (x * V. y ) - (y * V. x ); }
173+ Vector2 Cross (const Vector2& V) const noexcept { float c = (x * V. y ) - (y * V. x ); return Vector2 (c, c); }
173174
174175 void Normalize () noexcept ;
175176 void Normalize (Vector2& result) const noexcept ;
@@ -230,13 +231,13 @@ namespace DirectX
230231 };
231232
232233 // Binary operators
233- DIRECTX_TOOLKIT_API Vector2 operator + (const Vector2& V1, const Vector2& V2) noexcept ;
234- DIRECTX_TOOLKIT_API Vector2 operator - (const Vector2& V1, const Vector2& V2) noexcept ;
235- DIRECTX_TOOLKIT_API Vector2 operator * (const Vector2& V1, const Vector2& V2) noexcept ;
236- DIRECTX_TOOLKIT_API Vector2 operator * (const Vector2& V, float S) noexcept ;
237- DIRECTX_TOOLKIT_API Vector2 operator / (const Vector2& V1, const Vector2& V2) noexcept ;
238- DIRECTX_TOOLKIT_API Vector2 operator / (const Vector2& V, float S) noexcept ;
239- DIRECTX_TOOLKIT_API Vector2 operator * (float S, const Vector2& V) noexcept ;
234+ DIRECTX_TOOLKIT_API inline Vector2 operator + (const Vector2& V1, const Vector2& V2) noexcept { return Vector2 (V1. x + V2. x , V1. y + V2. y ); }
235+ DIRECTX_TOOLKIT_API inline Vector2 operator - (const Vector2& V1, const Vector2& V2) noexcept { return Vector2 (V1. x - V2. x , V1. y - V2. y ); }
236+ DIRECTX_TOOLKIT_API inline Vector2 operator * (const Vector2& V1, const Vector2& V2) noexcept { return Vector2 (V1. x * V2. x , V1. y * V2. y ); }
237+ DIRECTX_TOOLKIT_API inline Vector2 operator * (const Vector2& V, float S) noexcept { return Vector2 (V. x * S, V. y * S); }
238+ DIRECTX_TOOLKIT_API inline Vector2 operator / (const Vector2& V1, const Vector2& V2) noexcept { return Vector2 (V1. x / V2. x , V1. y / V2. y ); }
239+ DIRECTX_TOOLKIT_API inline Vector2 operator / (const Vector2& V, float S) noexcept { return Vector2 (V. x / S, V. y / S); }
240+ DIRECTX_TOOLKIT_API inline Vector2 operator * (float S, const Vector2& V) noexcept { return Vector2 (S / V. x , S / V. y ); } ;
240241
241242 // ------------------------------------------------------------------------------
242243 // 3D vector
@@ -259,30 +260,30 @@ namespace DirectX
259260 operator XMVECTOR () const noexcept { return XMLoadFloat3 (this ); }
260261
261262 // Comparison operators
262- bool operator == (const Vector3& V) const noexcept ;
263- bool operator != (const Vector3& V) const noexcept ;
263+ bool operator == (const Vector3& V) const noexcept { return ((x == V. x ) && (y == V. y ) && (z == V. z )); }
264+ bool operator != (const Vector3& V) const noexcept { return ((x != V. x ) || (y != V. y ) || (z != V. z )); }
264265
265266 // Assignment operators
266267 Vector3& operator = (const XMVECTORF32& F) noexcept { x = F.f [0 ]; y = F.f [1 ]; z = F.f [2 ]; return *this ; }
267- Vector3& operator += (const Vector3& V) noexcept ;
268- Vector3& operator -= (const Vector3& V) noexcept ;
269- Vector3& operator *= (const Vector3& V) noexcept ;
270- Vector3& operator *= (float S) noexcept ;
271- Vector3& operator /= (float S) noexcept ;
268+ Vector3& operator += (const Vector3& V) noexcept { x += V. x ; y += V. y ; z += V. z ; return * this ; }
269+ Vector3& operator -= (const Vector3& V) noexcept { x -= V. x ; y -= V. y ; z -= V. z ; return * this ; }
270+ Vector3& operator *= (const Vector3& V) noexcept { x *= V. x ; y *= V. y ; z *= V. z ; return * this ; }
271+ Vector3& operator *= (float S) noexcept { x *= S; y *= S; z *= S; return * this ; }
272+ Vector3& operator /= (float S) noexcept { x /= S; y /= S; z /= S; return * this ; }
272273
273274 // Unary operators
274275 Vector3 operator + () const noexcept { return *this ; }
275- Vector3 operator - () const noexcept ;
276+ Vector3 operator - () const noexcept { return Vector3 (-x, -y, -z); }
276277
277278 // Vector operations
278279 bool InBounds (const Vector3& Bounds) const noexcept ;
279280
280- float Length () const noexcept ;
281- float LengthSquared () const noexcept ;
281+ float Length () const noexcept { return std::sqrt ((x * x) + (y * y) + (z * z)); }
282+ float LengthSquared () const noexcept { return (x * x) + (y * y) + (z * z); }
282283
283- float Dot (const Vector3& V) const noexcept ;
284- void Cross (const Vector3& V, Vector3& result) const noexcept ;
285- Vector3 Cross (const Vector3& V) const noexcept ;
284+ float Dot (const Vector3& V) const noexcept { return (x * V. x ) + (y * V. y ) + (z * V. z ); }
285+ void Cross (const Vector3& V, Vector3& result) const noexcept { result. x = y * V. z - z * V. y ; result. y = z * V. x - x * V. z ; result. z = x * V. y - y * V. x ; }
286+ Vector3 Cross (const Vector3& V) const noexcept { return Vector3 (y * V. z - z * V. y , z * V. x - x * V. z , x * V. y - y * V. x ); }
286287
287288 void Normalize () noexcept ;
288289 void Normalize (Vector3& result) const noexcept ;
@@ -350,13 +351,13 @@ namespace DirectX
350351 };
351352
352353 // Binary operators
353- DIRECTX_TOOLKIT_API Vector3 operator + (const Vector3& V1, const Vector3& V2) noexcept ;
354- DIRECTX_TOOLKIT_API Vector3 operator - (const Vector3& V1, const Vector3& V2) noexcept ;
355- DIRECTX_TOOLKIT_API Vector3 operator * (const Vector3& V1, const Vector3& V2) noexcept ;
356- DIRECTX_TOOLKIT_API Vector3 operator * (const Vector3& V, float S) noexcept ;
357- DIRECTX_TOOLKIT_API Vector3 operator / (const Vector3& V1, const Vector3& V2) noexcept ;
358- DIRECTX_TOOLKIT_API Vector3 operator / (const Vector3& V, float S) noexcept ;
359- DIRECTX_TOOLKIT_API Vector3 operator * (float S, const Vector3& V) noexcept ;
354+ DIRECTX_TOOLKIT_API inline Vector3 operator + (const Vector3& V1, const Vector3& V2) noexcept { return Vector3 (V1. x + V2. x , V1. y + V2. y , V1. z + V2. z ); }
355+ DIRECTX_TOOLKIT_API inline Vector3 operator - (const Vector3& V1, const Vector3& V2) noexcept { return Vector3 (V1. x - V2. x , V1. y - V2. y , V1. z - V2. z ); }
356+ DIRECTX_TOOLKIT_API inline Vector3 operator * (const Vector3& V1, const Vector3& V2) noexcept { return Vector3 (V1. x * V2. x , V1. y * V2. y , V1. z * V2. z ); }
357+ DIRECTX_TOOLKIT_API inline Vector3 operator * (const Vector3& V, float S) noexcept { return Vector3 (V. x * S, V. y * S, V. z * S); }
358+ DIRECTX_TOOLKIT_API inline Vector3 operator / (const Vector3& V1, const Vector3& V2) noexcept { return Vector3 (V1. x / V2. x , V1. y / V2. y , V1. z / V2. z ); }
359+ DIRECTX_TOOLKIT_API inline Vector3 operator / (const Vector3& V, float S) noexcept { return Vector3 (V. x / S, V. y / S, V. z / S); }
360+ DIRECTX_TOOLKIT_API inline Vector3 operator * (float S, const Vector3& V) noexcept { return Vector3 (S / V. x , S / V. y , S / V. z ); }
360361
361362 // ------------------------------------------------------------------------------
362363 // 4D vector
@@ -392,7 +393,7 @@ namespace DirectX
392393
393394 // Unary operators
394395 Vector4 operator + () const noexcept { return *this ; }
395- Vector4 operator - () const noexcept ;
396+ Vector4 operator - () const noexcept { return Vector4 (-x, -y, -z, -w); }
396397
397398 // Vector operations
398399 bool InBounds (const Vector4& Bounds) const noexcept ;
@@ -730,7 +731,7 @@ namespace DirectX
730731
731732 // Unary operators
732733 Quaternion operator + () const noexcept { return *this ; }
733- Quaternion operator - () const noexcept ;
734+ Quaternion operator - () const noexcept { return Quaternion (-x, -y, -z, -w); }
734735
735736 // Quaternion operations
736737 float Length () const noexcept ;
@@ -837,7 +838,7 @@ namespace DirectX
837838
838839 // Unary operators
839840 Color operator + () const noexcept { return *this ; }
840- Color operator - () const noexcept ;
841+ Color operator - () const noexcept { return Color (-x, -y, -z, -w); }
841842
842843 // Properties
843844 float R () const noexcept { return x; }
0 commit comments