OSDN Git Service

#36897 [DTXC] MIDIインポート機能の呼び出し口を、ファイルメニュー内にも配置。
[dtxmania/dtxmania.git] / SlimDXc_Jun2010(VC++2008) / external / GMock / gmock / internal / gmock-generated-internal-utils.h
1 // This file was GENERATED by a script.  DO NOT EDIT BY HAND!!!
2
3 // Copyright 2007, Google Inc.
4 // All rights reserved.
5 //
6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions are
8 // met:
9 //
10 //     * Redistributions of source code must retain the above copyright
11 // notice, this list of conditions and the following disclaimer.
12 //     * Redistributions in binary form must reproduce the above
13 // copyright notice, this list of conditions and the following disclaimer
14 // in the documentation and/or other materials provided with the
15 // distribution.
16 //     * Neither the name of Google Inc. nor the names of its
17 // contributors may be used to endorse or promote products derived from
18 // this software without specific prior written permission.
19 //
20 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 //
32 // Author: wan@google.com (Zhanyong Wan)
33
34 // Google Mock - a framework for writing C++ mock classes.
35 //
36 // This file contains template meta-programming utility classes needed
37 // for implementing Google Mock.
38
39 #ifndef GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_GENERATED_INTERNAL_UTILS_H_
40 #define GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_GENERATED_INTERNAL_UTILS_H_
41
42 #include <gmock/internal/gmock-port.h>
43
44 namespace testing {
45
46 template <typename T>
47 class Matcher;
48
49 namespace internal {
50
51 // An IgnoredValue object can be implicitly constructed from ANY value.
52 // This is used in implementing the IgnoreResult(a) action.
53 class IgnoredValue {
54  public:
55   // This constructor template allows any value to be implicitly
56   // converted to IgnoredValue.  The object has no data member and
57   // doesn't try to remember anything about the argument.  We
58   // deliberately omit the 'explicit' keyword in order to allow the
59   // conversion to be implicit.
60   template <typename T>
61   IgnoredValue(const T&) {}
62 };
63
64 // MatcherTuple<T>::type is a tuple type where each field is a Matcher
65 // for the corresponding field in tuple type T.
66 template <typename Tuple>
67 struct MatcherTuple;
68
69 template <>
70 struct MatcherTuple< ::std::tr1::tuple<> > {
71   typedef ::std::tr1::tuple< > type;
72 };
73
74 template <typename A1>
75 struct MatcherTuple< ::std::tr1::tuple<A1> > {
76   typedef ::std::tr1::tuple<Matcher<A1> > type;
77 };
78
79 template <typename A1, typename A2>
80 struct MatcherTuple< ::std::tr1::tuple<A1, A2> > {
81   typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2> > type;
82 };
83
84 template <typename A1, typename A2, typename A3>
85 struct MatcherTuple< ::std::tr1::tuple<A1, A2, A3> > {
86   typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3> > type;
87 };
88
89 template <typename A1, typename A2, typename A3, typename A4>
90 struct MatcherTuple< ::std::tr1::tuple<A1, A2, A3, A4> > {
91   typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>,
92       Matcher<A4> > type;
93 };
94
95 template <typename A1, typename A2, typename A3, typename A4, typename A5>
96 struct MatcherTuple< ::std::tr1::tuple<A1, A2, A3, A4, A5> > {
97   typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
98       Matcher<A5> > type;
99 };
100
101 template <typename A1, typename A2, typename A3, typename A4, typename A5,
102     typename A6>
103 struct MatcherTuple< ::std::tr1::tuple<A1, A2, A3, A4, A5, A6> > {
104   typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
105       Matcher<A5>, Matcher<A6> > type;
106 };
107
108 template <typename A1, typename A2, typename A3, typename A4, typename A5,
109     typename A6, typename A7>
110 struct MatcherTuple< ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7> > {
111   typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
112       Matcher<A5>, Matcher<A6>, Matcher<A7> > type;
113 };
114
115 template <typename A1, typename A2, typename A3, typename A4, typename A5,
116     typename A6, typename A7, typename A8>
117 struct MatcherTuple< ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, A8> > {
118   typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
119       Matcher<A5>, Matcher<A6>, Matcher<A7>, Matcher<A8> > type;
120 };
121
122 template <typename A1, typename A2, typename A3, typename A4, typename A5,
123     typename A6, typename A7, typename A8, typename A9>
124 struct MatcherTuple< ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9> > {
125   typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
126       Matcher<A5>, Matcher<A6>, Matcher<A7>, Matcher<A8>, Matcher<A9> > type;
127 };
128
129 template <typename A1, typename A2, typename A3, typename A4, typename A5,
130     typename A6, typename A7, typename A8, typename A9, typename A10>
131 struct MatcherTuple< ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9,
132     A10> > {
133   typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>,
134       Matcher<A5>, Matcher<A6>, Matcher<A7>, Matcher<A8>, Matcher<A9>,
135       Matcher<A10> > type;
136 };
137
138 // Template struct Function<F>, where F must be a function type, contains
139 // the following typedefs:
140 //
141 //   Result:               the function's return type.
142 //   ArgumentN:            the type of the N-th argument, where N starts with 1.
143 //   ArgumentTuple:        the tuple type consisting of all parameters of F.
144 //   ArgumentMatcherTuple: the tuple type consisting of Matchers for all
145 //                         parameters of F.
146 //   MakeResultVoid:       the function type obtained by substituting void
147 //                         for the return type of F.
148 //   MakeResultIgnoredValue:
149 //                         the function type obtained by substituting Something
150 //                         for the return type of F.
151 template <typename F>
152 struct Function;
153
154 template <typename R>
155 struct Function<R()> {
156   typedef R Result;
157   typedef ::std::tr1::tuple<> ArgumentTuple;
158   typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple;
159   typedef void MakeResultVoid();
160   typedef IgnoredValue MakeResultIgnoredValue();
161 };
162
163 template <typename R, typename A1>
164 struct Function<R(A1)>
165     : Function<R()> {
166   typedef A1 Argument1;
167   typedef ::std::tr1::tuple<A1> ArgumentTuple;
168   typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple;
169   typedef void MakeResultVoid(A1);
170   typedef IgnoredValue MakeResultIgnoredValue(A1);
171 };
172
173 template <typename R, typename A1, typename A2>
174 struct Function<R(A1, A2)>
175     : Function<R(A1)> {
176   typedef A2 Argument2;
177   typedef ::std::tr1::tuple<A1, A2> ArgumentTuple;
178   typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple;
179   typedef void MakeResultVoid(A1, A2);
180   typedef IgnoredValue MakeResultIgnoredValue(A1, A2);
181 };
182
183 template <typename R, typename A1, typename A2, typename A3>
184 struct Function<R(A1, A2, A3)>
185     : Function<R(A1, A2)> {
186   typedef A3 Argument3;
187   typedef ::std::tr1::tuple<A1, A2, A3> ArgumentTuple;
188   typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple;
189   typedef void MakeResultVoid(A1, A2, A3);
190   typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3);
191 };
192
193 template <typename R, typename A1, typename A2, typename A3, typename A4>
194 struct Function<R(A1, A2, A3, A4)>
195     : Function<R(A1, A2, A3)> {
196   typedef A4 Argument4;
197   typedef ::std::tr1::tuple<A1, A2, A3, A4> ArgumentTuple;
198   typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple;
199   typedef void MakeResultVoid(A1, A2, A3, A4);
200   typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4);
201 };
202
203 template <typename R, typename A1, typename A2, typename A3, typename A4,
204     typename A5>
205 struct Function<R(A1, A2, A3, A4, A5)>
206     : Function<R(A1, A2, A3, A4)> {
207   typedef A5 Argument5;
208   typedef ::std::tr1::tuple<A1, A2, A3, A4, A5> ArgumentTuple;
209   typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple;
210   typedef void MakeResultVoid(A1, A2, A3, A4, A5);
211   typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5);
212 };
213
214 template <typename R, typename A1, typename A2, typename A3, typename A4,
215     typename A5, typename A6>
216 struct Function<R(A1, A2, A3, A4, A5, A6)>
217     : Function<R(A1, A2, A3, A4, A5)> {
218   typedef A6 Argument6;
219   typedef ::std::tr1::tuple<A1, A2, A3, A4, A5, A6> ArgumentTuple;
220   typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple;
221   typedef void MakeResultVoid(A1, A2, A3, A4, A5, A6);
222   typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5, A6);
223 };
224
225 template <typename R, typename A1, typename A2, typename A3, typename A4,
226     typename A5, typename A6, typename A7>
227 struct Function<R(A1, A2, A3, A4, A5, A6, A7)>
228     : Function<R(A1, A2, A3, A4, A5, A6)> {
229   typedef A7 Argument7;
230   typedef ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7> ArgumentTuple;
231   typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple;
232   typedef void MakeResultVoid(A1, A2, A3, A4, A5, A6, A7);
233   typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5, A6, A7);
234 };
235
236 template <typename R, typename A1, typename A2, typename A3, typename A4,
237     typename A5, typename A6, typename A7, typename A8>
238 struct Function<R(A1, A2, A3, A4, A5, A6, A7, A8)>
239     : Function<R(A1, A2, A3, A4, A5, A6, A7)> {
240   typedef A8 Argument8;
241   typedef ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, A8> ArgumentTuple;
242   typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple;
243   typedef void MakeResultVoid(A1, A2, A3, A4, A5, A6, A7, A8);
244   typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5, A6, A7, A8);
245 };
246
247 template <typename R, typename A1, typename A2, typename A3, typename A4,
248     typename A5, typename A6, typename A7, typename A8, typename A9>
249 struct Function<R(A1, A2, A3, A4, A5, A6, A7, A8, A9)>
250     : Function<R(A1, A2, A3, A4, A5, A6, A7, A8)> {
251   typedef A9 Argument9;
252   typedef ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9> ArgumentTuple;
253   typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple;
254   typedef void MakeResultVoid(A1, A2, A3, A4, A5, A6, A7, A8, A9);
255   typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5, A6, A7, A8,
256       A9);
257 };
258
259 template <typename R, typename A1, typename A2, typename A3, typename A4,
260     typename A5, typename A6, typename A7, typename A8, typename A9,
261     typename A10>
262 struct Function<R(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)>
263     : Function<R(A1, A2, A3, A4, A5, A6, A7, A8, A9)> {
264   typedef A10 Argument10;
265   typedef ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9,
266       A10> ArgumentTuple;
267   typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple;
268   typedef void MakeResultVoid(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10);
269   typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5, A6, A7, A8,
270       A9, A10);
271 };
272
273 }  // namespace internal
274
275 }  // namespace testing
276
277 #endif  // GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_GENERATED_INTERNAL_UTILS_H_