diff options
Diffstat (limited to 'src/Math/Vector.hpp')
| -rw-r--r-- | src/Math/Vector.hpp | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/src/Math/Vector.hpp b/src/Math/Vector.hpp index f6bdd7a..3d5a5be 100644 --- a/src/Math/Vector.hpp +++ b/src/Math/Vector.hpp @@ -1,15 +1,15 @@ #pragma once -#include <cstddef> +#include "../Common/Sizes.hpp" #include <sstream> #include <cmath> -template <size_t S, typename T = float> +template <uint S, typename T = Real> struct Vector { Vector(): elements{} {} - template<typename ...Args, std::enable_if_t<sizeof...(Args) == S, int> = 0> - Vector(Args... args) : elements{ args... } {} + template<typename ...Args, std::enable_if_t<sizeof...(Args) == S, Int> = 0> + Vector(Args... args) : elements{ static_cast<T>(args)... } {} explicit Vector(const T values[S]) { std::copy(values, values + S, elements); @@ -24,7 +24,7 @@ struct Vector { elements[S - 1] = scalar; } - template<size_t N, std::enable_if_t<(N > S), int> = 0> + template<uint N, std::enable_if_t<(N > S), Int> = 0> explicit Vector(const Vector<N, T> vector) { std::copy(vector.elements, vector.elements + S, elements); } @@ -32,7 +32,7 @@ struct Vector { template<typename F> Vector map(F f) const { Vector result{}; - for (int i = 0; i < S; i++) { + for (Int i = 0; i < S; i++) { result[i] = f(elements[i]); } return result; @@ -41,7 +41,7 @@ struct Vector { template<typename F> Vector map_indexed(F f) const { Vector result{}; - for (int i = 0; i < S; i++) { + for (Int i = 0; i < S; i++) { result[i] = f(i, elements[i]); } return result; @@ -50,7 +50,7 @@ struct Vector { template<typename F> T reduce(F f) const { T result = elements[0]; - for (int i = 1; i < S; i++) { + for (Int i = 1; i < S; i++) { result = f(result, elements[i]); } return result; @@ -92,11 +92,11 @@ struct Vector { }; } - T operator[](size_t index) const { + T operator[](USize index) const { return elements[index]; } - T& operator[](size_t index) { + T& operator[](USize index) { return elements[index]; } @@ -128,8 +128,8 @@ struct Vector { return map([=](auto x) { return x / scalar; }); } - bool operator==(const Vector& other) { - for (int i = 0; i < S; i++) { + Bool operator==(const Vector& other) { + for (Int i = 0; i < S; i++) { if (elements[i] != other[i]) { return false; } @@ -137,7 +137,7 @@ struct Vector { return true; } - bool operator!=(const Vector& other) { + Bool operator!=(const Vector& other) { return !this->operator==(other); } @@ -162,7 +162,7 @@ struct Vector { std::stringstream str{}; str << "[ "; - for (int i = 0; i < S; i++) { + for (Int i = 0; i < S; i++) { str << elements[i] << " "; } str << "]"; |
