bloaty/third_party/googletest/googlemock/include/gmock/gmock-generated-actions.h
Go to the documentation of this file.
1 // This file was GENERATED by command:
2 // pump.py gmock-generated-actions.h.pump
3 // DO NOT EDIT BY HAND!!!
4 
5 // Copyright 2007, Google Inc.
6 // All rights reserved.
7 //
8 // Redistribution and use in source and binary forms, with or without
9 // modification, are permitted provided that the following conditions are
10 // met:
11 //
12 // * Redistributions of source code must retain the above copyright
13 // notice, this list of conditions and the following disclaimer.
14 // * Redistributions in binary form must reproduce the above
15 // copyright notice, this list of conditions and the following disclaimer
16 // in the documentation and/or other materials provided with the
17 // distribution.
18 // * Neither the name of Google Inc. nor the names of its
19 // contributors may be used to endorse or promote products derived from
20 // this software without specific prior written permission.
21 //
22 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 
34 
35 // Google Mock - a framework for writing C++ mock classes.
36 //
37 // This file implements some commonly used variadic actions.
38 
39 // GOOGLETEST_CM0002 DO NOT DELETE
40 
41 #ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_
42 #define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_
43 
44 #include <memory>
45 #include <utility>
46 
47 #include "gmock/gmock-actions.h"
48 #include "gmock/internal/gmock-port.h"
49 
50 namespace testing {
51 namespace internal {
52 
53 // A macro from the ACTION* family (defined later in this file)
54 // defines an action that can be used in a mock function. Typically,
55 // these actions only care about a subset of the arguments of the mock
56 // function. For example, if such an action only uses the second
57 // argument, it can be used in any mock function that takes >= 2
58 // arguments where the type of the second argument is compatible.
59 //
60 // Therefore, the action implementation must be prepared to take more
61 // arguments than it needs. The ExcessiveArg type is used to
62 // represent those excessive arguments. In order to keep the compiler
63 // error messages tractable, we define it in the testing namespace
64 // instead of testing::internal. However, this is an INTERNAL TYPE
65 // and subject to change without notice, so a user MUST NOT USE THIS
66 // TYPE DIRECTLY.
67 struct ExcessiveArg {};
68 
69 // A helper class needed for implementing the ACTION* macros.
70 template <typename Result, class Impl>
71 class ActionHelper {
72  public:
73  static Result Perform(Impl* impl, const ::std::tuple<>& args) {
74  return impl->template gmock_PerformImpl<>(args, ExcessiveArg(),
77  ExcessiveArg());
78  }
79 
80  template <typename A0>
81  static Result Perform(Impl* impl, const ::std::tuple<A0>& args) {
82  return impl->template gmock_PerformImpl<A0>(args, std::get<0>(args),
85  ExcessiveArg());
86  }
87 
88  template <typename A0, typename A1>
89  static Result Perform(Impl* impl, const ::std::tuple<A0, A1>& args) {
90  return impl->template gmock_PerformImpl<A0, A1>(args, std::get<0>(args),
91  std::get<1>(args), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(),
93  ExcessiveArg());
94  }
95 
96  template <typename A0, typename A1, typename A2>
97  static Result Perform(Impl* impl, const ::std::tuple<A0, A1, A2>& args) {
98  return impl->template gmock_PerformImpl<A0, A1, A2>(args,
99  std::get<0>(args), std::get<1>(args), std::get<2>(args),
102  }
103 
104  template <typename A0, typename A1, typename A2, typename A3>
105  static Result Perform(Impl* impl, const ::std::tuple<A0, A1, A2, A3>& args) {
106  return impl->template gmock_PerformImpl<A0, A1, A2, A3>(args,
107  std::get<0>(args), std::get<1>(args), std::get<2>(args),
108  std::get<3>(args), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(),
110  }
111 
112  template <typename A0, typename A1, typename A2, typename A3, typename A4>
113  static Result Perform(Impl* impl, const ::std::tuple<A0, A1, A2, A3,
114  A4>& args) {
115  return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4>(args,
116  std::get<0>(args), std::get<1>(args), std::get<2>(args),
117  std::get<3>(args), std::get<4>(args), ExcessiveArg(), ExcessiveArg(),
119  }
120 
121  template <typename A0, typename A1, typename A2, typename A3, typename A4,
122  typename A5>
123  static Result Perform(Impl* impl, const ::std::tuple<A0, A1, A2, A3, A4,
124  A5>& args) {
125  return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5>(args,
126  std::get<0>(args), std::get<1>(args), std::get<2>(args),
127  std::get<3>(args), std::get<4>(args), std::get<5>(args),
129  }
130 
131  template <typename A0, typename A1, typename A2, typename A3, typename A4,
132  typename A5, typename A6>
133  static Result Perform(Impl* impl, const ::std::tuple<A0, A1, A2, A3, A4, A5,
134  A6>& args) {
135  return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6>(args,
136  std::get<0>(args), std::get<1>(args), std::get<2>(args),
137  std::get<3>(args), std::get<4>(args), std::get<5>(args),
138  std::get<6>(args), ExcessiveArg(), ExcessiveArg(), ExcessiveArg());
139  }
140 
141  template <typename A0, typename A1, typename A2, typename A3, typename A4,
142  typename A5, typename A6, typename A7>
143  static Result Perform(Impl* impl, const ::std::tuple<A0, A1, A2, A3, A4, A5,
144  A6, A7>& args) {
145  return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6,
146  A7>(args, std::get<0>(args), std::get<1>(args), std::get<2>(args),
147  std::get<3>(args), std::get<4>(args), std::get<5>(args),
148  std::get<6>(args), std::get<7>(args), ExcessiveArg(), ExcessiveArg());
149  }
150 
151  template <typename A0, typename A1, typename A2, typename A3, typename A4,
152  typename A5, typename A6, typename A7, typename A8>
153  static Result Perform(Impl* impl, const ::std::tuple<A0, A1, A2, A3, A4, A5,
154  A6, A7, A8>& args) {
155  return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6, A7,
156  A8>(args, std::get<0>(args), std::get<1>(args), std::get<2>(args),
157  std::get<3>(args), std::get<4>(args), std::get<5>(args),
158  std::get<6>(args), std::get<7>(args), std::get<8>(args),
159  ExcessiveArg());
160  }
161 
162  template <typename A0, typename A1, typename A2, typename A3, typename A4,
163  typename A5, typename A6, typename A7, typename A8, typename A9>
164  static Result Perform(Impl* impl, const ::std::tuple<A0, A1, A2, A3, A4, A5,
165  A6, A7, A8, A9>& args) {
166  return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6, A7, A8,
167  A9>(args, std::get<0>(args), std::get<1>(args), std::get<2>(args),
168  std::get<3>(args), std::get<4>(args), std::get<5>(args),
169  std::get<6>(args), std::get<7>(args), std::get<8>(args),
170  std::get<9>(args));
171  }
172 };
173 
174 } // namespace internal
175 } // namespace testing
176 
177 // The ACTION* family of macros can be used in a namespace scope to
178 // define custom actions easily. The syntax:
179 //
180 // ACTION(name) { statements; }
181 //
182 // will define an action with the given name that executes the
183 // statements. The value returned by the statements will be used as
184 // the return value of the action. Inside the statements, you can
185 // refer to the K-th (0-based) argument of the mock function by
186 // 'argK', and refer to its type by 'argK_type'. For example:
187 //
188 // ACTION(IncrementArg1) {
189 // arg1_type temp = arg1;
190 // return ++(*temp);
191 // }
192 //
193 // allows you to write
194 //
195 // ...WillOnce(IncrementArg1());
196 //
197 // You can also refer to the entire argument tuple and its type by
198 // 'args' and 'args_type', and refer to the mock function type and its
199 // return type by 'function_type' and 'return_type'.
200 //
201 // Note that you don't need to specify the types of the mock function
202 // arguments. However rest assured that your code is still type-safe:
203 // you'll get a compiler error if *arg1 doesn't support the ++
204 // operator, or if the type of ++(*arg1) isn't compatible with the
205 // mock function's return type, for example.
206 //
207 // Sometimes you'll want to parameterize the action. For that you can use
208 // another macro:
209 //
210 // ACTION_P(name, param_name) { statements; }
211 //
212 // For example:
213 //
214 // ACTION_P(Add, n) { return arg0 + n; }
215 //
216 // will allow you to write:
217 //
218 // ...WillOnce(Add(5));
219 //
220 // Note that you don't need to provide the type of the parameter
221 // either. If you need to reference the type of a parameter named
222 // 'foo', you can write 'foo_type'. For example, in the body of
223 // ACTION_P(Add, n) above, you can write 'n_type' to refer to the type
224 // of 'n'.
225 //
226 // We also provide ACTION_P2, ACTION_P3, ..., up to ACTION_P10 to support
227 // multi-parameter actions.
228 //
229 // For the purpose of typing, you can view
230 //
231 // ACTION_Pk(Foo, p1, ..., pk) { ... }
232 //
233 // as shorthand for
234 //
235 // template <typename p1_type, ..., typename pk_type>
236 // FooActionPk<p1_type, ..., pk_type> Foo(p1_type p1, ..., pk_type pk) { ... }
237 //
238 // In particular, you can provide the template type arguments
239 // explicitly when invoking Foo(), as in Foo<long, bool>(5, false);
240 // although usually you can rely on the compiler to infer the types
241 // for you automatically. You can assign the result of expression
242 // Foo(p1, ..., pk) to a variable of type FooActionPk<p1_type, ...,
243 // pk_type>. This can be useful when composing actions.
244 //
245 // You can also overload actions with different numbers of parameters:
246 //
247 // ACTION_P(Plus, a) { ... }
248 // ACTION_P2(Plus, a, b) { ... }
249 //
250 // While it's tempting to always use the ACTION* macros when defining
251 // a new action, you should also consider implementing ActionInterface
252 // or using MakePolymorphicAction() instead, especially if you need to
253 // use the action a lot. While these approaches require more work,
254 // they give you more control on the types of the mock function
255 // arguments and the action parameters, which in general leads to
256 // better compiler error messages that pay off in the long run. They
257 // also allow overloading actions based on parameter types (as opposed
258 // to just based on the number of parameters).
259 //
260 // CAVEAT:
261 //
262 // ACTION*() can only be used in a namespace scope as templates cannot be
263 // declared inside of a local class.
264 // Users can, however, define any local functors (e.g. a lambda) that
265 // can be used as actions.
266 //
267 // MORE INFORMATION:
268 //
269 // To learn more about using these macros, please search for 'ACTION' on
270 // https://github.com/google/googletest/blob/master/googlemock/docs/cook_book.md
271 
272 // An internal macro needed for implementing ACTION*().
273 #define GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_\
274  const args_type& args GTEST_ATTRIBUTE_UNUSED_, \
275  const arg0_type& arg0 GTEST_ATTRIBUTE_UNUSED_, \
276  const arg1_type& arg1 GTEST_ATTRIBUTE_UNUSED_, \
277  const arg2_type& arg2 GTEST_ATTRIBUTE_UNUSED_, \
278  const arg3_type& arg3 GTEST_ATTRIBUTE_UNUSED_, \
279  const arg4_type& arg4 GTEST_ATTRIBUTE_UNUSED_, \
280  const arg5_type& arg5 GTEST_ATTRIBUTE_UNUSED_, \
281  const arg6_type& arg6 GTEST_ATTRIBUTE_UNUSED_, \
282  const arg7_type& arg7 GTEST_ATTRIBUTE_UNUSED_, \
283  const arg8_type& arg8 GTEST_ATTRIBUTE_UNUSED_, \
284  const arg9_type& arg9 GTEST_ATTRIBUTE_UNUSED_
285 
286 // Sometimes you want to give an action explicit template parameters
287 // that cannot be inferred from its value parameters. ACTION() and
288 // ACTION_P*() don't support that. ACTION_TEMPLATE() remedies that
289 // and can be viewed as an extension to ACTION() and ACTION_P*().
290 //
291 // The syntax:
292 //
293 // ACTION_TEMPLATE(ActionName,
294 // HAS_m_TEMPLATE_PARAMS(kind1, name1, ..., kind_m, name_m),
295 // AND_n_VALUE_PARAMS(p1, ..., p_n)) { statements; }
296 //
297 // defines an action template that takes m explicit template
298 // parameters and n value parameters. name_i is the name of the i-th
299 // template parameter, and kind_i specifies whether it's a typename,
300 // an integral constant, or a template. p_i is the name of the i-th
301 // value parameter.
302 //
303 // Example:
304 //
305 // // DuplicateArg<k, T>(output) converts the k-th argument of the mock
306 // // function to type T and copies it to *output.
307 // ACTION_TEMPLATE(DuplicateArg,
308 // HAS_2_TEMPLATE_PARAMS(int, k, typename, T),
309 // AND_1_VALUE_PARAMS(output)) {
310 // *output = T(::std::get<k>(args));
311 // }
312 // ...
313 // int n;
314 // EXPECT_CALL(mock, Foo(_, _))
315 // .WillOnce(DuplicateArg<1, unsigned char>(&n));
316 //
317 // To create an instance of an action template, write:
318 //
319 // ActionName<t1, ..., t_m>(v1, ..., v_n)
320 //
321 // where the ts are the template arguments and the vs are the value
322 // arguments. The value argument types are inferred by the compiler.
323 // If you want to explicitly specify the value argument types, you can
324 // provide additional template arguments:
325 //
326 // ActionName<t1, ..., t_m, u1, ..., u_k>(v1, ..., v_n)
327 //
328 // where u_i is the desired type of v_i.
329 //
330 // ACTION_TEMPLATE and ACTION/ACTION_P* can be overloaded on the
331 // number of value parameters, but not on the number of template
332 // parameters. Without the restriction, the meaning of the following
333 // is unclear:
334 //
335 // OverloadedAction<int, bool>(x);
336 //
337 // Are we using a single-template-parameter action where 'bool' refers
338 // to the type of x, or are we using a two-template-parameter action
339 // where the compiler is asked to infer the type of x?
340 //
341 // Implementation notes:
342 //
343 // GMOCK_INTERNAL_*_HAS_m_TEMPLATE_PARAMS and
344 // GMOCK_INTERNAL_*_AND_n_VALUE_PARAMS are internal macros for
345 // implementing ACTION_TEMPLATE. The main trick we use is to create
346 // new macro invocations when expanding a macro. For example, we have
347 //
348 // #define ACTION_TEMPLATE(name, template_params, value_params)
349 // ... GMOCK_INTERNAL_DECL_##template_params ...
350 //
351 // which causes ACTION_TEMPLATE(..., HAS_1_TEMPLATE_PARAMS(typename, T), ...)
352 // to expand to
353 //
354 // ... GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS(typename, T) ...
355 //
356 // Since GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS is a macro, the
357 // preprocessor will continue to expand it to
358 //
359 // ... typename T ...
360 //
361 // This technique conforms to the C++ standard and is portable. It
362 // allows us to implement action templates using O(N) code, where N is
363 // the maximum number of template/value parameters supported. Without
364 // using it, we'd have to devote O(N^2) amount of code to implement all
365 // combinations of m and n.
366 
367 // Declares the template parameters.
368 #define GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS(kind0, name0) kind0 name0
369 #define GMOCK_INTERNAL_DECL_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, \
370  name1) kind0 name0, kind1 name1
371 #define GMOCK_INTERNAL_DECL_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
372  kind2, name2) kind0 name0, kind1 name1, kind2 name2
373 #define GMOCK_INTERNAL_DECL_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
374  kind2, name2, kind3, name3) kind0 name0, kind1 name1, kind2 name2, \
375  kind3 name3
376 #define GMOCK_INTERNAL_DECL_HAS_5_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
377  kind2, name2, kind3, name3, kind4, name4) kind0 name0, kind1 name1, \
378  kind2 name2, kind3 name3, kind4 name4
379 #define GMOCK_INTERNAL_DECL_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
380  kind2, name2, kind3, name3, kind4, name4, kind5, name5) kind0 name0, \
381  kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5
382 #define GMOCK_INTERNAL_DECL_HAS_7_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
383  kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \
384  name6) kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, \
385  kind5 name5, kind6 name6
386 #define GMOCK_INTERNAL_DECL_HAS_8_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
387  kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \
388  kind7, name7) kind0 name0, kind1 name1, kind2 name2, kind3 name3, \
389  kind4 name4, kind5 name5, kind6 name6, kind7 name7
390 #define GMOCK_INTERNAL_DECL_HAS_9_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
391  kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \
392  kind7, name7, kind8, name8) kind0 name0, kind1 name1, kind2 name2, \
393  kind3 name3, kind4 name4, kind5 name5, kind6 name6, kind7 name7, \
394  kind8 name8
395 #define GMOCK_INTERNAL_DECL_HAS_10_TEMPLATE_PARAMS(kind0, name0, kind1, \
396  name1, kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \
397  name6, kind7, name7, kind8, name8, kind9, name9) kind0 name0, \
398  kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5, \
399  kind6 name6, kind7 name7, kind8 name8, kind9 name9
400 
401 // Lists the template parameters.
402 #define GMOCK_INTERNAL_LIST_HAS_1_TEMPLATE_PARAMS(kind0, name0) name0
403 #define GMOCK_INTERNAL_LIST_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, \
404  name1) name0, name1
405 #define GMOCK_INTERNAL_LIST_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
406  kind2, name2) name0, name1, name2
407 #define GMOCK_INTERNAL_LIST_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
408  kind2, name2, kind3, name3) name0, name1, name2, name3
409 #define GMOCK_INTERNAL_LIST_HAS_5_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
410  kind2, name2, kind3, name3, kind4, name4) name0, name1, name2, name3, \
411  name4
412 #define GMOCK_INTERNAL_LIST_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
413  kind2, name2, kind3, name3, kind4, name4, kind5, name5) name0, name1, \
414  name2, name3, name4, name5
415 #define GMOCK_INTERNAL_LIST_HAS_7_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
416  kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \
417  name6) name0, name1, name2, name3, name4, name5, name6
418 #define GMOCK_INTERNAL_LIST_HAS_8_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
419  kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \
420  kind7, name7) name0, name1, name2, name3, name4, name5, name6, name7
421 #define GMOCK_INTERNAL_LIST_HAS_9_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
422  kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \
423  kind7, name7, kind8, name8) name0, name1, name2, name3, name4, name5, \
424  name6, name7, name8
425 #define GMOCK_INTERNAL_LIST_HAS_10_TEMPLATE_PARAMS(kind0, name0, kind1, \
426  name1, kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \
427  name6, kind7, name7, kind8, name8, kind9, name9) name0, name1, name2, \
428  name3, name4, name5, name6, name7, name8, name9
429 
430 // Declares the types of value parameters.
431 #define GMOCK_INTERNAL_DECL_TYPE_AND_0_VALUE_PARAMS()
432 #define GMOCK_INTERNAL_DECL_TYPE_AND_1_VALUE_PARAMS(p0) , typename p0##_type
433 #define GMOCK_INTERNAL_DECL_TYPE_AND_2_VALUE_PARAMS(p0, p1) , \
434  typename p0##_type, typename p1##_type
435 #define GMOCK_INTERNAL_DECL_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) , \
436  typename p0##_type, typename p1##_type, typename p2##_type
437 #define GMOCK_INTERNAL_DECL_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) , \
438  typename p0##_type, typename p1##_type, typename p2##_type, \
439  typename p3##_type
440 #define GMOCK_INTERNAL_DECL_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) , \
441  typename p0##_type, typename p1##_type, typename p2##_type, \
442  typename p3##_type, typename p4##_type
443 #define GMOCK_INTERNAL_DECL_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) , \
444  typename p0##_type, typename p1##_type, typename p2##_type, \
445  typename p3##_type, typename p4##_type, typename p5##_type
446 #define GMOCK_INTERNAL_DECL_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
447  p6) , typename p0##_type, typename p1##_type, typename p2##_type, \
448  typename p3##_type, typename p4##_type, typename p5##_type, \
449  typename p6##_type
450 #define GMOCK_INTERNAL_DECL_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
451  p6, p7) , typename p0##_type, typename p1##_type, typename p2##_type, \
452  typename p3##_type, typename p4##_type, typename p5##_type, \
453  typename p6##_type, typename p7##_type
454 #define GMOCK_INTERNAL_DECL_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
455  p6, p7, p8) , typename p0##_type, typename p1##_type, typename p2##_type, \
456  typename p3##_type, typename p4##_type, typename p5##_type, \
457  typename p6##_type, typename p7##_type, typename p8##_type
458 #define GMOCK_INTERNAL_DECL_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
459  p6, p7, p8, p9) , typename p0##_type, typename p1##_type, \
460  typename p2##_type, typename p3##_type, typename p4##_type, \
461  typename p5##_type, typename p6##_type, typename p7##_type, \
462  typename p8##_type, typename p9##_type
463 
464 // Initializes the value parameters.
465 #define GMOCK_INTERNAL_INIT_AND_0_VALUE_PARAMS()\
466  ()
467 #define GMOCK_INTERNAL_INIT_AND_1_VALUE_PARAMS(p0)\
468  (p0##_type gmock_p0) : p0(::std::move(gmock_p0))
469 #define GMOCK_INTERNAL_INIT_AND_2_VALUE_PARAMS(p0, p1)\
470  (p0##_type gmock_p0, p1##_type gmock_p1) : p0(::std::move(gmock_p0)), \
471  p1(::std::move(gmock_p1))
472 #define GMOCK_INTERNAL_INIT_AND_3_VALUE_PARAMS(p0, p1, p2)\
473  (p0##_type gmock_p0, p1##_type gmock_p1, \
474  p2##_type gmock_p2) : p0(::std::move(gmock_p0)), \
475  p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2))
476 #define GMOCK_INTERNAL_INIT_AND_4_VALUE_PARAMS(p0, p1, p2, p3)\
477  (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
478  p3##_type gmock_p3) : p0(::std::move(gmock_p0)), \
479  p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \
480  p3(::std::move(gmock_p3))
481 #define GMOCK_INTERNAL_INIT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)\
482  (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
483  p3##_type gmock_p3, p4##_type gmock_p4) : p0(::std::move(gmock_p0)), \
484  p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \
485  p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4))
486 #define GMOCK_INTERNAL_INIT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)\
487  (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
488  p3##_type gmock_p3, p4##_type gmock_p4, \
489  p5##_type gmock_p5) : p0(::std::move(gmock_p0)), \
490  p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \
491  p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \
492  p5(::std::move(gmock_p5))
493 #define GMOCK_INTERNAL_INIT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)\
494  (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
495  p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
496  p6##_type gmock_p6) : p0(::std::move(gmock_p0)), \
497  p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \
498  p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \
499  p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6))
500 #define GMOCK_INTERNAL_INIT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)\
501  (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
502  p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
503  p6##_type gmock_p6, p7##_type gmock_p7) : p0(::std::move(gmock_p0)), \
504  p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \
505  p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \
506  p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)), \
507  p7(::std::move(gmock_p7))
508 #define GMOCK_INTERNAL_INIT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
509  p7, p8)\
510  (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
511  p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
512  p6##_type gmock_p6, p7##_type gmock_p7, \
513  p8##_type gmock_p8) : p0(::std::move(gmock_p0)), \
514  p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \
515  p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \
516  p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)), \
517  p7(::std::move(gmock_p7)), p8(::std::move(gmock_p8))
518 #define GMOCK_INTERNAL_INIT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
519  p7, p8, p9)\
520  (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
521  p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
522  p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \
523  p9##_type gmock_p9) : p0(::std::move(gmock_p0)), \
524  p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \
525  p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \
526  p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)), \
527  p7(::std::move(gmock_p7)), p8(::std::move(gmock_p8)), \
528  p9(::std::move(gmock_p9))
529 
530 // Declares the fields for storing the value parameters.
531 #define GMOCK_INTERNAL_DEFN_AND_0_VALUE_PARAMS()
532 #define GMOCK_INTERNAL_DEFN_AND_1_VALUE_PARAMS(p0) p0##_type p0;
533 #define GMOCK_INTERNAL_DEFN_AND_2_VALUE_PARAMS(p0, p1) p0##_type p0; \
534  p1##_type p1;
535 #define GMOCK_INTERNAL_DEFN_AND_3_VALUE_PARAMS(p0, p1, p2) p0##_type p0; \
536  p1##_type p1; p2##_type p2;
537 #define GMOCK_INTERNAL_DEFN_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0##_type p0; \
538  p1##_type p1; p2##_type p2; p3##_type p3;
539 #define GMOCK_INTERNAL_DEFN_AND_5_VALUE_PARAMS(p0, p1, p2, p3, \
540  p4) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4;
541 #define GMOCK_INTERNAL_DEFN_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, \
542  p5) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \
543  p5##_type p5;
544 #define GMOCK_INTERNAL_DEFN_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
545  p6) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \
546  p5##_type p5; p6##_type p6;
547 #define GMOCK_INTERNAL_DEFN_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
548  p7) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \
549  p5##_type p5; p6##_type p6; p7##_type p7;
550 #define GMOCK_INTERNAL_DEFN_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
551  p7, p8) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; \
552  p4##_type p4; p5##_type p5; p6##_type p6; p7##_type p7; p8##_type p8;
553 #define GMOCK_INTERNAL_DEFN_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
554  p7, p8, p9) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; \
555  p4##_type p4; p5##_type p5; p6##_type p6; p7##_type p7; p8##_type p8; \
556  p9##_type p9;
557 
558 // Lists the value parameters.
559 #define GMOCK_INTERNAL_LIST_AND_0_VALUE_PARAMS()
560 #define GMOCK_INTERNAL_LIST_AND_1_VALUE_PARAMS(p0) p0
561 #define GMOCK_INTERNAL_LIST_AND_2_VALUE_PARAMS(p0, p1) p0, p1
562 #define GMOCK_INTERNAL_LIST_AND_3_VALUE_PARAMS(p0, p1, p2) p0, p1, p2
563 #define GMOCK_INTERNAL_LIST_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0, p1, p2, p3
564 #define GMOCK_INTERNAL_LIST_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) p0, p1, \
565  p2, p3, p4
566 #define GMOCK_INTERNAL_LIST_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) p0, \
567  p1, p2, p3, p4, p5
568 #define GMOCK_INTERNAL_LIST_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
569  p6) p0, p1, p2, p3, p4, p5, p6
570 #define GMOCK_INTERNAL_LIST_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
571  p7) p0, p1, p2, p3, p4, p5, p6, p7
572 #define GMOCK_INTERNAL_LIST_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
573  p7, p8) p0, p1, p2, p3, p4, p5, p6, p7, p8
574 #define GMOCK_INTERNAL_LIST_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
575  p7, p8, p9) p0, p1, p2, p3, p4, p5, p6, p7, p8, p9
576 
577 // Lists the value parameter types.
578 #define GMOCK_INTERNAL_LIST_TYPE_AND_0_VALUE_PARAMS()
579 #define GMOCK_INTERNAL_LIST_TYPE_AND_1_VALUE_PARAMS(p0) , p0##_type
580 #define GMOCK_INTERNAL_LIST_TYPE_AND_2_VALUE_PARAMS(p0, p1) , p0##_type, \
581  p1##_type
582 #define GMOCK_INTERNAL_LIST_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) , p0##_type, \
583  p1##_type, p2##_type
584 #define GMOCK_INTERNAL_LIST_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) , \
585  p0##_type, p1##_type, p2##_type, p3##_type
586 #define GMOCK_INTERNAL_LIST_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) , \
587  p0##_type, p1##_type, p2##_type, p3##_type, p4##_type
588 #define GMOCK_INTERNAL_LIST_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) , \
589  p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type
590 #define GMOCK_INTERNAL_LIST_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
591  p6) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, \
592  p6##_type
593 #define GMOCK_INTERNAL_LIST_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
594  p6, p7) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
595  p5##_type, p6##_type, p7##_type
596 #define GMOCK_INTERNAL_LIST_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
597  p6, p7, p8) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
598  p5##_type, p6##_type, p7##_type, p8##_type
599 #define GMOCK_INTERNAL_LIST_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
600  p6, p7, p8, p9) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
601  p5##_type, p6##_type, p7##_type, p8##_type, p9##_type
602 
603 // Declares the value parameters.
604 #define GMOCK_INTERNAL_DECL_AND_0_VALUE_PARAMS()
605 #define GMOCK_INTERNAL_DECL_AND_1_VALUE_PARAMS(p0) p0##_type p0
606 #define GMOCK_INTERNAL_DECL_AND_2_VALUE_PARAMS(p0, p1) p0##_type p0, \
607  p1##_type p1
608 #define GMOCK_INTERNAL_DECL_AND_3_VALUE_PARAMS(p0, p1, p2) p0##_type p0, \
609  p1##_type p1, p2##_type p2
610 #define GMOCK_INTERNAL_DECL_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0##_type p0, \
611  p1##_type p1, p2##_type p2, p3##_type p3
612 #define GMOCK_INTERNAL_DECL_AND_5_VALUE_PARAMS(p0, p1, p2, p3, \
613  p4) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4
614 #define GMOCK_INTERNAL_DECL_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, \
615  p5) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \
616  p5##_type p5
617 #define GMOCK_INTERNAL_DECL_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
618  p6) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \
619  p5##_type p5, p6##_type p6
620 #define GMOCK_INTERNAL_DECL_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
621  p7) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \
622  p5##_type p5, p6##_type p6, p7##_type p7
623 #define GMOCK_INTERNAL_DECL_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
624  p7, p8) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \
625  p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8
626 #define GMOCK_INTERNAL_DECL_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
627  p7, p8, p9) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \
628  p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \
629  p9##_type p9
630 
631 // The suffix of the class template implementing the action template.
632 #define GMOCK_INTERNAL_COUNT_AND_0_VALUE_PARAMS()
633 #define GMOCK_INTERNAL_COUNT_AND_1_VALUE_PARAMS(p0) P
634 #define GMOCK_INTERNAL_COUNT_AND_2_VALUE_PARAMS(p0, p1) P2
635 #define GMOCK_INTERNAL_COUNT_AND_3_VALUE_PARAMS(p0, p1, p2) P3
636 #define GMOCK_INTERNAL_COUNT_AND_4_VALUE_PARAMS(p0, p1, p2, p3) P4
637 #define GMOCK_INTERNAL_COUNT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) P5
638 #define GMOCK_INTERNAL_COUNT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) P6
639 #define GMOCK_INTERNAL_COUNT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6) P7
640 #define GMOCK_INTERNAL_COUNT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
641  p7) P8
642 #define GMOCK_INTERNAL_COUNT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
643  p7, p8) P9
644 #define GMOCK_INTERNAL_COUNT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
645  p7, p8, p9) P10
646 
647 // The name of the class template implementing the action template.
648 #define GMOCK_ACTION_CLASS_(name, value_params)\
649  GTEST_CONCAT_TOKEN_(name##Action, GMOCK_INTERNAL_COUNT_##value_params)
650 
651 #define ACTION_TEMPLATE(name, template_params, value_params)\
652  template <GMOCK_INTERNAL_DECL_##template_params\
653  GMOCK_INTERNAL_DECL_TYPE_##value_params>\
654  class GMOCK_ACTION_CLASS_(name, value_params) {\
655  public:\
656  explicit GMOCK_ACTION_CLASS_(name, value_params)\
657  GMOCK_INTERNAL_INIT_##value_params {}\
658  template <typename F>\
659  class gmock_Impl : public ::testing::ActionInterface<F> {\
660  public:\
661  typedef F function_type;\
662  typedef typename ::testing::internal::Function<F>::Result return_type;\
663  typedef typename ::testing::internal::Function<F>::ArgumentTuple\
664  args_type;\
665  explicit gmock_Impl GMOCK_INTERNAL_INIT_##value_params {}\
666  virtual return_type Perform(const args_type& args) {\
667  return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
668  Perform(this, args);\
669  }\
670  template <typename arg0_type, typename arg1_type, typename arg2_type, \
671  typename arg3_type, typename arg4_type, typename arg5_type, \
672  typename arg6_type, typename arg7_type, typename arg8_type, \
673  typename arg9_type>\
674  return_type gmock_PerformImpl(const args_type& args, \
675  const arg0_type& arg0, const arg1_type& arg1, \
676  const arg2_type& arg2, const arg3_type& arg3, \
677  const arg4_type& arg4, const arg5_type& arg5, \
678  const arg6_type& arg6, const arg7_type& arg7, \
679  const arg8_type& arg8, const arg9_type& arg9) const;\
680  GMOCK_INTERNAL_DEFN_##value_params\
681  private:\
682  GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
683  };\
684  template <typename F> operator ::testing::Action<F>() const {\
685  return ::testing::Action<F>(\
686  new gmock_Impl<F>(GMOCK_INTERNAL_LIST_##value_params));\
687  }\
688  GMOCK_INTERNAL_DEFN_##value_params\
689  private:\
690  GTEST_DISALLOW_ASSIGN_(GMOCK_ACTION_CLASS_(name, value_params));\
691  };\
692  template <GMOCK_INTERNAL_DECL_##template_params\
693  GMOCK_INTERNAL_DECL_TYPE_##value_params>\
694  inline GMOCK_ACTION_CLASS_(name, value_params)<\
695  GMOCK_INTERNAL_LIST_##template_params\
696  GMOCK_INTERNAL_LIST_TYPE_##value_params> name(\
697  GMOCK_INTERNAL_DECL_##value_params) {\
698  return GMOCK_ACTION_CLASS_(name, value_params)<\
699  GMOCK_INTERNAL_LIST_##template_params\
700  GMOCK_INTERNAL_LIST_TYPE_##value_params>(\
701  GMOCK_INTERNAL_LIST_##value_params);\
702  }\
703  template <GMOCK_INTERNAL_DECL_##template_params\
704  GMOCK_INTERNAL_DECL_TYPE_##value_params>\
705  template <typename F>\
706  template <typename arg0_type, typename arg1_type, typename arg2_type, \
707  typename arg3_type, typename arg4_type, typename arg5_type, \
708  typename arg6_type, typename arg7_type, typename arg8_type, \
709  typename arg9_type>\
710  typename ::testing::internal::Function<F>::Result\
711  GMOCK_ACTION_CLASS_(name, value_params)<\
712  GMOCK_INTERNAL_LIST_##template_params\
713  GMOCK_INTERNAL_LIST_TYPE_##value_params>::gmock_Impl<F>::\
714  gmock_PerformImpl(\
715  GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
716 
717 #define ACTION(name)\
718  class name##Action {\
719  public:\
720  name##Action() {}\
721  template <typename F>\
722  class gmock_Impl : public ::testing::ActionInterface<F> {\
723  public:\
724  typedef F function_type;\
725  typedef typename ::testing::internal::Function<F>::Result return_type;\
726  typedef typename ::testing::internal::Function<F>::ArgumentTuple\
727  args_type;\
728  gmock_Impl() {}\
729  virtual return_type Perform(const args_type& args) {\
730  return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
731  Perform(this, args);\
732  }\
733  template <typename arg0_type, typename arg1_type, typename arg2_type, \
734  typename arg3_type, typename arg4_type, typename arg5_type, \
735  typename arg6_type, typename arg7_type, typename arg8_type, \
736  typename arg9_type>\
737  return_type gmock_PerformImpl(const args_type& args, \
738  const arg0_type& arg0, const arg1_type& arg1, \
739  const arg2_type& arg2, const arg3_type& arg3, \
740  const arg4_type& arg4, const arg5_type& arg5, \
741  const arg6_type& arg6, const arg7_type& arg7, \
742  const arg8_type& arg8, const arg9_type& arg9) const;\
743  private:\
744  GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
745  };\
746  template <typename F> operator ::testing::Action<F>() const {\
747  return ::testing::Action<F>(new gmock_Impl<F>());\
748  }\
749  private:\
750  GTEST_DISALLOW_ASSIGN_(name##Action);\
751  };\
752  inline name##Action name() {\
753  return name##Action();\
754  }\
755  template <typename F>\
756  template <typename arg0_type, typename arg1_type, typename arg2_type, \
757  typename arg3_type, typename arg4_type, typename arg5_type, \
758  typename arg6_type, typename arg7_type, typename arg8_type, \
759  typename arg9_type>\
760  typename ::testing::internal::Function<F>::Result\
761  name##Action::gmock_Impl<F>::gmock_PerformImpl(\
762  GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
763 
764 #define ACTION_P(name, p0)\
765  template <typename p0##_type>\
766  class name##ActionP {\
767  public:\
768  explicit name##ActionP(p0##_type gmock_p0) : \
769  p0(::std::forward<p0##_type>(gmock_p0)) {}\
770  template <typename F>\
771  class gmock_Impl : public ::testing::ActionInterface<F> {\
772  public:\
773  typedef F function_type;\
774  typedef typename ::testing::internal::Function<F>::Result return_type;\
775  typedef typename ::testing::internal::Function<F>::ArgumentTuple\
776  args_type;\
777  explicit gmock_Impl(p0##_type gmock_p0) : \
778  p0(::std::forward<p0##_type>(gmock_p0)) {}\
779  virtual return_type Perform(const args_type& args) {\
780  return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
781  Perform(this, args);\
782  }\
783  template <typename arg0_type, typename arg1_type, typename arg2_type, \
784  typename arg3_type, typename arg4_type, typename arg5_type, \
785  typename arg6_type, typename arg7_type, typename arg8_type, \
786  typename arg9_type>\
787  return_type gmock_PerformImpl(const args_type& args, \
788  const arg0_type& arg0, const arg1_type& arg1, \
789  const arg2_type& arg2, const arg3_type& arg3, \
790  const arg4_type& arg4, const arg5_type& arg5, \
791  const arg6_type& arg6, const arg7_type& arg7, \
792  const arg8_type& arg8, const arg9_type& arg9) const;\
793  p0##_type p0;\
794  private:\
795  GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
796  };\
797  template <typename F> operator ::testing::Action<F>() const {\
798  return ::testing::Action<F>(new gmock_Impl<F>(p0));\
799  }\
800  p0##_type p0;\
801  private:\
802  GTEST_DISALLOW_ASSIGN_(name##ActionP);\
803  };\
804  template <typename p0##_type>\
805  inline name##ActionP<p0##_type> name(p0##_type p0) {\
806  return name##ActionP<p0##_type>(p0);\
807  }\
808  template <typename p0##_type>\
809  template <typename F>\
810  template <typename arg0_type, typename arg1_type, typename arg2_type, \
811  typename arg3_type, typename arg4_type, typename arg5_type, \
812  typename arg6_type, typename arg7_type, typename arg8_type, \
813  typename arg9_type>\
814  typename ::testing::internal::Function<F>::Result\
815  name##ActionP<p0##_type>::gmock_Impl<F>::gmock_PerformImpl(\
816  GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
817 
818 #define ACTION_P2(name, p0, p1)\
819  template <typename p0##_type, typename p1##_type>\
820  class name##ActionP2 {\
821  public:\
822  name##ActionP2(p0##_type gmock_p0, \
823  p1##_type gmock_p1) : p0(::std::forward<p0##_type>(gmock_p0)), \
824  p1(::std::forward<p1##_type>(gmock_p1)) {}\
825  template <typename F>\
826  class gmock_Impl : public ::testing::ActionInterface<F> {\
827  public:\
828  typedef F function_type;\
829  typedef typename ::testing::internal::Function<F>::Result return_type;\
830  typedef typename ::testing::internal::Function<F>::ArgumentTuple\
831  args_type;\
832  gmock_Impl(p0##_type gmock_p0, \
833  p1##_type gmock_p1) : p0(::std::forward<p0##_type>(gmock_p0)), \
834  p1(::std::forward<p1##_type>(gmock_p1)) {}\
835  virtual return_type Perform(const args_type& args) {\
836  return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
837  Perform(this, args);\
838  }\
839  template <typename arg0_type, typename arg1_type, typename arg2_type, \
840  typename arg3_type, typename arg4_type, typename arg5_type, \
841  typename arg6_type, typename arg7_type, typename arg8_type, \
842  typename arg9_type>\
843  return_type gmock_PerformImpl(const args_type& args, \
844  const arg0_type& arg0, const arg1_type& arg1, \
845  const arg2_type& arg2, const arg3_type& arg3, \
846  const arg4_type& arg4, const arg5_type& arg5, \
847  const arg6_type& arg6, const arg7_type& arg7, \
848  const arg8_type& arg8, const arg9_type& arg9) const;\
849  p0##_type p0;\
850  p1##_type p1;\
851  private:\
852  GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
853  };\
854  template <typename F> operator ::testing::Action<F>() const {\
855  return ::testing::Action<F>(new gmock_Impl<F>(p0, p1));\
856  }\
857  p0##_type p0;\
858  p1##_type p1;\
859  private:\
860  GTEST_DISALLOW_ASSIGN_(name##ActionP2);\
861  };\
862  template <typename p0##_type, typename p1##_type>\
863  inline name##ActionP2<p0##_type, p1##_type> name(p0##_type p0, \
864  p1##_type p1) {\
865  return name##ActionP2<p0##_type, p1##_type>(p0, p1);\
866  }\
867  template <typename p0##_type, typename p1##_type>\
868  template <typename F>\
869  template <typename arg0_type, typename arg1_type, typename arg2_type, \
870  typename arg3_type, typename arg4_type, typename arg5_type, \
871  typename arg6_type, typename arg7_type, typename arg8_type, \
872  typename arg9_type>\
873  typename ::testing::internal::Function<F>::Result\
874  name##ActionP2<p0##_type, p1##_type>::gmock_Impl<F>::gmock_PerformImpl(\
875  GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
876 
877 #define ACTION_P3(name, p0, p1, p2)\
878  template <typename p0##_type, typename p1##_type, typename p2##_type>\
879  class name##ActionP3 {\
880  public:\
881  name##ActionP3(p0##_type gmock_p0, p1##_type gmock_p1, \
882  p2##_type gmock_p2) : p0(::std::forward<p0##_type>(gmock_p0)), \
883  p1(::std::forward<p1##_type>(gmock_p1)), \
884  p2(::std::forward<p2##_type>(gmock_p2)) {}\
885  template <typename F>\
886  class gmock_Impl : public ::testing::ActionInterface<F> {\
887  public:\
888  typedef F function_type;\
889  typedef typename ::testing::internal::Function<F>::Result return_type;\
890  typedef typename ::testing::internal::Function<F>::ArgumentTuple\
891  args_type;\
892  gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, \
893  p2##_type gmock_p2) : p0(::std::forward<p0##_type>(gmock_p0)), \
894  p1(::std::forward<p1##_type>(gmock_p1)), \
895  p2(::std::forward<p2##_type>(gmock_p2)) {}\
896  virtual return_type Perform(const args_type& args) {\
897  return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
898  Perform(this, args);\
899  }\
900  template <typename arg0_type, typename arg1_type, typename arg2_type, \
901  typename arg3_type, typename arg4_type, typename arg5_type, \
902  typename arg6_type, typename arg7_type, typename arg8_type, \
903  typename arg9_type>\
904  return_type gmock_PerformImpl(const args_type& args, \
905  const arg0_type& arg0, const arg1_type& arg1, \
906  const arg2_type& arg2, const arg3_type& arg3, \
907  const arg4_type& arg4, const arg5_type& arg5, \
908  const arg6_type& arg6, const arg7_type& arg7, \
909  const arg8_type& arg8, const arg9_type& arg9) const;\
910  p0##_type p0;\
911  p1##_type p1;\
912  p2##_type p2;\
913  private:\
914  GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
915  };\
916  template <typename F> operator ::testing::Action<F>() const {\
917  return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2));\
918  }\
919  p0##_type p0;\
920  p1##_type p1;\
921  p2##_type p2;\
922  private:\
923  GTEST_DISALLOW_ASSIGN_(name##ActionP3);\
924  };\
925  template <typename p0##_type, typename p1##_type, typename p2##_type>\
926  inline name##ActionP3<p0##_type, p1##_type, p2##_type> name(p0##_type p0, \
927  p1##_type p1, p2##_type p2) {\
928  return name##ActionP3<p0##_type, p1##_type, p2##_type>(p0, p1, p2);\
929  }\
930  template <typename p0##_type, typename p1##_type, typename p2##_type>\
931  template <typename F>\
932  template <typename arg0_type, typename arg1_type, typename arg2_type, \
933  typename arg3_type, typename arg4_type, typename arg5_type, \
934  typename arg6_type, typename arg7_type, typename arg8_type, \
935  typename arg9_type>\
936  typename ::testing::internal::Function<F>::Result\
937  name##ActionP3<p0##_type, p1##_type, \
938  p2##_type>::gmock_Impl<F>::gmock_PerformImpl(\
939  GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
940 
941 #define ACTION_P4(name, p0, p1, p2, p3)\
942  template <typename p0##_type, typename p1##_type, typename p2##_type, \
943  typename p3##_type>\
944  class name##ActionP4 {\
945  public:\
946  name##ActionP4(p0##_type gmock_p0, p1##_type gmock_p1, \
947  p2##_type gmock_p2, \
948  p3##_type gmock_p3) : p0(::std::forward<p0##_type>(gmock_p0)), \
949  p1(::std::forward<p1##_type>(gmock_p1)), \
950  p2(::std::forward<p2##_type>(gmock_p2)), \
951  p3(::std::forward<p3##_type>(gmock_p3)) {}\
952  template <typename F>\
953  class gmock_Impl : public ::testing::ActionInterface<F> {\
954  public:\
955  typedef F function_type;\
956  typedef typename ::testing::internal::Function<F>::Result return_type;\
957  typedef typename ::testing::internal::Function<F>::ArgumentTuple\
958  args_type;\
959  gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
960  p3##_type gmock_p3) : p0(::std::forward<p0##_type>(gmock_p0)), \
961  p1(::std::forward<p1##_type>(gmock_p1)), \
962  p2(::std::forward<p2##_type>(gmock_p2)), \
963  p3(::std::forward<p3##_type>(gmock_p3)) {}\
964  virtual return_type Perform(const args_type& args) {\
965  return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
966  Perform(this, args);\
967  }\
968  template <typename arg0_type, typename arg1_type, typename arg2_type, \
969  typename arg3_type, typename arg4_type, typename arg5_type, \
970  typename arg6_type, typename arg7_type, typename arg8_type, \
971  typename arg9_type>\
972  return_type gmock_PerformImpl(const args_type& args, \
973  const arg0_type& arg0, const arg1_type& arg1, \
974  const arg2_type& arg2, const arg3_type& arg3, \
975  const arg4_type& arg4, const arg5_type& arg5, \
976  const arg6_type& arg6, const arg7_type& arg7, \
977  const arg8_type& arg8, const arg9_type& arg9) const;\
978  p0##_type p0;\
979  p1##_type p1;\
980  p2##_type p2;\
981  p3##_type p3;\
982  private:\
983  GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
984  };\
985  template <typename F> operator ::testing::Action<F>() const {\
986  return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3));\
987  }\
988  p0##_type p0;\
989  p1##_type p1;\
990  p2##_type p2;\
991  p3##_type p3;\
992  private:\
993  GTEST_DISALLOW_ASSIGN_(name##ActionP4);\
994  };\
995  template <typename p0##_type, typename p1##_type, typename p2##_type, \
996  typename p3##_type>\
997  inline name##ActionP4<p0##_type, p1##_type, p2##_type, \
998  p3##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \
999  p3##_type p3) {\
1000  return name##ActionP4<p0##_type, p1##_type, p2##_type, p3##_type>(p0, p1, \
1001  p2, p3);\
1002  }\
1003  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1004  typename p3##_type>\
1005  template <typename F>\
1006  template <typename arg0_type, typename arg1_type, typename arg2_type, \
1007  typename arg3_type, typename arg4_type, typename arg5_type, \
1008  typename arg6_type, typename arg7_type, typename arg8_type, \
1009  typename arg9_type>\
1010  typename ::testing::internal::Function<F>::Result\
1011  name##ActionP4<p0##_type, p1##_type, p2##_type, \
1012  p3##_type>::gmock_Impl<F>::gmock_PerformImpl(\
1013  GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1014 
1015 #define ACTION_P5(name, p0, p1, p2, p3, p4)\
1016  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1017  typename p3##_type, typename p4##_type>\
1018  class name##ActionP5 {\
1019  public:\
1020  name##ActionP5(p0##_type gmock_p0, p1##_type gmock_p1, \
1021  p2##_type gmock_p2, p3##_type gmock_p3, \
1022  p4##_type gmock_p4) : p0(::std::forward<p0##_type>(gmock_p0)), \
1023  p1(::std::forward<p1##_type>(gmock_p1)), \
1024  p2(::std::forward<p2##_type>(gmock_p2)), \
1025  p3(::std::forward<p3##_type>(gmock_p3)), \
1026  p4(::std::forward<p4##_type>(gmock_p4)) {}\
1027  template <typename F>\
1028  class gmock_Impl : public ::testing::ActionInterface<F> {\
1029  public:\
1030  typedef F function_type;\
1031  typedef typename ::testing::internal::Function<F>::Result return_type;\
1032  typedef typename ::testing::internal::Function<F>::ArgumentTuple\
1033  args_type;\
1034  gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
1035  p3##_type gmock_p3, \
1036  p4##_type gmock_p4) : p0(::std::forward<p0##_type>(gmock_p0)), \
1037  p1(::std::forward<p1##_type>(gmock_p1)), \
1038  p2(::std::forward<p2##_type>(gmock_p2)), \
1039  p3(::std::forward<p3##_type>(gmock_p3)), \
1040  p4(::std::forward<p4##_type>(gmock_p4)) {}\
1041  virtual return_type Perform(const args_type& args) {\
1042  return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
1043  Perform(this, args);\
1044  }\
1045  template <typename arg0_type, typename arg1_type, typename arg2_type, \
1046  typename arg3_type, typename arg4_type, typename arg5_type, \
1047  typename arg6_type, typename arg7_type, typename arg8_type, \
1048  typename arg9_type>\
1049  return_type gmock_PerformImpl(const args_type& args, \
1050  const arg0_type& arg0, const arg1_type& arg1, \
1051  const arg2_type& arg2, const arg3_type& arg3, \
1052  const arg4_type& arg4, const arg5_type& arg5, \
1053  const arg6_type& arg6, const arg7_type& arg7, \
1054  const arg8_type& arg8, const arg9_type& arg9) const;\
1055  p0##_type p0;\
1056  p1##_type p1;\
1057  p2##_type p2;\
1058  p3##_type p3;\
1059  p4##_type p4;\
1060  private:\
1061  GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
1062  };\
1063  template <typename F> operator ::testing::Action<F>() const {\
1064  return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4));\
1065  }\
1066  p0##_type p0;\
1067  p1##_type p1;\
1068  p2##_type p2;\
1069  p3##_type p3;\
1070  p4##_type p4;\
1071  private:\
1072  GTEST_DISALLOW_ASSIGN_(name##ActionP5);\
1073  };\
1074  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1075  typename p3##_type, typename p4##_type>\
1076  inline name##ActionP5<p0##_type, p1##_type, p2##_type, p3##_type, \
1077  p4##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \
1078  p4##_type p4) {\
1079  return name##ActionP5<p0##_type, p1##_type, p2##_type, p3##_type, \
1080  p4##_type>(p0, p1, p2, p3, p4);\
1081  }\
1082  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1083  typename p3##_type, typename p4##_type>\
1084  template <typename F>\
1085  template <typename arg0_type, typename arg1_type, typename arg2_type, \
1086  typename arg3_type, typename arg4_type, typename arg5_type, \
1087  typename arg6_type, typename arg7_type, typename arg8_type, \
1088  typename arg9_type>\
1089  typename ::testing::internal::Function<F>::Result\
1090  name##ActionP5<p0##_type, p1##_type, p2##_type, p3##_type, \
1091  p4##_type>::gmock_Impl<F>::gmock_PerformImpl(\
1092  GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1093 
1094 #define ACTION_P6(name, p0, p1, p2, p3, p4, p5)\
1095  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1096  typename p3##_type, typename p4##_type, typename p5##_type>\
1097  class name##ActionP6 {\
1098  public:\
1099  name##ActionP6(p0##_type gmock_p0, p1##_type gmock_p1, \
1100  p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \
1101  p5##_type gmock_p5) : p0(::std::forward<p0##_type>(gmock_p0)), \
1102  p1(::std::forward<p1##_type>(gmock_p1)), \
1103  p2(::std::forward<p2##_type>(gmock_p2)), \
1104  p3(::std::forward<p3##_type>(gmock_p3)), \
1105  p4(::std::forward<p4##_type>(gmock_p4)), \
1106  p5(::std::forward<p5##_type>(gmock_p5)) {}\
1107  template <typename F>\
1108  class gmock_Impl : public ::testing::ActionInterface<F> {\
1109  public:\
1110  typedef F function_type;\
1111  typedef typename ::testing::internal::Function<F>::Result return_type;\
1112  typedef typename ::testing::internal::Function<F>::ArgumentTuple\
1113  args_type;\
1114  gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
1115  p3##_type gmock_p3, p4##_type gmock_p4, \
1116  p5##_type gmock_p5) : p0(::std::forward<p0##_type>(gmock_p0)), \
1117  p1(::std::forward<p1##_type>(gmock_p1)), \
1118  p2(::std::forward<p2##_type>(gmock_p2)), \
1119  p3(::std::forward<p3##_type>(gmock_p3)), \
1120  p4(::std::forward<p4##_type>(gmock_p4)), \
1121  p5(::std::forward<p5##_type>(gmock_p5)) {}\
1122  virtual return_type Perform(const args_type& args) {\
1123  return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
1124  Perform(this, args);\
1125  }\
1126  template <typename arg0_type, typename arg1_type, typename arg2_type, \
1127  typename arg3_type, typename arg4_type, typename arg5_type, \
1128  typename arg6_type, typename arg7_type, typename arg8_type, \
1129  typename arg9_type>\
1130  return_type gmock_PerformImpl(const args_type& args, \
1131  const arg0_type& arg0, const arg1_type& arg1, \
1132  const arg2_type& arg2, const arg3_type& arg3, \
1133  const arg4_type& arg4, const arg5_type& arg5, \
1134  const arg6_type& arg6, const arg7_type& arg7, \
1135  const arg8_type& arg8, const arg9_type& arg9) const;\
1136  p0##_type p0;\
1137  p1##_type p1;\
1138  p2##_type p2;\
1139  p3##_type p3;\
1140  p4##_type p4;\
1141  p5##_type p5;\
1142  private:\
1143  GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
1144  };\
1145  template <typename F> operator ::testing::Action<F>() const {\
1146  return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5));\
1147  }\
1148  p0##_type p0;\
1149  p1##_type p1;\
1150  p2##_type p2;\
1151  p3##_type p3;\
1152  p4##_type p4;\
1153  p5##_type p5;\
1154  private:\
1155  GTEST_DISALLOW_ASSIGN_(name##ActionP6);\
1156  };\
1157  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1158  typename p3##_type, typename p4##_type, typename p5##_type>\
1159  inline name##ActionP6<p0##_type, p1##_type, p2##_type, p3##_type, \
1160  p4##_type, p5##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \
1161  p3##_type p3, p4##_type p4, p5##_type p5) {\
1162  return name##ActionP6<p0##_type, p1##_type, p2##_type, p3##_type, \
1163  p4##_type, p5##_type>(p0, p1, p2, p3, p4, p5);\
1164  }\
1165  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1166  typename p3##_type, typename p4##_type, typename p5##_type>\
1167  template <typename F>\
1168  template <typename arg0_type, typename arg1_type, typename arg2_type, \
1169  typename arg3_type, typename arg4_type, typename arg5_type, \
1170  typename arg6_type, typename arg7_type, typename arg8_type, \
1171  typename arg9_type>\
1172  typename ::testing::internal::Function<F>::Result\
1173  name##ActionP6<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
1174  p5##_type>::gmock_Impl<F>::gmock_PerformImpl(\
1175  GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1176 
1177 #define ACTION_P7(name, p0, p1, p2, p3, p4, p5, p6)\
1178  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1179  typename p3##_type, typename p4##_type, typename p5##_type, \
1180  typename p6##_type>\
1181  class name##ActionP7 {\
1182  public:\
1183  name##ActionP7(p0##_type gmock_p0, p1##_type gmock_p1, \
1184  p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \
1185  p5##_type gmock_p5, \
1186  p6##_type gmock_p6) : p0(::std::forward<p0##_type>(gmock_p0)), \
1187  p1(::std::forward<p1##_type>(gmock_p1)), \
1188  p2(::std::forward<p2##_type>(gmock_p2)), \
1189  p3(::std::forward<p3##_type>(gmock_p3)), \
1190  p4(::std::forward<p4##_type>(gmock_p4)), \
1191  p5(::std::forward<p5##_type>(gmock_p5)), \
1192  p6(::std::forward<p6##_type>(gmock_p6)) {}\
1193  template <typename F>\
1194  class gmock_Impl : public ::testing::ActionInterface<F> {\
1195  public:\
1196  typedef F function_type;\
1197  typedef typename ::testing::internal::Function<F>::Result return_type;\
1198  typedef typename ::testing::internal::Function<F>::ArgumentTuple\
1199  args_type;\
1200  gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
1201  p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
1202  p6##_type gmock_p6) : p0(::std::forward<p0##_type>(gmock_p0)), \
1203  p1(::std::forward<p1##_type>(gmock_p1)), \
1204  p2(::std::forward<p2##_type>(gmock_p2)), \
1205  p3(::std::forward<p3##_type>(gmock_p3)), \
1206  p4(::std::forward<p4##_type>(gmock_p4)), \
1207  p5(::std::forward<p5##_type>(gmock_p5)), \
1208  p6(::std::forward<p6##_type>(gmock_p6)) {}\
1209  virtual return_type Perform(const args_type& args) {\
1210  return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
1211  Perform(this, args);\
1212  }\
1213  template <typename arg0_type, typename arg1_type, typename arg2_type, \
1214  typename arg3_type, typename arg4_type, typename arg5_type, \
1215  typename arg6_type, typename arg7_type, typename arg8_type, \
1216  typename arg9_type>\
1217  return_type gmock_PerformImpl(const args_type& args, \
1218  const arg0_type& arg0, const arg1_type& arg1, \
1219  const arg2_type& arg2, const arg3_type& arg3, \
1220  const arg4_type& arg4, const arg5_type& arg5, \
1221  const arg6_type& arg6, const arg7_type& arg7, \
1222  const arg8_type& arg8, const arg9_type& arg9) const;\
1223  p0##_type p0;\
1224  p1##_type p1;\
1225  p2##_type p2;\
1226  p3##_type p3;\
1227  p4##_type p4;\
1228  p5##_type p5;\
1229  p6##_type p6;\
1230  private:\
1231  GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
1232  };\
1233  template <typename F> operator ::testing::Action<F>() const {\
1234  return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \
1235  p6));\
1236  }\
1237  p0##_type p0;\
1238  p1##_type p1;\
1239  p2##_type p2;\
1240  p3##_type p3;\
1241  p4##_type p4;\
1242  p5##_type p5;\
1243  p6##_type p6;\
1244  private:\
1245  GTEST_DISALLOW_ASSIGN_(name##ActionP7);\
1246  };\
1247  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1248  typename p3##_type, typename p4##_type, typename p5##_type, \
1249  typename p6##_type>\
1250  inline name##ActionP7<p0##_type, p1##_type, p2##_type, p3##_type, \
1251  p4##_type, p5##_type, p6##_type> name(p0##_type p0, p1##_type p1, \
1252  p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \
1253  p6##_type p6) {\
1254  return name##ActionP7<p0##_type, p1##_type, p2##_type, p3##_type, \
1255  p4##_type, p5##_type, p6##_type>(p0, p1, p2, p3, p4, p5, p6);\
1256  }\
1257  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1258  typename p3##_type, typename p4##_type, typename p5##_type, \
1259  typename p6##_type>\
1260  template <typename F>\
1261  template <typename arg0_type, typename arg1_type, typename arg2_type, \
1262  typename arg3_type, typename arg4_type, typename arg5_type, \
1263  typename arg6_type, typename arg7_type, typename arg8_type, \
1264  typename arg9_type>\
1265  typename ::testing::internal::Function<F>::Result\
1266  name##ActionP7<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
1267  p5##_type, p6##_type>::gmock_Impl<F>::gmock_PerformImpl(\
1268  GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1269 
1270 #define ACTION_P8(name, p0, p1, p2, p3, p4, p5, p6, p7)\
1271  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1272  typename p3##_type, typename p4##_type, typename p5##_type, \
1273  typename p6##_type, typename p7##_type>\
1274  class name##ActionP8 {\
1275  public:\
1276  name##ActionP8(p0##_type gmock_p0, p1##_type gmock_p1, \
1277  p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \
1278  p5##_type gmock_p5, p6##_type gmock_p6, \
1279  p7##_type gmock_p7) : p0(::std::forward<p0##_type>(gmock_p0)), \
1280  p1(::std::forward<p1##_type>(gmock_p1)), \
1281  p2(::std::forward<p2##_type>(gmock_p2)), \
1282  p3(::std::forward<p3##_type>(gmock_p3)), \
1283  p4(::std::forward<p4##_type>(gmock_p4)), \
1284  p5(::std::forward<p5##_type>(gmock_p5)), \
1285  p6(::std::forward<p6##_type>(gmock_p6)), \
1286  p7(::std::forward<p7##_type>(gmock_p7)) {}\
1287  template <typename F>\
1288  class gmock_Impl : public ::testing::ActionInterface<F> {\
1289  public:\
1290  typedef F function_type;\
1291  typedef typename ::testing::internal::Function<F>::Result return_type;\
1292  typedef typename ::testing::internal::Function<F>::ArgumentTuple\
1293  args_type;\
1294  gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
1295  p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
1296  p6##_type gmock_p6, \
1297  p7##_type gmock_p7) : p0(::std::forward<p0##_type>(gmock_p0)), \
1298  p1(::std::forward<p1##_type>(gmock_p1)), \
1299  p2(::std::forward<p2##_type>(gmock_p2)), \
1300  p3(::std::forward<p3##_type>(gmock_p3)), \
1301  p4(::std::forward<p4##_type>(gmock_p4)), \
1302  p5(::std::forward<p5##_type>(gmock_p5)), \
1303  p6(::std::forward<p6##_type>(gmock_p6)), \
1304  p7(::std::forward<p7##_type>(gmock_p7)) {}\
1305  virtual return_type Perform(const args_type& args) {\
1306  return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
1307  Perform(this, args);\
1308  }\
1309  template <typename arg0_type, typename arg1_type, typename arg2_type, \
1310  typename arg3_type, typename arg4_type, typename arg5_type, \
1311  typename arg6_type, typename arg7_type, typename arg8_type, \
1312  typename arg9_type>\
1313  return_type gmock_PerformImpl(const args_type& args, \
1314  const arg0_type& arg0, const arg1_type& arg1, \
1315  const arg2_type& arg2, const arg3_type& arg3, \
1316  const arg4_type& arg4, const arg5_type& arg5, \
1317  const arg6_type& arg6, const arg7_type& arg7, \
1318  const arg8_type& arg8, const arg9_type& arg9) const;\
1319  p0##_type p0;\
1320  p1##_type p1;\
1321  p2##_type p2;\
1322  p3##_type p3;\
1323  p4##_type p4;\
1324  p5##_type p5;\
1325  p6##_type p6;\
1326  p7##_type p7;\
1327  private:\
1328  GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
1329  };\
1330  template <typename F> operator ::testing::Action<F>() const {\
1331  return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \
1332  p6, p7));\
1333  }\
1334  p0##_type p0;\
1335  p1##_type p1;\
1336  p2##_type p2;\
1337  p3##_type p3;\
1338  p4##_type p4;\
1339  p5##_type p5;\
1340  p6##_type p6;\
1341  p7##_type p7;\
1342  private:\
1343  GTEST_DISALLOW_ASSIGN_(name##ActionP8);\
1344  };\
1345  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1346  typename p3##_type, typename p4##_type, typename p5##_type, \
1347  typename p6##_type, typename p7##_type>\
1348  inline name##ActionP8<p0##_type, p1##_type, p2##_type, p3##_type, \
1349  p4##_type, p5##_type, p6##_type, p7##_type> name(p0##_type p0, \
1350  p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \
1351  p6##_type p6, p7##_type p7) {\
1352  return name##ActionP8<p0##_type, p1##_type, p2##_type, p3##_type, \
1353  p4##_type, p5##_type, p6##_type, p7##_type>(p0, p1, p2, p3, p4, p5, \
1354  p6, p7);\
1355  }\
1356  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1357  typename p3##_type, typename p4##_type, typename p5##_type, \
1358  typename p6##_type, typename p7##_type>\
1359  template <typename F>\
1360  template <typename arg0_type, typename arg1_type, typename arg2_type, \
1361  typename arg3_type, typename arg4_type, typename arg5_type, \
1362  typename arg6_type, typename arg7_type, typename arg8_type, \
1363  typename arg9_type>\
1364  typename ::testing::internal::Function<F>::Result\
1365  name##ActionP8<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
1366  p5##_type, p6##_type, \
1367  p7##_type>::gmock_Impl<F>::gmock_PerformImpl(\
1368  GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1369 
1370 #define ACTION_P9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8)\
1371  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1372  typename p3##_type, typename p4##_type, typename p5##_type, \
1373  typename p6##_type, typename p7##_type, typename p8##_type>\
1374  class name##ActionP9 {\
1375  public:\
1376  name##ActionP9(p0##_type gmock_p0, p1##_type gmock_p1, \
1377  p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \
1378  p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \
1379  p8##_type gmock_p8) : p0(::std::forward<p0##_type>(gmock_p0)), \
1380  p1(::std::forward<p1##_type>(gmock_p1)), \
1381  p2(::std::forward<p2##_type>(gmock_p2)), \
1382  p3(::std::forward<p3##_type>(gmock_p3)), \
1383  p4(::std::forward<p4##_type>(gmock_p4)), \
1384  p5(::std::forward<p5##_type>(gmock_p5)), \
1385  p6(::std::forward<p6##_type>(gmock_p6)), \
1386  p7(::std::forward<p7##_type>(gmock_p7)), \
1387  p8(::std::forward<p8##_type>(gmock_p8)) {}\
1388  template <typename F>\
1389  class gmock_Impl : public ::testing::ActionInterface<F> {\
1390  public:\
1391  typedef F function_type;\
1392  typedef typename ::testing::internal::Function<F>::Result return_type;\
1393  typedef typename ::testing::internal::Function<F>::ArgumentTuple\
1394  args_type;\
1395  gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
1396  p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
1397  p6##_type gmock_p6, p7##_type gmock_p7, \
1398  p8##_type gmock_p8) : p0(::std::forward<p0##_type>(gmock_p0)), \
1399  p1(::std::forward<p1##_type>(gmock_p1)), \
1400  p2(::std::forward<p2##_type>(gmock_p2)), \
1401  p3(::std::forward<p3##_type>(gmock_p3)), \
1402  p4(::std::forward<p4##_type>(gmock_p4)), \
1403  p5(::std::forward<p5##_type>(gmock_p5)), \
1404  p6(::std::forward<p6##_type>(gmock_p6)), \
1405  p7(::std::forward<p7##_type>(gmock_p7)), \
1406  p8(::std::forward<p8##_type>(gmock_p8)) {}\
1407  virtual return_type Perform(const args_type& args) {\
1408  return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
1409  Perform(this, args);\
1410  }\
1411  template <typename arg0_type, typename arg1_type, typename arg2_type, \
1412  typename arg3_type, typename arg4_type, typename arg5_type, \
1413  typename arg6_type, typename arg7_type, typename arg8_type, \
1414  typename arg9_type>\
1415  return_type gmock_PerformImpl(const args_type& args, \
1416  const arg0_type& arg0, const arg1_type& arg1, \
1417  const arg2_type& arg2, const arg3_type& arg3, \
1418  const arg4_type& arg4, const arg5_type& arg5, \
1419  const arg6_type& arg6, const arg7_type& arg7, \
1420  const arg8_type& arg8, const arg9_type& arg9) const;\
1421  p0##_type p0;\
1422  p1##_type p1;\
1423  p2##_type p2;\
1424  p3##_type p3;\
1425  p4##_type p4;\
1426  p5##_type p5;\
1427  p6##_type p6;\
1428  p7##_type p7;\
1429  p8##_type p8;\
1430  private:\
1431  GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
1432  };\
1433  template <typename F> operator ::testing::Action<F>() const {\
1434  return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \
1435  p6, p7, p8));\
1436  }\
1437  p0##_type p0;\
1438  p1##_type p1;\
1439  p2##_type p2;\
1440  p3##_type p3;\
1441  p4##_type p4;\
1442  p5##_type p5;\
1443  p6##_type p6;\
1444  p7##_type p7;\
1445  p8##_type p8;\
1446  private:\
1447  GTEST_DISALLOW_ASSIGN_(name##ActionP9);\
1448  };\
1449  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1450  typename p3##_type, typename p4##_type, typename p5##_type, \
1451  typename p6##_type, typename p7##_type, typename p8##_type>\
1452  inline name##ActionP9<p0##_type, p1##_type, p2##_type, p3##_type, \
1453  p4##_type, p5##_type, p6##_type, p7##_type, \
1454  p8##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \
1455  p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, \
1456  p8##_type p8) {\
1457  return name##ActionP9<p0##_type, p1##_type, p2##_type, p3##_type, \
1458  p4##_type, p5##_type, p6##_type, p7##_type, p8##_type>(p0, p1, p2, \
1459  p3, p4, p5, p6, p7, p8);\
1460  }\
1461  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1462  typename p3##_type, typename p4##_type, typename p5##_type, \
1463  typename p6##_type, typename p7##_type, typename p8##_type>\
1464  template <typename F>\
1465  template <typename arg0_type, typename arg1_type, typename arg2_type, \
1466  typename arg3_type, typename arg4_type, typename arg5_type, \
1467  typename arg6_type, typename arg7_type, typename arg8_type, \
1468  typename arg9_type>\
1469  typename ::testing::internal::Function<F>::Result\
1470  name##ActionP9<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
1471  p5##_type, p6##_type, p7##_type, \
1472  p8##_type>::gmock_Impl<F>::gmock_PerformImpl(\
1473  GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1474 
1475 #define ACTION_P10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)\
1476  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1477  typename p3##_type, typename p4##_type, typename p5##_type, \
1478  typename p6##_type, typename p7##_type, typename p8##_type, \
1479  typename p9##_type>\
1480  class name##ActionP10 {\
1481  public:\
1482  name##ActionP10(p0##_type gmock_p0, p1##_type gmock_p1, \
1483  p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \
1484  p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \
1485  p8##_type gmock_p8, \
1486  p9##_type gmock_p9) : p0(::std::forward<p0##_type>(gmock_p0)), \
1487  p1(::std::forward<p1##_type>(gmock_p1)), \
1488  p2(::std::forward<p2##_type>(gmock_p2)), \
1489  p3(::std::forward<p3##_type>(gmock_p3)), \
1490  p4(::std::forward<p4##_type>(gmock_p4)), \
1491  p5(::std::forward<p5##_type>(gmock_p5)), \
1492  p6(::std::forward<p6##_type>(gmock_p6)), \
1493  p7(::std::forward<p7##_type>(gmock_p7)), \
1494  p8(::std::forward<p8##_type>(gmock_p8)), \
1495  p9(::std::forward<p9##_type>(gmock_p9)) {}\
1496  template <typename F>\
1497  class gmock_Impl : public ::testing::ActionInterface<F> {\
1498  public:\
1499  typedef F function_type;\
1500  typedef typename ::testing::internal::Function<F>::Result return_type;\
1501  typedef typename ::testing::internal::Function<F>::ArgumentTuple\
1502  args_type;\
1503  gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
1504  p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
1505  p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \
1506  p9##_type gmock_p9) : p0(::std::forward<p0##_type>(gmock_p0)), \
1507  p1(::std::forward<p1##_type>(gmock_p1)), \
1508  p2(::std::forward<p2##_type>(gmock_p2)), \
1509  p3(::std::forward<p3##_type>(gmock_p3)), \
1510  p4(::std::forward<p4##_type>(gmock_p4)), \
1511  p5(::std::forward<p5##_type>(gmock_p5)), \
1512  p6(::std::forward<p6##_type>(gmock_p6)), \
1513  p7(::std::forward<p7##_type>(gmock_p7)), \
1514  p8(::std::forward<p8##_type>(gmock_p8)), \
1515  p9(::std::forward<p9##_type>(gmock_p9)) {}\
1516  virtual return_type Perform(const args_type& args) {\
1517  return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
1518  Perform(this, args);\
1519  }\
1520  template <typename arg0_type, typename arg1_type, typename arg2_type, \
1521  typename arg3_type, typename arg4_type, typename arg5_type, \
1522  typename arg6_type, typename arg7_type, typename arg8_type, \
1523  typename arg9_type>\
1524  return_type gmock_PerformImpl(const args_type& args, \
1525  const arg0_type& arg0, const arg1_type& arg1, \
1526  const arg2_type& arg2, const arg3_type& arg3, \
1527  const arg4_type& arg4, const arg5_type& arg5, \
1528  const arg6_type& arg6, const arg7_type& arg7, \
1529  const arg8_type& arg8, const arg9_type& arg9) const;\
1530  p0##_type p0;\
1531  p1##_type p1;\
1532  p2##_type p2;\
1533  p3##_type p3;\
1534  p4##_type p4;\
1535  p5##_type p5;\
1536  p6##_type p6;\
1537  p7##_type p7;\
1538  p8##_type p8;\
1539  p9##_type p9;\
1540  private:\
1541  GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
1542  };\
1543  template <typename F> operator ::testing::Action<F>() const {\
1544  return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \
1545  p6, p7, p8, p9));\
1546  }\
1547  p0##_type p0;\
1548  p1##_type p1;\
1549  p2##_type p2;\
1550  p3##_type p3;\
1551  p4##_type p4;\
1552  p5##_type p5;\
1553  p6##_type p6;\
1554  p7##_type p7;\
1555  p8##_type p8;\
1556  p9##_type p9;\
1557  private:\
1558  GTEST_DISALLOW_ASSIGN_(name##ActionP10);\
1559  };\
1560  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1561  typename p3##_type, typename p4##_type, typename p5##_type, \
1562  typename p6##_type, typename p7##_type, typename p8##_type, \
1563  typename p9##_type>\
1564  inline name##ActionP10<p0##_type, p1##_type, p2##_type, p3##_type, \
1565  p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \
1566  p9##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \
1567  p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \
1568  p9##_type p9) {\
1569  return name##ActionP10<p0##_type, p1##_type, p2##_type, p3##_type, \
1570  p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, p9##_type>(p0, \
1571  p1, p2, p3, p4, p5, p6, p7, p8, p9);\
1572  }\
1573  template <typename p0##_type, typename p1##_type, typename p2##_type, \
1574  typename p3##_type, typename p4##_type, typename p5##_type, \
1575  typename p6##_type, typename p7##_type, typename p8##_type, \
1576  typename p9##_type>\
1577  template <typename F>\
1578  template <typename arg0_type, typename arg1_type, typename arg2_type, \
1579  typename arg3_type, typename arg4_type, typename arg5_type, \
1580  typename arg6_type, typename arg7_type, typename arg8_type, \
1581  typename arg9_type>\
1582  typename ::testing::internal::Function<F>::Result\
1583  name##ActionP10<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
1584  p5##_type, p6##_type, p7##_type, p8##_type, \
1585  p9##_type>::gmock_Impl<F>::gmock_PerformImpl(\
1586  GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1587 
1588 namespace testing {
1589 
1590 
1591 // The ACTION*() macros trigger warning C4100 (unreferenced formal
1592 // parameter) in MSVC with -W4. Unfortunately they cannot be fixed in
1593 // the macro definition, as the warnings are generated when the macro
1594 // is expanded and macro expansion cannot contain #pragma. Therefore
1595 // we suppress them here.
1596 #ifdef _MSC_VER
1597 # pragma warning(push)
1598 # pragma warning(disable:4100)
1599 #endif
1600 
1601 // Various overloads for InvokeArgument<N>().
1602 //
1603 // The InvokeArgument<N>(a1, a2, ..., a_k) action invokes the N-th
1604 // (0-based) argument, which must be a k-ary callable, of the mock
1605 // function, with arguments a1, a2, ..., a_k.
1606 //
1607 // Notes:
1608 //
1609 // 1. The arguments are passed by value by default. If you need to
1610 // pass an argument by reference, wrap it inside ByRef(). For
1611 // example,
1612 //
1613 // InvokeArgument<1>(5, string("Hello"), ByRef(foo))
1614 //
1615 // passes 5 and string("Hello") by value, and passes foo by
1616 // reference.
1617 //
1618 // 2. If the callable takes an argument by reference but ByRef() is
1619 // not used, it will receive the reference to a copy of the value,
1620 // instead of the original value. For example, when the 0-th
1621 // argument of the mock function takes a const string&, the action
1622 //
1623 // InvokeArgument<0>(string("Hello"))
1624 //
1625 // makes a copy of the temporary string("Hello") object and passes a
1626 // reference of the copy, instead of the original temporary object,
1627 // to the callable. This makes it easy for a user to define an
1628 // InvokeArgument action from temporary values and have it performed
1629 // later.
1630 
1631 namespace internal {
1632 namespace invoke_argument {
1633 
1634 // Appears in InvokeArgumentAdl's argument list to help avoid
1635 // accidental calls to user functions of the same name.
1636 struct AdlTag {};
1637 
1638 // InvokeArgumentAdl - a helper for InvokeArgument.
1639 // The basic overloads are provided here for generic functors.
1640 // Overloads for other custom-callables are provided in the
1641 // internal/custom/callback-actions.h header.
1642 
1643 template <typename R, typename F>
1645  return f();
1646 }
1647 template <typename R, typename F, typename A1>
1649  return f(a1);
1650 }
1651 template <typename R, typename F, typename A1, typename A2>
1652 R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2) {
1653  return f(a1, a2);
1654 }
1655 template <typename R, typename F, typename A1, typename A2, typename A3>
1656 R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3) {
1657  return f(a1, a2, a3);
1658 }
1659 template <typename R, typename F, typename A1, typename A2, typename A3,
1660  typename A4>
1661 R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4) {
1662  return f(a1, a2, a3, a4);
1663 }
1664 template <typename R, typename F, typename A1, typename A2, typename A3,
1665  typename A4, typename A5>
1666 R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) {
1667  return f(a1, a2, a3, a4, a5);
1668 }
1669 template <typename R, typename F, typename A1, typename A2, typename A3,
1670  typename A4, typename A5, typename A6>
1671 R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) {
1672  return f(a1, a2, a3, a4, a5, a6);
1673 }
1674 template <typename R, typename F, typename A1, typename A2, typename A3,
1675  typename A4, typename A5, typename A6, typename A7>
1676 R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6,
1677  A7 a7) {
1678  return f(a1, a2, a3, a4, a5, a6, a7);
1679 }
1680 template <typename R, typename F, typename A1, typename A2, typename A3,
1681  typename A4, typename A5, typename A6, typename A7, typename A8>
1682 R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6,
1683  A7 a7, A8 a8) {
1684  return f(a1, a2, a3, a4, a5, a6, a7, a8);
1685 }
1686 template <typename R, typename F, typename A1, typename A2, typename A3,
1687  typename A4, typename A5, typename A6, typename A7, typename A8,
1688  typename A9>
1689 R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6,
1690  A7 a7, A8 a8, A9 a9) {
1691  return f(a1, a2, a3, a4, a5, a6, a7, a8, a9);
1692 }
1693 template <typename R, typename F, typename A1, typename A2, typename A3,
1694  typename A4, typename A5, typename A6, typename A7, typename A8,
1695  typename A9, typename A10>
1696 R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6,
1697  A7 a7, A8 a8, A9 a9, A10 a10) {
1698  return f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
1699 }
1700 } // namespace invoke_argument
1701 } // namespace internal
1702 
1704  HAS_1_TEMPLATE_PARAMS(int, k),
1705  AND_0_VALUE_PARAMS()) {
1707  return InvokeArgumentAdl<return_type>(
1709  ::std::get<k>(args));
1710 }
1711 
1713  HAS_1_TEMPLATE_PARAMS(int, k),
1714  AND_1_VALUE_PARAMS(p0)) {
1716  return InvokeArgumentAdl<return_type>(
1718  ::std::get<k>(args), p0);
1719 }
1720 
1722  HAS_1_TEMPLATE_PARAMS(int, k),
1723  AND_2_VALUE_PARAMS(p0, p1)) {
1725  return InvokeArgumentAdl<return_type>(
1727  ::std::get<k>(args), p0, p1);
1728 }
1729 
1731  HAS_1_TEMPLATE_PARAMS(int, k),
1732  AND_3_VALUE_PARAMS(p0, p1, p2)) {
1734  return InvokeArgumentAdl<return_type>(
1736  ::std::get<k>(args), p0, p1, p2);
1737 }
1738 
1740  HAS_1_TEMPLATE_PARAMS(int, k),
1741  AND_4_VALUE_PARAMS(p0, p1, p2, p3)) {
1743  return InvokeArgumentAdl<return_type>(
1745  ::std::get<k>(args), p0, p1, p2, p3);
1746 }
1747 
1749  HAS_1_TEMPLATE_PARAMS(int, k),
1750  AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)) {
1752  return InvokeArgumentAdl<return_type>(
1754  ::std::get<k>(args), p0, p1, p2, p3, p4);
1755 }
1756 
1758  HAS_1_TEMPLATE_PARAMS(int, k),
1759  AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)) {
1761  return InvokeArgumentAdl<return_type>(
1763  ::std::get<k>(args), p0, p1, p2, p3, p4, p5);
1764 }
1765 
1767  HAS_1_TEMPLATE_PARAMS(int, k),
1768  AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)) {
1770  return InvokeArgumentAdl<return_type>(
1772  ::std::get<k>(args), p0, p1, p2, p3, p4, p5, p6);
1773 }
1774 
1776  HAS_1_TEMPLATE_PARAMS(int, k),
1777  AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)) {
1779  return InvokeArgumentAdl<return_type>(
1781  ::std::get<k>(args), p0, p1, p2, p3, p4, p5, p6, p7);
1782 }
1783 
1785  HAS_1_TEMPLATE_PARAMS(int, k),
1786  AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8)) {
1788  return InvokeArgumentAdl<return_type>(
1790  ::std::get<k>(args), p0, p1, p2, p3, p4, p5, p6, p7, p8);
1791 }
1792 
1794  HAS_1_TEMPLATE_PARAMS(int, k),
1795  AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) {
1797  return InvokeArgumentAdl<return_type>(
1799  ::std::get<k>(args), p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
1800 }
1801 
1802 // Various overloads for ReturnNew<T>().
1803 //
1804 // The ReturnNew<T>(a1, a2, ..., a_k) action returns a pointer to a new
1805 // instance of type T, constructed on the heap with constructor arguments
1806 // a1, a2, ..., and a_k. The caller assumes ownership of the returned value.
1808  HAS_1_TEMPLATE_PARAMS(typename, T),
1809  AND_0_VALUE_PARAMS()) {
1810  return new T();
1811 }
1812 
1814  HAS_1_TEMPLATE_PARAMS(typename, T),
1815  AND_1_VALUE_PARAMS(p0)) {
1816  return new T(p0);
1817 }
1818 
1820  HAS_1_TEMPLATE_PARAMS(typename, T),
1821  AND_2_VALUE_PARAMS(p0, p1)) {
1822  return new T(p0, p1);
1823 }
1824 
1826  HAS_1_TEMPLATE_PARAMS(typename, T),
1827  AND_3_VALUE_PARAMS(p0, p1, p2)) {
1828  return new T(p0, p1, p2);
1829 }
1830 
1832  HAS_1_TEMPLATE_PARAMS(typename, T),
1833  AND_4_VALUE_PARAMS(p0, p1, p2, p3)) {
1834  return new T(p0, p1, p2, p3);
1835 }
1836 
1838  HAS_1_TEMPLATE_PARAMS(typename, T),
1839  AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)) {
1840  return new T(p0, p1, p2, p3, p4);
1841 }
1842 
1844  HAS_1_TEMPLATE_PARAMS(typename, T),
1845  AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)) {
1846  return new T(p0, p1, p2, p3, p4, p5);
1847 }
1848 
1850  HAS_1_TEMPLATE_PARAMS(typename, T),
1851  AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)) {
1852  return new T(p0, p1, p2, p3, p4, p5, p6);
1853 }
1854 
1856  HAS_1_TEMPLATE_PARAMS(typename, T),
1857  AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)) {
1858  return new T(p0, p1, p2, p3, p4, p5, p6, p7);
1859 }
1860 
1862  HAS_1_TEMPLATE_PARAMS(typename, T),
1863  AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8)) {
1864  return new T(p0, p1, p2, p3, p4, p5, p6, p7, p8);
1865 }
1866 
1868  HAS_1_TEMPLATE_PARAMS(typename, T),
1869  AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) {
1870  return new T(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
1871 }
1872 
1873 #ifdef _MSC_VER
1874 # pragma warning(pop)
1875 #endif
1876 
1877 } // namespace testing
1878 
1879 // Include any custom callback actions added by the local installation.
1880 // We must include this header at the end to make sure it can use the
1881 // declarations from this file.
1882 #include "gmock/internal/custom/gmock-generated-actions.h"
1883 
1884 #endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_
testing
Definition: aws_request_signer_test.cc:25
testing::internal::ActionHelper::Perform
static Result Perform(Impl *impl, const ::std::tuple< A0, A1, A2, A3, A4, A5, A6, A7 > &args)
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-generated-actions.h:143
testing::internal::ActionHelper::Perform
static Result Perform(Impl *impl, const ::std::tuple< A0, A1, A2, A3, A4, A5 > &args)
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-generated-actions.h:123
testing::internal::ActionHelper::Perform
static Result Perform(Impl *impl, const ::std::tuple< A0, A1, A2, A3, A4, A5, A6 > &args)
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-generated-actions.h:133
setup.k
k
Definition: third_party/bloaty/third_party/capstone/bindings/python/setup.py:42
testing::internal::ActionHelper::Perform
static Result Perform(Impl *impl, const ::std::tuple< A0, A1, A2, A3, A4 > &args)
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-generated-actions.h:113
testing::internal::invoke_argument::AdlTag
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-generated-actions.h:1636
T
#define T(upbtypeconst, upbtype, ctype, default_value)
asyncio_get_stats.args
args
Definition: asyncio_get_stats.py:40
a2
T::first_type a2
Definition: abseil-cpp/absl/container/internal/hash_function_defaults_test.cc:307
re2::Result
TestInstance::Result Result
Definition: bloaty/third_party/re2/re2/testing/tester.cc:96
testing::internal::ActionHelper
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-generated-actions.h:71
testing::internal::ActionHelper::Perform
static Result Perform(Impl *impl, const ::std::tuple< A0, A1, A2, A3, A4, A5, A6, A7, A8 > &args)
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-generated-actions.h:153
testing::internal::ActionHelper::Perform
static Result Perform(Impl *impl, const ::std::tuple< A0 > &args)
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-generated-actions.h:81
testing::internal::ActionHelper::Perform
static Result Perform(Impl *impl, const ::std::tuple< A0, A1, A2, A3, A4, A5, A6, A7, A8, A9 > &args)
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-generated-actions.h:164
testing::internal::ActionHelper::Perform
static Result Perform(Impl *impl, const ::std::tuple<> &args)
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-generated-actions.h:73
a1
T::first_type a1
Definition: abseil-cpp/absl/container/internal/hash_function_defaults_test.cc:305
testing::ReturnNew
internal::ReturnNewAction< T, typename std::decay< Params >::type... > ReturnNew(Params &&... params)
Definition: googletest/googlemock/include/gmock/gmock-actions.h:1399
F
#define F(b, c, d)
Definition: md4.c:112
testing::internal::ActionHelper::Perform
static Result Perform(Impl *impl, const ::std::tuple< A0, A1, A2 > &args)
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-generated-actions.h:97
testing::ACTION_TEMPLATE
ACTION_TEMPLATE(InvokeArgument, HAS_1_TEMPLATE_PARAMS(int, k), AND_0_VALUE_PARAMS())
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-generated-actions.h:1703
testing::InvokeArgument
internal::InvokeArgumentAction< index, typename std::decay< Params >::type... > InvokeArgument(Params &&... params)
Definition: googletest/googlemock/include/gmock/gmock-more-actions.h:562
testing::internal::ExcessiveArg
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-generated-actions.h:67
testing::internal::ActionHelper::Perform
static Result Perform(Impl *impl, const ::std::tuple< A0, A1, A2, A3 > &args)
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-generated-actions.h:105
testing::internal::invoke_argument::InvokeArgumentAdl
R InvokeArgumentAdl(AdlTag, F f)
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-generated-actions.h:1644
internal
Definition: benchmark/test/output_test_helper.cc:20
testing::internal::ActionHelper::Perform
static Result Perform(Impl *impl, const ::std::tuple< A0, A1 > &args)
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-generated-actions.h:89


grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:30