]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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 UUID_F20566FC196311E0B99D606CDFD72085 | |
7 | #define UUID_F20566FC196311E0B99D606CDFD72085 | |
8 | ||
9 | #include <boost/qvm/scalar_traits.hpp> | |
10 | ||
11 | namespace | |
12 | boost | |
13 | { | |
14 | namespace | |
15 | qvm | |
16 | { | |
17 | namespace | |
18 | deduce_scalar_detail | |
19 | { | |
20 | template <class A,class B> struct deduce_scalar_impl { }; | |
21 | ||
22 | template <class T> | |
23 | struct | |
24 | deduce_scalar_impl<T,T> | |
25 | { | |
26 | typedef T type; | |
27 | }; | |
28 | ||
29 | template <> struct deduce_scalar_impl<signed char,unsigned char> { typedef unsigned char type; }; | |
30 | template <> struct deduce_scalar_impl<signed char,unsigned short> { typedef unsigned short type; }; | |
31 | template <> struct deduce_scalar_impl<signed char,unsigned int> { typedef unsigned int type; }; | |
32 | template <> struct deduce_scalar_impl<signed char,unsigned long> { typedef unsigned long type; }; | |
33 | template <> struct deduce_scalar_impl<signed char,signed short> { typedef signed short type; }; | |
34 | template <> struct deduce_scalar_impl<signed char,signed int> { typedef signed int type; }; | |
35 | template <> struct deduce_scalar_impl<signed char,signed long> { typedef signed long type; }; | |
36 | template <> struct deduce_scalar_impl<signed char,float> { typedef float type; }; | |
37 | template <> struct deduce_scalar_impl<signed char,double> { typedef double type; }; | |
38 | template <> struct deduce_scalar_impl<unsigned char,unsigned short> { typedef unsigned short type; }; | |
39 | template <> struct deduce_scalar_impl<unsigned char,unsigned int> { typedef unsigned int type; }; | |
40 | template <> struct deduce_scalar_impl<unsigned char,unsigned long> { typedef unsigned long type; }; | |
41 | template <> struct deduce_scalar_impl<unsigned char,signed short> { typedef signed short type; }; | |
42 | template <> struct deduce_scalar_impl<unsigned char,signed int> { typedef signed int type; }; | |
43 | template <> struct deduce_scalar_impl<unsigned char,signed long> { typedef signed long type; }; | |
44 | template <> struct deduce_scalar_impl<unsigned char,float> { typedef float type; }; | |
45 | template <> struct deduce_scalar_impl<unsigned char,double> { typedef double type; }; | |
46 | template <> struct deduce_scalar_impl<signed short,unsigned short> { typedef unsigned short type; }; | |
47 | template <> struct deduce_scalar_impl<signed short,unsigned int> { typedef unsigned int type; }; | |
48 | template <> struct deduce_scalar_impl<signed short,unsigned long> { typedef unsigned long type; }; | |
49 | template <> struct deduce_scalar_impl<signed short,signed int> { typedef signed int type; }; | |
50 | template <> struct deduce_scalar_impl<signed short,signed long> { typedef signed long type; }; | |
51 | template <> struct deduce_scalar_impl<signed short,float> { typedef float type; }; | |
52 | template <> struct deduce_scalar_impl<signed short,double> { typedef double type; }; | |
53 | template <> struct deduce_scalar_impl<unsigned short,unsigned int> { typedef unsigned int type; }; | |
54 | template <> struct deduce_scalar_impl<unsigned short,unsigned long> { typedef unsigned long type; }; | |
55 | template <> struct deduce_scalar_impl<unsigned short,signed int> { typedef signed int type; }; | |
56 | template <> struct deduce_scalar_impl<unsigned short,signed long> { typedef signed long type; }; | |
57 | template <> struct deduce_scalar_impl<unsigned short,float> { typedef float type; }; | |
58 | template <> struct deduce_scalar_impl<unsigned short,double> { typedef double type; }; | |
59 | template <> struct deduce_scalar_impl<signed int,unsigned int> { typedef unsigned int type; }; | |
60 | template <> struct deduce_scalar_impl<signed int,unsigned long> { typedef unsigned long type; }; | |
61 | template <> struct deduce_scalar_impl<signed int,signed long> { typedef signed long type; }; | |
62 | template <> struct deduce_scalar_impl<signed int,float> { typedef float type; }; | |
63 | template <> struct deduce_scalar_impl<signed int,double> { typedef double type; }; | |
64 | template <> struct deduce_scalar_impl<unsigned int,unsigned long> { typedef unsigned long type; }; | |
65 | template <> struct deduce_scalar_impl<unsigned int,signed long> { typedef signed long type; }; | |
66 | template <> struct deduce_scalar_impl<unsigned int,float> { typedef float type; }; | |
67 | template <> struct deduce_scalar_impl<unsigned int,double> { typedef double type; }; | |
68 | template <> struct deduce_scalar_impl<signed long,unsigned long> { typedef unsigned long type; }; | |
69 | template <> struct deduce_scalar_impl<signed long,float> { typedef float type; }; | |
70 | template <> struct deduce_scalar_impl<signed long,double> { typedef double type; }; | |
71 | template <> struct deduce_scalar_impl<unsigned long,float> { typedef float type; }; | |
72 | template <> struct deduce_scalar_impl<unsigned long,double> { typedef double type; }; | |
73 | template <> struct deduce_scalar_impl<float,double> { typedef double type; }; | |
74 | ||
75 | template <> struct deduce_scalar_impl<unsigned char,signed char> { typedef unsigned char type; }; | |
76 | template <> struct deduce_scalar_impl<unsigned short,signed char> { typedef unsigned short type; }; | |
77 | template <> struct deduce_scalar_impl<unsigned int,signed char> { typedef unsigned int type; }; | |
78 | template <> struct deduce_scalar_impl<unsigned long,signed char> { typedef unsigned long type; }; | |
79 | template <> struct deduce_scalar_impl<signed short,signed char> { typedef signed short type; }; | |
80 | template <> struct deduce_scalar_impl<signed int,signed char> { typedef signed int type; }; | |
81 | template <> struct deduce_scalar_impl<signed long,signed char> { typedef signed long type; }; | |
82 | template <> struct deduce_scalar_impl<float,signed char> { typedef float type; }; | |
83 | template <> struct deduce_scalar_impl<double,signed char> { typedef double type; }; | |
84 | template <> struct deduce_scalar_impl<unsigned short,unsigned char> { typedef unsigned short type; }; | |
85 | template <> struct deduce_scalar_impl<unsigned int,unsigned char> { typedef unsigned int type; }; | |
86 | template <> struct deduce_scalar_impl<unsigned long,unsigned char> { typedef unsigned long type; }; | |
87 | template <> struct deduce_scalar_impl<signed short,unsigned char> { typedef signed short type; }; | |
88 | template <> struct deduce_scalar_impl<signed int,unsigned char> { typedef signed int type; }; | |
89 | template <> struct deduce_scalar_impl<signed long,unsigned char> { typedef signed long type; }; | |
90 | template <> struct deduce_scalar_impl<float,unsigned char> { typedef float type; }; | |
91 | template <> struct deduce_scalar_impl<double,unsigned char> { typedef double type; }; | |
92 | template <> struct deduce_scalar_impl<unsigned short,signed short> { typedef unsigned short type; }; | |
93 | template <> struct deduce_scalar_impl<unsigned int,signed short> { typedef unsigned int type; }; | |
94 | template <> struct deduce_scalar_impl<unsigned long,signed short> { typedef unsigned long type; }; | |
95 | template <> struct deduce_scalar_impl<signed int,signed short> { typedef signed int type; }; | |
96 | template <> struct deduce_scalar_impl<signed long,signed short> { typedef signed long type; }; | |
97 | template <> struct deduce_scalar_impl<float,signed short> { typedef float type; }; | |
98 | template <> struct deduce_scalar_impl<double,signed short> { typedef double type; }; | |
99 | template <> struct deduce_scalar_impl<unsigned int,unsigned short> { typedef unsigned int type; }; | |
100 | template <> struct deduce_scalar_impl<unsigned long,unsigned short> { typedef unsigned long type; }; | |
101 | template <> struct deduce_scalar_impl<signed int,unsigned short> { typedef signed int type; }; | |
102 | template <> struct deduce_scalar_impl<signed long,unsigned short> { typedef signed long type; }; | |
103 | template <> struct deduce_scalar_impl<float,unsigned short> { typedef float type; }; | |
104 | template <> struct deduce_scalar_impl<double,unsigned short> { typedef double type; }; | |
105 | template <> struct deduce_scalar_impl<unsigned int,signed int> { typedef unsigned int type; }; | |
106 | template <> struct deduce_scalar_impl<unsigned long,signed int> { typedef unsigned long type; }; | |
107 | template <> struct deduce_scalar_impl<signed long,signed int> { typedef signed long type; }; | |
108 | template <> struct deduce_scalar_impl<float,signed int> { typedef float type; }; | |
109 | template <> struct deduce_scalar_impl<double,signed int> { typedef double type; }; | |
110 | template <> struct deduce_scalar_impl<unsigned long,unsigned int> { typedef unsigned long type; }; | |
111 | template <> struct deduce_scalar_impl<signed long,unsigned int> { typedef signed long type; }; | |
112 | template <> struct deduce_scalar_impl<float,unsigned int> { typedef float type; }; | |
113 | template <> struct deduce_scalar_impl<double,unsigned int> { typedef double type; }; | |
114 | template <> struct deduce_scalar_impl<unsigned long,signed long> { typedef unsigned long type; }; | |
115 | template <> struct deduce_scalar_impl<float,signed long> { typedef float type; }; | |
116 | template <> struct deduce_scalar_impl<double,signed long> { typedef double type; }; | |
117 | template <> struct deduce_scalar_impl<float,unsigned long> { typedef float type; }; | |
118 | template <> struct deduce_scalar_impl<double,unsigned long> { typedef double type; }; | |
119 | template <> struct deduce_scalar_impl<double,float> { typedef double type; }; | |
120 | } | |
121 | ||
122 | template <class A,class B> | |
123 | struct | |
124 | deduce_scalar | |
125 | { | |
126 | typedef typename deduce_scalar_detail::deduce_scalar_impl<A,B>::type type; | |
127 | }; | |
128 | } | |
129 | } | |
130 | ||
131 | #endif |