X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2Fcml%2Fquaternion%2Fquaternion_dot.h;fp=src%2Fcml%2Fquaternion%2Fquaternion_dot.h;h=72a53e214161ee14f6d45027ca891e55f690fd50;hp=0000000000000000000000000000000000000000;hb=6b0a0d0efafe34d48ab344fca3b479553bd4e62c;hpb=85783316365181491a3e3c0c63659972477cebba diff --git a/src/cml/quaternion/quaternion_dot.h b/src/cml/quaternion/quaternion_dot.h new file mode 100644 index 0000000..72a53e2 --- /dev/null +++ b/src/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