summaryrefslogtreecommitdiff
path: root/boost/qvm/deduce_scalar.hpp
blob: 010af340437a719622b9cdc1d0f537377fd94ea4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.

//Distributed under the Boost Software License, Version 1.0. (See accompanying
//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

#ifndef UUID_F20566FC196311E0B99D606CDFD72085
#define UUID_F20566FC196311E0B99D606CDFD72085

#include <boost/qvm/scalar_traits.hpp>

namespace
boost
    {
    namespace
    qvm
        {
        namespace
        deduce_scalar_detail
            {
            template <class A,class B> struct deduce_scalar_impl { };

            template <class T>
            struct
            deduce_scalar_impl<T,T>
                {
                typedef T type;
                };

            template <> struct deduce_scalar_impl<signed char,unsigned char> { typedef unsigned char type; };
            template <> struct deduce_scalar_impl<signed char,unsigned short> { typedef unsigned short type; };
            template <> struct deduce_scalar_impl<signed char,unsigned int> { typedef unsigned int type; };
            template <> struct deduce_scalar_impl<signed char,unsigned long> { typedef unsigned long type; };
            template <> struct deduce_scalar_impl<signed char,signed short> { typedef signed short type; };
            template <> struct deduce_scalar_impl<signed char,signed int> { typedef signed int type; };
            template <> struct deduce_scalar_impl<signed char,signed long> { typedef signed long type; };
            template <> struct deduce_scalar_impl<signed char,float> { typedef float type; };
            template <> struct deduce_scalar_impl<signed char,double> { typedef double type; };
            template <> struct deduce_scalar_impl<unsigned char,unsigned short> { typedef unsigned short type; };
            template <> struct deduce_scalar_impl<unsigned char,unsigned int> { typedef unsigned int type; };
            template <> struct deduce_scalar_impl<unsigned char,unsigned long> { typedef unsigned long type; };
            template <> struct deduce_scalar_impl<unsigned char,signed short> { typedef signed short type; };
            template <> struct deduce_scalar_impl<unsigned char,signed int> { typedef signed int type; };
            template <> struct deduce_scalar_impl<unsigned char,signed long> { typedef signed long type; };
            template <> struct deduce_scalar_impl<unsigned char,float> { typedef float type; };
            template <> struct deduce_scalar_impl<unsigned char,double> { typedef double type; };
            template <> struct deduce_scalar_impl<signed short,unsigned short> { typedef unsigned short type; };
            template <> struct deduce_scalar_impl<signed short,unsigned int> { typedef unsigned int type; };
            template <> struct deduce_scalar_impl<signed short,unsigned long> { typedef unsigned long type; };
            template <> struct deduce_scalar_impl<signed short,signed int> { typedef signed int type; };
            template <> struct deduce_scalar_impl<signed short,signed long> { typedef signed long type; };
            template <> struct deduce_scalar_impl<signed short,float> { typedef float type; };
            template <> struct deduce_scalar_impl<signed short,double> { typedef double type; };
            template <> struct deduce_scalar_impl<unsigned short,unsigned int> { typedef unsigned int type; };
            template <> struct deduce_scalar_impl<unsigned short,unsigned long> { typedef unsigned long type; };
            template <> struct deduce_scalar_impl<unsigned short,signed int> { typedef signed int type; };
            template <> struct deduce_scalar_impl<unsigned short,signed long> { typedef signed long type; };
            template <> struct deduce_scalar_impl<unsigned short,float> { typedef float type; };
            template <> struct deduce_scalar_impl<unsigned short,double> { typedef double type; };
            template <> struct deduce_scalar_impl<signed int,unsigned int> { typedef unsigned int type; };
            template <> struct deduce_scalar_impl<signed int,unsigned long> { typedef unsigned long type; };
            template <> struct deduce_scalar_impl<signed int,signed long> { typedef signed long type; };
            template <> struct deduce_scalar_impl<signed int,float> { typedef float type; };
            template <> struct deduce_scalar_impl<signed int,double> { typedef double type; };
            template <> struct deduce_scalar_impl<unsigned int,unsigned long> { typedef unsigned long type; };
            template <> struct deduce_scalar_impl<unsigned int,signed long> { typedef signed long type; };
            template <> struct deduce_scalar_impl<unsigned int,float> { typedef float type; };
            template <> struct deduce_scalar_impl<unsigned int,double> { typedef double type; };
            template <> struct deduce_scalar_impl<signed long,unsigned long> { typedef unsigned long type; };
            template <> struct deduce_scalar_impl<signed long,float> { typedef float type; };
            template <> struct deduce_scalar_impl<signed long,double> { typedef double type; };
            template <> struct deduce_scalar_impl<unsigned long,float> { typedef float type; };
            template <> struct deduce_scalar_impl<unsigned long,double> { typedef double type; };
            template <> struct deduce_scalar_impl<float,double> { typedef double type; };

            template <> struct deduce_scalar_impl<unsigned char,signed char> { typedef unsigned char type; };
            template <> struct deduce_scalar_impl<unsigned short,signed char> { typedef unsigned short type; };
            template <> struct deduce_scalar_impl<unsigned int,signed char> { typedef unsigned int type; };
            template <> struct deduce_scalar_impl<unsigned long,signed char> { typedef unsigned long type; };
            template <> struct deduce_scalar_impl<signed short,signed char> { typedef signed short type; };
            template <> struct deduce_scalar_impl<signed int,signed char> { typedef signed int type; };
            template <> struct deduce_scalar_impl<signed long,signed char> { typedef signed long type; };
            template <> struct deduce_scalar_impl<float,signed char> { typedef float type; };
            template <> struct deduce_scalar_impl<double,signed char> { typedef double type; };
            template <> struct deduce_scalar_impl<unsigned short,unsigned char> { typedef unsigned short type; };
            template <> struct deduce_scalar_impl<unsigned int,unsigned char> { typedef unsigned int type; };
            template <> struct deduce_scalar_impl<unsigned long,unsigned char> { typedef unsigned long type; };
            template <> struct deduce_scalar_impl<signed short,unsigned char> { typedef signed short type; };
            template <> struct deduce_scalar_impl<signed int,unsigned char> { typedef signed int type; };
            template <> struct deduce_scalar_impl<signed long,unsigned char> { typedef signed long type; };
            template <> struct deduce_scalar_impl<float,unsigned char> { typedef float type; };
            template <> struct deduce_scalar_impl<double,unsigned char> { typedef double type; };
            template <> struct deduce_scalar_impl<unsigned short,signed short> { typedef unsigned short type; };
            template <> struct deduce_scalar_impl<unsigned int,signed short> { typedef unsigned int type; };
            template <> struct deduce_scalar_impl<unsigned long,signed short> { typedef unsigned long type; };
            template <> struct deduce_scalar_impl<signed int,signed short> { typedef signed int type; };
            template <> struct deduce_scalar_impl<signed long,signed short> { typedef signed long type; };
            template <> struct deduce_scalar_impl<float,signed short> { typedef float type; };
            template <> struct deduce_scalar_impl<double,signed short> { typedef double type; };
            template <> struct deduce_scalar_impl<unsigned int,unsigned short> { typedef unsigned int type; };
            template <> struct deduce_scalar_impl<unsigned long,unsigned short> { typedef unsigned long type; };
            template <> struct deduce_scalar_impl<signed int,unsigned short> { typedef signed int type; };
            template <> struct deduce_scalar_impl<signed long,unsigned short> { typedef signed long type; };
            template <> struct deduce_scalar_impl<float,unsigned short> { typedef float type; };
            template <> struct deduce_scalar_impl<double,unsigned short> { typedef double type; };
            template <> struct deduce_scalar_impl<unsigned int,signed int> { typedef unsigned int type; };
            template <> struct deduce_scalar_impl<unsigned long,signed int> { typedef unsigned long type; };
            template <> struct deduce_scalar_impl<signed long,signed int> { typedef signed long type; };
            template <> struct deduce_scalar_impl<float,signed int> { typedef float type; };
            template <> struct deduce_scalar_impl<double,signed int> { typedef double type; };
            template <> struct deduce_scalar_impl<unsigned long,unsigned int> { typedef unsigned long type; };
            template <> struct deduce_scalar_impl<signed long,unsigned int> { typedef signed long type; };
            template <> struct deduce_scalar_impl<float,unsigned int> { typedef float type; };
            template <> struct deduce_scalar_impl<double,unsigned int> { typedef double type; };
            template <> struct deduce_scalar_impl<unsigned long,signed long> { typedef unsigned long type; };
            template <> struct deduce_scalar_impl<float,signed long> { typedef float type; };
            template <> struct deduce_scalar_impl<double,signed long> { typedef double type; };
            template <> struct deduce_scalar_impl<float,unsigned long> { typedef float type; };
            template <> struct deduce_scalar_impl<double,unsigned long> { typedef double type; };
            template <> struct deduce_scalar_impl<double,float> { typedef double type; };
            }

        template <class A,class B>
        struct
        deduce_scalar
            {
            typedef typename deduce_scalar_detail::deduce_scalar_impl<A,B>::type type;
            };
        }
    }

#endif