quaternion_dot.h

Go to the documentation of this file.
00001 /* -*- C++ -*- ------------------------------------------------------------
00002  
00003 Copyright (c) 2007 Jesse Anders and Demian Nave http://cmldev.net/
00004 
00005 The Configurable Math Library (CML) is distributed under the terms of the
00006 Boost Software License, v1.0 (see cml/LICENSE for details).
00007 
00008  *-----------------------------------------------------------------------*/
00013 #ifndef quaternion_dot_h
00014 #define quaternion_dot_h
00015 
00016 #include <cml/vector/vector_products.h>
00017 #include <cml/quaternion/quaternion_expr.h>
00018 
00019 namespace cml {
00020 namespace detail {
00021 
00022 template<class LeftT, class RightT> inline
00023 typename detail::DotPromote<LeftT,RightT>::promoted_scalar
00024 quaternion_dot(const LeftT& p, const RightT& q)
00025 {
00026     return p[0]*q[0] + p[1]*q[1] + p[2]*q[2] + p[3]*q[3];
00027 }
00028 
00029 } // namespace detail
00030 
00031 template<typename E1, class AT1, typename E2, class AT2, class OT, class CT>
00032 inline typename detail::DotPromote<
00033     quaternion<E1,AT1,OT,CT>, quaternion<E2,AT2,OT,CT>
00034 >::promoted_scalar
00035 dot(const quaternion<E1,AT1,OT,CT>& p,
00036     const quaternion<E2,AT2,OT,CT>& q)
00037 {
00038     return detail::quaternion_dot(p,q);
00039 }
00040 
00041 template<typename E, class AT, class OT, class CT, class XprT>
00042 inline typename detail::DotPromote<
00043     quaternion<E,AT,OT,CT>, et::QuaternionXpr<XprT>
00044 >::promoted_scalar
00045 dot(const quaternion<E,AT,OT,CT>& p, QUATXPR_ARG_TYPE q)
00046 {
00047     return detail::quaternion_dot(p,q);
00048 }
00049 
00050 template<class XprT, typename E, class AT, class OT, class CT>
00051 inline typename detail::DotPromote<
00052     et::QuaternionXpr<XprT>, quaternion<E,AT,OT,CT>
00053 >::promoted_scalar
00054 dot(QUATXPR_ARG_TYPE p, const quaternion<E,AT,OT,CT>& q)
00055 {
00056     return detail::quaternion_dot(p,q);
00057 }
00058 
00059 template<class XprT1, class XprT2> inline
00060 typename detail::DotPromote<
00061     et::QuaternionXpr<XprT1>, et::QuaternionXpr<XprT2>
00062 >::promoted_scalar
00063 dot(QUATXPR_ARG_TYPE_N(1) p, QUATXPR_ARG_TYPE_N(2) q)
00064 {
00065     return detail::quaternion_dot(p,q);
00066 }
00067 
00068 } // namespace cml
00069 
00070 #endif
00071 
00072 // -------------------------------------------------------------------------
00073 // vim:ft=cpp

Generated on Sat Jul 18 19:35:28 2009 for CML 1.0 by  doxygen 1.5.9