Browse Source

Math: make dot() twice as fast in Debug.

catastrophic-cross
Vladimír Vondruš 6 years ago
parent
commit
fc3382ec36
  1. 7
      src/Magnum/Math/Vector.h

7
src/Magnum/Math/Vector.h

@ -102,7 +102,10 @@ the same general direction, `1` when two *normalized* vectors are parallel,
@see @ref Vector::dot() const, @ref Vector::operator-(), @ref Vector2::perpendicular()
*/
template<std::size_t size, class T> inline T dot(const Vector<size, T>& a, const Vector<size, T>& b) {
return (a*b).sum();
T out{};
for(std::size_t i = 0; i != size; ++i)
out += a._data[i]*b._data[i];
return out;
}
/** @relatesalso Vector
@ -686,6 +689,8 @@ template<std::size_t size, class T> class Vector {
template<std::size_t size_, class T_> friend BoolVector<size_> equal(const Vector<size_, T_>&, const Vector<size_, T_>&);
template<std::size_t size_, class T_> friend BoolVector<size_> notEqual(const Vector<size_, T_>&, const Vector<size_, T_>&);
template<std::size_t size_, class U> friend U dot(const Vector<size_, U>&, const Vector<size_, U>&);
/* Implementation for Vector<size, T>::Vector(const Vector<size, U>&) */
template<class U, std::size_t ...sequence> constexpr explicit Vector(Implementation::Sequence<sequence...>, const Vector<size, U>& vector) noexcept: _data{T(vector._data[sequence])...} {}

Loading…
Cancel
Save