X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2FMoof%2Fcml%2Fquaternion%2Fquaternion_dot.h;fp=src%2FMoof%2Fcml%2Fquaternion%2Fquaternion_dot.h;h=72a53e214161ee14f6d45027ca891e55f690fd50;hb=c2321281bf12a7efaedde930422c7ddbc92080d4;hp=0000000000000000000000000000000000000000;hpb=87bc17e55b0c1dc73ecc66df856d3f08fd7a7724;p=chaz%2Fyoink diff --git a/src/Moof/cml/quaternion/quaternion_dot.h b/src/Moof/cml/quaternion/quaternion_dot.h new file mode 100644 index 0000000..72a53e2 --- /dev/null +++ b/src/Moof/cml/quaternion/quaternion_dot.h @@ -0,0 +1,73 @@ +/* -*- C++ -*- ------------------------------------------------------------ + +Copyright (c) 2007 Jesse Anders and Demian Nave http://cmldev.net/ + +The Configurable Math Library (CML) is distributed under the terms of the +Boost Software License, v1.0 (see cml/LICENSE for details). + + *-----------------------------------------------------------------------*/ +/** @file + * @brief + */ + +#ifndef quaternion_dot_h +#define quaternion_dot_h + +#include +#include + +namespace cml { +namespace detail { + +template inline +typename detail::DotPromote::promoted_scalar +quaternion_dot(const LeftT& p, const RightT& q) +{ + return p[0]*q[0] + p[1]*q[1] + p[2]*q[2] + p[3]*q[3]; +} + +} // namespace detail + +template +inline typename detail::DotPromote< + quaternion, quaternion +>::promoted_scalar +dot(const quaternion& p, + const quaternion& q) +{ + return detail::quaternion_dot(p,q); +} + +template +inline typename detail::DotPromote< + quaternion, et::QuaternionXpr +>::promoted_scalar +dot(const quaternion& p, QUATXPR_ARG_TYPE q) +{ + return detail::quaternion_dot(p,q); +} + +template +inline typename detail::DotPromote< + et::QuaternionXpr, quaternion +>::promoted_scalar +dot(QUATXPR_ARG_TYPE p, const quaternion& q) +{ + return detail::quaternion_dot(p,q); +} + +template inline +typename detail::DotPromote< + et::QuaternionXpr, et::QuaternionXpr +>::promoted_scalar +dot(QUATXPR_ARG_TYPE_N(1) p, QUATXPR_ARG_TYPE_N(2) q) +{ + return detail::quaternion_dot(p,q); +} + +} // namespace cml + +#endif + +// ------------------------------------------------------------------------- +// vim:ft=cpp