From: Mikko Rasa Date: Sat, 15 Oct 2022 10:38:19 +0000 (+0300) Subject: Don't use references to angles X-Git-Url: https://git.tdb.fi/?a=commitdiff_plain;h=7bf588b92f7ee6c6253e155755d9373ac0f6748a;p=libs%2Fmath.git Don't use references to angles It holds a single scalar and is trivial to copy, so can be passed in a register. --- diff --git a/source/geometry/affinetransform.h b/source/geometry/affinetransform.h index 1cd4011..1d48a5d 100644 --- a/source/geometry/affinetransform.h +++ b/source/geometry/affinetransform.h @@ -30,7 +30,7 @@ protected: AffineTransformOps() { } public: - static AffineTransform rotation(const Angle &); + static AffineTransform rotation(Angle); }; template @@ -40,7 +40,7 @@ protected: AffineTransformOps() { } public: - static AffineTransform rotation(const Angle &, const LinAl::Vector &); + static AffineTransform rotation(Angle, const LinAl::Vector &); }; @@ -112,7 +112,7 @@ AffineTransform AffineTransform::shear(const LinAl::Vector &no } template -AffineTransform AffineTransformOps::rotation(const Angle &angle) +AffineTransform AffineTransformOps::rotation(Angle angle) { AffineTransform r; T c = cos(angle); @@ -125,7 +125,7 @@ AffineTransform AffineTransformOps::rotation(const Angle &angle) } template -AffineTransform AffineTransformOps::rotation(const Angle &angle, const LinAl::Vector &axis) +AffineTransform AffineTransformOps::rotation(Angle angle, const LinAl::Vector &axis) { AffineTransform r; LinAl::Vector axn = normalize(axis); diff --git a/source/geometry/angle.h b/source/geometry/angle.h index fe4895c..bcd7cca 100644 --- a/source/geometry/angle.h +++ b/source/geometry/angle.h @@ -20,7 +20,7 @@ private: public: Angle(): value(0) { } template - Angle(const Angle &other): value(other.radians()) { } + Angle(Angle other): value(other.radians()) { } static Angle from_degrees(T); static Angle from_radians(T); @@ -37,19 +37,19 @@ public: T radians() const { return value; } T turns() const { return value/6.28318530717958647692; } - Angle &operator+=(const Angle &); - Angle &operator-=(const Angle &); + Angle &operator+=(Angle); + Angle &operator-=(Angle); Angle &operator*=(T); Angle &operator/=(T); - bool operator==(const Angle &other) const { return value==other.value; } - bool operator!=(const Angle &other) const { return value!=other.value; } - bool operator<(const Angle &other) const { return value(const Angle &other) const { return value>other.value; } - bool operator>=(const Angle &other) const { return value>=other.value; } + bool operator==(Angle other) const { return value==other.value; } + bool operator!=(Angle other) const { return value!=other.value; } + bool operator<(Angle other) const { return value(Angle other) const { return value>other.value; } + bool operator>=(Angle other) const { return value>=other.value; } - Angle &wrap_with_base(const Angle &); + Angle &wrap_with_base(Angle); Angle &wrap_positive(); Angle &wrap_balanced(); }; @@ -73,35 +73,35 @@ inline Angle Angle::from_turns(T t) } template -inline Angle &Angle::operator+=(const Angle &a) +inline Angle &Angle::operator+=(Angle a) { value += a.value; return *this; } template -inline Angle operator+(const Angle &a1, const Angle &a2) +inline Angle operator+(Angle a1, Angle a2) { Angle r(a1); return r += a2; } template -inline Angle &Angle::operator-=(const Angle &a) +inline Angle &Angle::operator-=(Angle a) { value -= a.value; return *this; } template -inline Angle operator-(const Angle &a1, const Angle &a2) +inline Angle operator-(Angle a1, Angle a2) { Angle r(a1); return r -= a2; } template -inline Angle operator-(const Angle &a) +inline Angle operator-(Angle a) { return Angle::zero()-a; } @@ -114,14 +114,14 @@ inline Angle &Angle::operator*=(T s) } template -inline Angle operator*(const Angle &a, T s) +inline Angle operator*(Angle a, T s) { Angle r(a); return r *= s; } template -inline Angle operator*(T s, const Angle &a) +inline Angle operator*(T s, Angle a) { return a*s; } @@ -134,26 +134,26 @@ inline Angle &Angle::operator/=(T s) } template -inline Angle operator/(const Angle &a, T s) +inline Angle operator/(Angle a, T s) { Angle r(a); return r /= s; } template -inline Angle operator/(T s, const Angle &a) +inline Angle operator/(T s, Angle a) { return a/s; } template -inline T operator/(const Angle &a1, const Angle &a2) +inline T operator/(Angle a1, Angle a2) { return a1.radians()/a2.radians(); } template -inline Angle &Angle::wrap_with_base(const Angle &b) +inline Angle &Angle::wrap_with_base(Angle b) { const T two_pi = 6.28318530717958647692; while(value &Angle::wrap_balanced() } template -inline Angle wrap_with_base(const Angle &a, const Angle &b) +inline Angle wrap_with_base(Angle a, Angle b) { Angle r = a; return r.wrap_with_base(b); } template -inline Angle wrap_positive(const Angle &a) +inline Angle wrap_positive(Angle a) { Angle r = a; return r.wrap_positive(); } template -inline Angle wrap_balanced(const Angle &a) +inline Angle wrap_balanced(Angle a) { Angle r = a; return r.wrap_balanced(); } template -inline Angle abs(const Angle &angle) +inline Angle abs(Angle angle) { using std::abs; return Angle::from_radians(abs(angle.radians())); } template -inline T sin(const Angle &angle) +inline T sin(Angle angle) { using std::sin; return sin(angle.radians()); @@ -218,7 +218,7 @@ inline Angle asin(T s) } template -inline T cos(const Angle &angle) +inline T cos(Angle angle) { using std::cos; return cos(angle.radians()); @@ -232,7 +232,7 @@ inline Angle acos(T s) } template -inline T tan(const Angle &angle) +inline T tan(Angle angle) { using std::tan; return tan(angle.radians());