• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
2 
3 //Distributed under the Boost Software License, Version 1.0. (See accompanying
4 //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5 
6 #ifndef BOOST_QVM_435FA7E8196311E0A176DE6BDFD72085
7 #define BOOST_QVM_435FA7E8196311E0A176DE6BDFD72085
8 
9 #include <boost/qvm/deduce_scalar.hpp>
10 #include <boost/qvm/quat_traits.hpp>
11 #include <boost/qvm/static_assert.hpp>
12 
13 namespace
14 boost
15     {
16     namespace
17     qvm
18         {
19         template <class T>
20         struct quat;
21 
22         template <class Q>
23         struct
24         deduce_quat
25             {
26             BOOST_QVM_STATIC_ASSERT(is_quat<Q>::value);
27             typedef Q type;
28             };
29 
30         namespace
31         qvm_detail
32             {
33             template <class A,class B,
34                 bool QA=is_quat<A>::value,
35                 bool QB=is_quat<B>::value>
36             struct
37             deduce_quat2_default
38                 {
39                 typedef quat<
40                     typename deduce_scalar<
41                         typename scalar<A>::type,
42                         typename scalar<B>::type>::type> type;
43                 };
44 
45             template <class Q>
46             struct
47             deduce_quat2_default<Q,Q,true,true>
48                 {
49                 typedef Q type;
50                 };
51             }
52 
53         template <class A,class B>
54         struct
55         deduce_quat2
56             {
57             BOOST_QVM_STATIC_ASSERT(is_quat<A>::value || is_quat<B>::value);
58             typedef typename qvm_detail::deduce_quat2_default<A,B>::type type;
59             };
60         }
61     }
62 
63 #endif
64