]> Dogcows Code - chaz/yoink/blob - src/moof/cml/quaternion/quaternion_dot.h
fixes for newer versions of g++
[chaz/yoink] / src / moof / cml / quaternion / quaternion_dot.h
1 /* -*- C++ -*- ------------------------------------------------------------
2
3 Copyright (c) 2007 Jesse Anders and Demian Nave http://cmldev.net/
4
5 The Configurable Math Library (CML) is distributed under the terms of the
6 Boost Software License, v1.0 (see cml/LICENSE for details).
7
8 *-----------------------------------------------------------------------*/
9 /** @file
10 * @brief
11 */
12
13 #ifndef quaternion_dot_h
14 #define quaternion_dot_h
15
16 #include <cml/vector/vector_products.h>
17 #include <cml/quaternion/quaternion_expr.h>
18
19 namespace cml {
20 namespace detail {
21
22 template<class LeftT, class RightT> inline
23 typename detail::DotPromote<LeftT,RightT>::promoted_scalar
24 quaternion_dot(const LeftT& p, const RightT& q)
25 {
26 return p[0]*q[0] + p[1]*q[1] + p[2]*q[2] + p[3]*q[3];
27 }
28
29 } // namespace detail
30
31 template<typename E1, class AT1, typename E2, class AT2, class OT, class CT>
32 inline typename detail::DotPromote<
33 quaternion<E1,AT1,OT,CT>, quaternion<E2,AT2,OT,CT>
34 >::promoted_scalar
35 dot(const quaternion<E1,AT1,OT,CT>& p,
36 const quaternion<E2,AT2,OT,CT>& q)
37 {
38 return detail::quaternion_dot(p,q);
39 }
40
41 template<typename E, class AT, class OT, class CT, class XprT>
42 inline typename detail::DotPromote<
43 quaternion<E,AT,OT,CT>, et::QuaternionXpr<XprT>
44 >::promoted_scalar
45 dot(const quaternion<E,AT,OT,CT>& p, QUATXPR_ARG_TYPE q)
46 {
47 return detail::quaternion_dot(p,q);
48 }
49
50 template<class XprT, typename E, class AT, class OT, class CT>
51 inline typename detail::DotPromote<
52 et::QuaternionXpr<XprT>, quaternion<E,AT,OT,CT>
53 >::promoted_scalar
54 dot(QUATXPR_ARG_TYPE p, const quaternion<E,AT,OT,CT>& q)
55 {
56 return detail::quaternion_dot(p,q);
57 }
58
59 template<class XprT1, class XprT2> inline
60 typename detail::DotPromote<
61 et::QuaternionXpr<XprT1>, et::QuaternionXpr<XprT2>
62 >::promoted_scalar
63 dot(QUATXPR_ARG_TYPE_N(1) p, QUATXPR_ARG_TYPE_N(2) q)
64 {
65 return detail::quaternion_dot(p,q);
66 }
67
68 } // namespace cml
69
70 #endif
71
72 // -------------------------------------------------------------------------
73 // vim:ft=cpp
This page took 0.032667 seconds and 4 git commands to generate.