nlib
ParamTypeTypes.h
1 
2 /*--------------------------------------------------------------------------------*
3  Project: CrossRoad
4  Copyright (C)Nintendo All rights reserved.
5 
6  These coded instructions, statements, and computer programs contain proprietary
7  information of Nintendo and/or its licensed developers and are protected by
8  national and international copyright laws. They may not be disclosed to third
9  parties or copied or duplicated in any form, in whole or in part, without the
10  prior written consent of Nintendo.
11 
12  The content herein is highly confidential and should be handled accordingly.
13  *--------------------------------------------------------------------------------*/
14 
15 #pragma once
16 #ifndef INCLUDE_NN_NLIB_TESTING_PARAMTYPETYPES_H_
17 #define INCLUDE_NN_NLIB_TESTING_PARAMTYPETYPES_H_
18 
19 #include "nn/nlib/Config.h"
20 
21 NLIB_NAMESPACE_BEGIN
22 namespace testing {
23 
24 #ifdef __cpp_variadic_templates
25 struct Tp0 {};
26 template<class HEAD, class... TAIL>
27 struct Types {
28  typedef HEAD Head;
29  typedef Types<TAIL...> Tail;
30  typedef Types<HEAD, TAIL...> type;
31 };
32 template<class HEAD>
33 struct Types<HEAD> {
34  typedef HEAD Head;
35  typedef Tp0 Tail;
36  typedef Types<HEAD> type;
37 };
38 template<>
39 struct Types<Tp0> {
40  typedef Types<Tp0> type;
41 };
42 #else
43 struct None {};
44 struct Tp0 {};
45 template<class T1>
46 struct Tp1 {
47  typedef T1 Head;
48  typedef Tp0 Tail;
49 };
50 template<class T1, class T2>
51 struct Tp2 {
52  typedef T1 Head;
53  typedef Tp1<T2> Tail;
54 };
55 template<class T1, class T2, class T3>
56 struct Tp3 {
57  typedef T1 Head;
58  typedef Tp2<T2, T3> Tail;
59 };
60 template<class T1, class T2, class T3, class T4>
61 struct Tp4 {
62  typedef T1 Head;
63  typedef Tp3<T2, T3, T4> Tail;
64 };
65 template<class T1, class T2, class T3, class T4, class T5>
66 struct Tp5 {
67  typedef T1 Head;
68  typedef Tp4<T2, T3, T4, T5> Tail;
69 };
70 template<class T1, class T2, class T3, class T4, class T5, class T6>
71 struct Tp6 {
72  typedef T1 Head;
73  typedef Tp5<T2, T3, T4, T5, T6> Tail;
74 };
75 template<class T1, class T2, class T3, class T4, class T5, class T6, class T7>
76 struct Tp7 {
77  typedef T1 Head;
78  typedef Tp6<T2, T3, T4, T5, T6, T7> Tail;
79 };
80 template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8>
81 struct Tp8 {
82  typedef T1 Head;
83  typedef Tp7<T2, T3, T4, T5, T6, T7, T8> Tail;
84 };
85 template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9>
86 struct Tp9 {
87  typedef T1 Head;
88  typedef Tp8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
89 };
90 template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9,
91  class T10>
92 struct Tp10 {
93  typedef T1 Head;
94  typedef Tp9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
95 };
96 template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9,
97  class T10, class T11>
98 struct Tp11 {
99  typedef T1 Head;
100  typedef Tp10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
101 };
102 template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9,
103  class T10, class T11, class T12>
104 struct Tp12 {
105  typedef T1 Head;
106  typedef Tp11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
107 };
108 template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9,
109  class T10, class T11, class T12, class T13>
110 struct Tp13 {
111  typedef T1 Head;
112  typedef Tp12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
113 };
114 template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9,
115  class T10, class T11, class T12, class T13, class T14>
116 struct Tp14 {
117  typedef T1 Head;
118  typedef Tp13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Tail;
119 };
120 template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9,
121  class T10, class T11, class T12, class T13, class T14, class T15>
122 struct Tp15 {
123  typedef T1 Head;
124  typedef Tp14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> Tail;
125 };
126 
127 template<class T1 = None, class T2 = None, class T3 = None, class T4 = None, class T5 = None,
128  class T6 = None, class T7 = None, class T8 = None, class T9 = None, class T10 = None,
129  class T11 = None, class T12 = None, class T13 = None, class T14 = None, class T15 = None>
130 struct Types {
131  typedef Tp15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> type;
132 };
133 
134 template<>
135 struct Types<None, None, None, None, None, None, None, None, None, None, None, None, None, None,
136  None> {
137  typedef Tp0 type;
138 };
139 template<class T1>
140 struct Types<T1, None, None, None, None, None, None, None, None, None, None, None, None, None,
141  None> {
142  typedef Tp1<T1> type;
143 };
144 template<class T1, class T2>
145 struct Types<T1, T2, None, None, None, None, None, None, None, None, None, None, None, None, None> {
146  typedef Tp2<T1, T2> type;
147 };
148 template<class T1, class T2, class T3>
149 struct Types<T1, T2, T3, None, None, None, None, None, None, None, None, None, None, None, None> {
150  typedef Tp3<T1, T2, T3> type;
151 };
152 template<class T1, class T2, class T3, class T4>
153 struct Types<T1, T2, T3, T4, None, None, None, None, None, None, None, None, None, None, None> {
154  typedef Tp4<T1, T2, T3, T4> type;
155 };
156 template<class T1, class T2, class T3, class T4, class T5>
157 struct Types<T1, T2, T3, T4, T5, None, None, None, None, None, None, None, None, None, None> {
158  typedef Tp5<T1, T2, T3, T4, T5> type;
159 };
160 template<class T1, class T2, class T3, class T4, class T5, class T6>
161 struct Types<T1, T2, T3, T4, T5, T6, None, None, None, None, None, None, None, None, None> {
162  typedef Tp6<T1, T2, T3, T4, T5, T6> type;
163 };
164 template<class T1, class T2, class T3, class T4, class T5, class T6, class T7>
165 struct Types<T1, T2, T3, T4, T5, T6, T7, None, None, None, None, None, None, None, None> {
166  typedef Tp7<T1, T2, T3, T4, T5, T6, T7> type;
167 };
168 template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8>
169 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, None, None, None, None, None, None, None> {
170  typedef Tp8<T1, T2, T3, T4, T5, T6, T7, T8> type;
171 };
172 template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9>
173 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, None, None, None, None, None, None> {
174  typedef Tp9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
175 };
176 template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9,
177  class T10>
178 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, None, None, None, None, None> {
179  typedef Tp10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
180 };
181 template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9,
182  class T10, class T11>
183 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, None, None, None, None> {
184  typedef Tp11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
185 };
186 template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9,
187  class T10, class T11, class T12>
188 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, None, None, None> {
189  typedef Tp12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> type;
190 };
191 template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9,
192  class T10, class T11, class T12, class T13>
193 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, None, None> {
194  typedef Tp13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> type;
195 };
196 template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9,
197  class T10, class T11, class T12, class T13, class T14>
198 struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, None> {
199  typedef Tp14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> type;
200 };
201 #endif
202 
203 } // namespace testing
204 NLIB_NAMESPACE_END
205 
206 #endif // INCLUDE_NN_NLIB_TESTING_PARAMTYPETYPES_H_
開発環境別の設定が書かれるファイルです。