Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/SuperOrxoBros_HS18/SuperOrxoBros_HS18/src/external/gmock/include/gmock/internal/gmock-generated-internal-utils.h @ 12175

Last change on this file since 12175 was 12175, checked in by siramesh, 5 years ago

Super Orxo Bros (Sidharth Ramesh, Nisa Balta, Jeff Ren)

File size: 11.1 KB
Line 
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
44namespace testing {
45
46template <typename T>
47class Matcher;
48
49namespace internal {
50
51// An IgnoredValue object can be implicitly constructed from ANY value.
52// This is used in implementing the IgnoreResult(a) action.
53class 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.
66template <typename Tuple>
67struct MatcherTuple;
68
69template <>
70struct MatcherTuple< ::std::tr1::tuple<> > {
71  typedef ::std::tr1::tuple< > type;
72};
73
74template <typename A1>
75struct MatcherTuple< ::std::tr1::tuple<A1> > {
76  typedef ::std::tr1::tuple<Matcher<A1> > type;
77};
78
79template <typename A1, typename A2>
80struct MatcherTuple< ::std::tr1::tuple<A1, A2> > {
81  typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2> > type;
82};
83
84template <typename A1, typename A2, typename A3>
85struct MatcherTuple< ::std::tr1::tuple<A1, A2, A3> > {
86  typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3> > type;
87};
88
89template <typename A1, typename A2, typename A3, typename A4>
90struct 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
95template <typename A1, typename A2, typename A3, typename A4, typename A5>
96struct 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
101template <typename A1, typename A2, typename A3, typename A4, typename A5,
102    typename A6>
103struct 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
108template <typename A1, typename A2, typename A3, typename A4, typename A5,
109    typename A6, typename A7>
110struct 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
115template <typename A1, typename A2, typename A3, typename A4, typename A5,
116    typename A6, typename A7, typename A8>
117struct 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
122template <typename A1, typename A2, typename A3, typename A4, typename A5,
123    typename A6, typename A7, typename A8, typename A9>
124struct 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
129template <typename A1, typename A2, typename A3, typename A4, typename A5,
130    typename A6, typename A7, typename A8, typename A9, typename A10>
131struct 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.
151template <typename F>
152struct Function;
153
154template <typename R>
155struct 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
163template <typename R, typename A1>
164struct 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
173template <typename R, typename A1, typename A2>
174struct 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
183template <typename R, typename A1, typename A2, typename A3>
184struct 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
193template <typename R, typename A1, typename A2, typename A3, typename A4>
194struct 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
203template <typename R, typename A1, typename A2, typename A3, typename A4,
204    typename A5>
205struct 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
214template <typename R, typename A1, typename A2, typename A3, typename A4,
215    typename A5, typename A6>
216struct 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
225template <typename R, typename A1, typename A2, typename A3, typename A4,
226    typename A5, typename A6, typename A7>
227struct 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
236template <typename R, typename A1, typename A2, typename A3, typename A4,
237    typename A5, typename A6, typename A7, typename A8>
238struct 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
247template <typename R, typename A1, typename A2, typename A3, typename A4,
248    typename A5, typename A6, typename A7, typename A8, typename A9>
249struct 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
259template <typename R, typename A1, typename A2, typename A3, typename A4,
260    typename A5, typename A6, typename A7, typename A8, typename A9,
261    typename A10>
262struct 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_
Note: See TracBrowser for help on using the repository browser.