From c6c1f897b3750826f8ded1ea088195703676c4e1 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Wed, 21 Mar 2018 21:18:38 +0100 Subject: Reroll some loops and rely on the compiler to unroll them --- src/vector.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/vector.h (limited to 'src/vector.h') diff --git a/src/vector.h b/src/vector.h new file mode 100644 index 0000000..55c7663 --- /dev/null +++ b/src/vector.h @@ -0,0 +1,45 @@ +#include + +inline double sq(double x) noexcept { + return x * x; +} + +struct Vector { + double data[2]; + + double comp(int x, int y) const { + return x*data[0] + y*data[1]; + } + + double norm() const { + return std::sqrt(sq(data[0]) + sq(data[1])); + } + + double& operator[](std::size_t i) { + return data[i]; + } + + double operator[](std::size_t i) const { + return data[i]; + } + + Vector operator*(double scalar) const { + return Vector{ + data[0] * scalar, + data[1] * scalar + }; + } + + Vector& operator+=(const Vector& rhs) { + data[0] += rhs[0]; + data[1] += rhs[1]; + return *this; + } +}; + +Vector operator*(double scalar, const Vector& vec) { + return Vector{ + vec[0] * scalar, + vec[1] * scalar + }; +} -- cgit v1.2.3