40#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_
41#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_
52template <
typename Result,
typename ArgumentTuple>
58 template <
typename Function>
63 template <
class Class,
typename MethodPtr>
66 const ::testing::tuple<>&) {
67 return (obj_ptr->*method_ptr)();
70 template <
typename CallbackType>
72 const ::testing::tuple<>&) {
73 return callback->Run();
77template <
typename R,
typename A1>
80 template <
typename Function>
82 return function(get<0>(args));
85 template <
class Class,
typename MethodPtr>
88 const ::testing::tuple<A1>& args) {
89 return (obj_ptr->*method_ptr)(get<0>(args));
92 template <
typename CallbackType>
94 const ::testing::tuple<A1>& args) {
95 return callback->Run(get<0>(args));
99template <
typename R,
typename A1,
typename A2>
102 template <
typename Function>
104 return function(get<0>(args), get<1>(args));
107 template <
class Class,
typename MethodPtr>
109 MethodPtr method_ptr,
110 const ::testing::tuple<A1, A2>& args) {
111 return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args));
114 template <
typename CallbackType>
116 const ::testing::tuple<A1, A2>& args) {
117 return callback->Run(get<0>(args), get<1>(args));
121template <
typename R,
typename A1,
typename A2,
typename A3>
124 template <
typename Function>
126 return function(get<0>(args), get<1>(args), get<2>(args));
129 template <
class Class,
typename MethodPtr>
131 MethodPtr method_ptr,
132 const ::testing::tuple<A1, A2, A3>& args) {
133 return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args),
137 template <
typename CallbackType>
139 const ::testing::tuple<A1, A2, A3>& args) {
140 return callback->Run(get<0>(args), get<1>(args), get<2>(args));
144template <
typename R,
typename A1,
typename A2,
typename A3,
typename A4>
147 template <
typename Function>
150 return function(get<0>(args), get<1>(args), get<2>(args),
154 template <
class Class,
typename MethodPtr>
156 MethodPtr method_ptr,
157 const ::testing::tuple<A1, A2, A3, A4>& args) {
158 return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args),
159 get<2>(args), get<3>(args));
162 template <
typename CallbackType>
164 const ::testing::tuple<A1, A2, A3, A4>& args) {
165 return callback->Run(get<0>(args), get<1>(args), get<2>(args),
170template <
typename R,
typename A1,
typename A2,
typename A3,
typename A4,
174 template <
typename Function>
177 return function(get<0>(args), get<1>(args), get<2>(args),
178 get<3>(args), get<4>(args));
181 template <
class Class,
typename MethodPtr>
183 MethodPtr method_ptr,
184 const ::testing::tuple<A1, A2, A3, A4, A5>& args) {
185 return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args),
186 get<2>(args), get<3>(args), get<4>(args));
189 template <
typename CallbackType>
191 const ::testing::tuple<A1, A2, A3, A4, A5>& args) {
192 return callback->Run(get<0>(args), get<1>(args), get<2>(args),
193 get<3>(args), get<4>(args));
197template <
typename R,
typename A1,
typename A2,
typename A3,
typename A4,
198 typename A5,
typename A6>
201 template <
typename Function>
204 return function(get<0>(args), get<1>(args), get<2>(args),
205 get<3>(args), get<4>(args), get<5>(args));
208 template <
class Class,
typename MethodPtr>
210 MethodPtr method_ptr,
211 const ::testing::tuple<A1, A2, A3, A4, A5, A6>& args) {
212 return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args),
213 get<2>(args), get<3>(args), get<4>(args), get<5>(args));
220template <
typename R,
typename A1,
typename A2,
typename A3,
typename A4,
221 typename A5,
typename A6,
typename A7>
224 template <
typename Function>
227 return function(get<0>(args), get<1>(args), get<2>(args),
228 get<3>(args), get<4>(args), get<5>(args), get<6>(args));
231 template <
class Class,
typename MethodPtr>
233 MethodPtr method_ptr,
234 const ::testing::tuple<A1, A2, A3, A4, A5, A6,
236 return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args),
237 get<2>(args), get<3>(args), get<4>(args), get<5>(args),
245template <
typename R,
typename A1,
typename A2,
typename A3,
typename A4,
246 typename A5,
typename A6,
typename A7,
typename A8>
249 template <
typename Function>
252 return function(get<0>(args), get<1>(args), get<2>(args),
253 get<3>(args), get<4>(args), get<5>(args), get<6>(args),
257 template <
class Class,
typename MethodPtr>
259 MethodPtr method_ptr,
260 const ::testing::tuple<A1, A2, A3, A4, A5, A6, A7,
262 return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args),
263 get<2>(args), get<3>(args), get<4>(args), get<5>(args),
264 get<6>(args), get<7>(args));
271template <
typename R,
typename A1,
typename A2,
typename A3,
typename A4,
272 typename A5,
typename A6,
typename A7,
typename A8,
typename A9>
273class InvokeHelper<
R, ::testing::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9> > {
275 template <
typename Function>
277 A6, A7, A8, A9>& args) {
278 return function(get<0>(args), get<1>(args), get<2>(args),
279 get<3>(args), get<4>(args), get<5>(args), get<6>(args),
280 get<7>(args), get<8>(args));
283 template <
class Class,
typename MethodPtr>
285 MethodPtr method_ptr,
286 const ::testing::tuple<A1, A2, A3, A4, A5, A6, A7, A8,
288 return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args),
289 get<2>(args), get<3>(args), get<4>(args), get<5>(args),
290 get<6>(args), get<7>(args), get<8>(args));
297template <
typename R,
typename A1,
typename A2,
typename A3,
typename A4,
298 typename A5,
typename A6,
typename A7,
typename A8,
typename A9,
300class InvokeHelper<
R, ::testing::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9,
303 template <
typename Function>
305 A6, A7, A8, A9, A10>& args) {
306 return function(get<0>(args), get<1>(args), get<2>(args),
307 get<3>(args), get<4>(args), get<5>(args), get<6>(args),
308 get<7>(args), get<8>(args), get<9>(args));
311 template <
class Class,
typename MethodPtr>
313 MethodPtr method_ptr,
314 const ::testing::tuple<A1, A2, A3, A4, A5, A6, A7, A8,
316 return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args),
317 get<2>(args), get<3>(args), get<4>(args), get<5>(args),
318 get<6>(args), get<7>(args), get<8>(args), get<9>(args));
326template <
typename CallbackType>
331 : callback_(callback) {
332 callback->CheckIsRepeatable();
341 template <
typename Result,
typename ArgumentTuple>
342 Result
Perform(
const ArgumentTuple& args)
const {
344 callback_.
get(), args);
352#define GMOCK_FIELD_(Tuple, N) \
353 typename ::testing::tuple_element<N, Tuple>::type
373template <
typename Result,
typename ArgumentTuple,
int k1,
int k2,
int k3,
374 int k4,
int k5,
int k6,
int k7,
int k8,
int k9,
int k10>
385 return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args),
386 get<k4>(args), get<k5>(args), get<k6>(args), get<k7>(args),
387 get<k8>(args), get<k9>(args), get<k10>(args));
391template <
typename Result,
typename ArgumentTuple>
393 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1> {
402template <
typename Result,
typename ArgumentTuple,
int k1>
404 k1, -1, -1, -1, -1, -1, -1, -1, -1, -1> {
413template <
typename Result,
typename ArgumentTuple,
int k1,
int k2>
415 k1, k2, -1, -1, -1, -1, -1, -1, -1, -1> {
425template <
typename Result,
typename ArgumentTuple,
int k1,
int k2,
int k3>
427 k1, k2, k3, -1, -1, -1, -1, -1, -1, -1> {
433 return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args));
437template <
typename Result,
typename ArgumentTuple,
int k1,
int k2,
int k3,
440 k1, k2, k3, k4, -1, -1, -1, -1, -1, -1> {
447 return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args),
452template <
typename Result,
typename ArgumentTuple,
int k1,
int k2,
int k3,
455 k1, k2, k3, k4, k5, -1, -1, -1, -1, -1> {
462 return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args),
463 get<k4>(args), get<k5>(args));
467template <
typename Result,
typename ArgumentTuple,
int k1,
int k2,
int k3,
468 int k4,
int k5,
int k6>
470 k1, k2, k3, k4, k5, k6, -1, -1, -1, -1> {
478 return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args),
479 get<k4>(args), get<k5>(args), get<k6>(args));
483template <
typename Result,
typename ArgumentTuple,
int k1,
int k2,
int k3,
484 int k4,
int k5,
int k6,
int k7>
486 k1, k2, k3, k4, k5, k6, k7, -1, -1, -1> {
494 return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args),
495 get<k4>(args), get<k5>(args), get<k6>(args), get<k7>(args));
499template <
typename Result,
typename ArgumentTuple,
int k1,
int k2,
int k3,
500 int k4,
int k5,
int k6,
int k7,
int k8>
502 k1, k2, k3, k4, k5, k6, k7, k8, -1, -1> {
511 return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args),
512 get<k4>(args), get<k5>(args), get<k6>(args), get<k7>(args),
517template <
typename Result,
typename ArgumentTuple,
int k1,
int k2,
int k3,
518 int k4,
int k5,
int k6,
int k7,
int k8,
int k9>
520 k1, k2, k3, k4, k5, k6, k7, k8, k9, -1> {
529 return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args),
530 get<k4>(args), get<k5>(args), get<k6>(args), get<k7>(args),
531 get<k8>(args), get<k9>(args));
538template <
typename InnerAction,
int k1 = -1,
int k2 = -1,
int k3 = -1,
539 int k4 = -1,
int k5 = -1,
int k6 = -1,
int k7 = -1,
int k8 = -1,
540 int k9 = -1,
int k10 = -1>
545 template <
typename F>
549 template <
typename F>
555 explicit Impl(
const InnerAction&
action) : action_(
action) {}
557 virtual Result Perform(
const ArgumentTuple& args) {
558 return action_.
Perform(SelectArgs<Result, ArgumentTuple, k1, k2, k3, k4,
559 k5, k6, k7, k8, k9, k10>::Select(args));
563 typedef typename SelectArgs<Result, ArgumentTuple,
564 k1, k2, k3, k4, k5, k6, k7, k8, k9, k10>::type InnerFunctionType;
566 Action<InnerFunctionType> action_;
569 const InnerAction action_;
591template <
typename Result,
class Impl>
594 static Result
Perform(Impl* impl, const ::testing::tuple<>& args) {
595 return impl->template gmock_PerformImpl<>(args,
ExcessiveArg(),
601 template <
typename A0>
602 static Result
Perform(Impl* impl, const ::testing::tuple<A0>& args) {
603 return impl->template gmock_PerformImpl<A0>(args, get<0>(args),
609 template <
typename A0,
typename A1>
610 static Result
Perform(Impl* impl, const ::testing::tuple<A0, A1>& args) {
611 return impl->template gmock_PerformImpl<A0, A1>(args, get<0>(args),
617 template <
typename A0,
typename A1,
typename A2>
618 static Result
Perform(Impl* impl, const ::testing::tuple<A0, A1, A2>& args) {
619 return impl->template gmock_PerformImpl<A0, A1, A2>(args, get<0>(args),
625 template <
typename A0,
typename A1,
typename A2,
typename A3>
626 static Result
Perform(Impl* impl, const ::testing::tuple<A0, A1, A2,
628 return impl->template gmock_PerformImpl<A0, A1, A2, A3>(args, get<0>(args),
629 get<1>(args), get<2>(args), get<3>(args),
ExcessiveArg(),
634 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
635 static Result
Perform(Impl* impl, const ::testing::tuple<A0, A1, A2, A3,
637 return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4>(args,
638 get<0>(args), get<1>(args), get<2>(args), get<3>(args), get<4>(args),
643 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
645 static Result
Perform(Impl* impl, const ::testing::tuple<A0, A1, A2, A3, A4,
647 return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5>(args,
648 get<0>(args), get<1>(args), get<2>(args), get<3>(args), get<4>(args),
653 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
654 typename A5,
typename A6>
655 static Result
Perform(Impl* impl, const ::testing::tuple<A0, A1, A2, A3, A4,
657 return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6>(args,
658 get<0>(args), get<1>(args), get<2>(args), get<3>(args), get<4>(args),
663 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
664 typename A5,
typename A6,
typename A7>
665 static Result
Perform(Impl* impl, const ::testing::tuple<A0, A1, A2, A3, A4,
667 return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6,
668 A7>(args, get<0>(args), get<1>(args), get<2>(args), get<3>(args),
669 get<4>(args), get<5>(args), get<6>(args), get<7>(args),
ExcessiveArg(),
673 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
674 typename A5,
typename A6,
typename A7,
typename A8>
675 static Result
Perform(Impl* impl, const ::testing::tuple<A0, A1, A2, A3, A4,
676 A5, A6, A7, A8>& args) {
677 return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6, A7,
678 A8>(args, get<0>(args), get<1>(args), get<2>(args), get<3>(args),
679 get<4>(args), get<5>(args), get<6>(args), get<7>(args), get<8>(args),
683 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
684 typename A5,
typename A6,
typename A7,
typename A8,
typename A9>
685 static Result
Perform(Impl* impl, const ::testing::tuple<A0, A1, A2, A3, A4,
686 A5, A6, A7, A8, A9>& args) {
687 return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6, A7, A8,
688 A9>(args, get<0>(args), get<1>(args), get<2>(args), get<3>(args),
689 get<4>(args), get<5>(args), get<6>(args), get<7>(args), get<8>(args),
703template <
int k1,
typename InnerAction>
704inline internal::WithArgsAction<InnerAction, k1>
709template <
int k1,
int k2,
typename InnerAction>
710inline internal::WithArgsAction<InnerAction, k1, k2>
715template <
int k1,
int k2,
int k3,
typename InnerAction>
716inline internal::WithArgsAction<InnerAction, k1, k2, k3>
721template <
int k1,
int k2,
int k3,
int k4,
typename InnerAction>
722inline internal::WithArgsAction<InnerAction, k1, k2, k3, k4>
727template <
int k1,
int k2,
int k3,
int k4,
int k5,
typename InnerAction>
728inline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5>
733template <
int k1,
int k2,
int k3,
int k4,
int k5,
int k6,
typename InnerAction>
734inline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6>
739template <
int k1,
int k2,
int k3,
int k4,
int k5,
int k6,
int k7,
740 typename InnerAction>
741inline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7>
747template <
int k1,
int k2,
int k3,
int k4,
int k5,
int k6,
int k7,
int k8,
748 typename InnerAction>
749inline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7, k8>
755template <
int k1,
int k2,
int k3,
int k4,
int k5,
int k6,
int k7,
int k8,
756 int k9,
typename InnerAction>
757inline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7, k8, k9>
763template <
int k1,
int k2,
int k3,
int k4,
int k5,
int k6,
int k7,
int k8,
764 int k9,
int k10,
typename InnerAction>
765inline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7, k8,
774template <
typename Action1,
typename Action2>
775inline internal::DoBothAction<Action1, Action2>
780template <
typename Action1,
typename Action2,
typename Action3>
781inline internal::DoBothAction<Action1, internal::DoBothAction<Action2,
783DoAll(Action1 a1, Action2 a2, Action3 a3) {
787template <
typename Action1,
typename Action2,
typename Action3,
789inline internal::DoBothAction<Action1, internal::DoBothAction<Action2,
790 internal::DoBothAction<Action3, Action4> > >
791DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4) {
795template <
typename Action1,
typename Action2,
typename Action3,
796 typename Action4,
typename Action5>
797inline internal::DoBothAction<Action1, internal::DoBothAction<Action2,
798 internal::DoBothAction<Action3, internal::DoBothAction<Action4,
800DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5) {
804template <
typename Action1,
typename Action2,
typename Action3,
805 typename Action4,
typename Action5,
typename Action6>
806inline internal::DoBothAction<Action1, internal::DoBothAction<Action2,
807 internal::DoBothAction<Action3, internal::DoBothAction<Action4,
808 internal::DoBothAction<Action5, Action6> > > > >
809DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6) {
813template <
typename Action1,
typename Action2,
typename Action3,
814 typename Action4,
typename Action5,
typename Action6,
typename Action7>
815inline internal::DoBothAction<Action1, internal::DoBothAction<Action2,
816 internal::DoBothAction<Action3, internal::DoBothAction<Action4,
817 internal::DoBothAction<Action5, internal::DoBothAction<Action6,
819DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6,
821 return DoAll(a1,
DoAll(a2, a3, a4, a5, a6, a7));
824template <
typename Action1,
typename Action2,
typename Action3,
825 typename Action4,
typename Action5,
typename Action6,
typename Action7,
827inline internal::DoBothAction<Action1, internal::DoBothAction<Action2,
828 internal::DoBothAction<Action3, internal::DoBothAction<Action4,
829 internal::DoBothAction<Action5, internal::DoBothAction<Action6,
830 internal::DoBothAction<Action7, Action8> > > > > > >
831DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6,
832 Action7 a7, Action8 a8) {
833 return DoAll(a1,
DoAll(a2, a3, a4, a5, a6, a7, a8));
836template <
typename Action1,
typename Action2,
typename Action3,
837 typename Action4,
typename Action5,
typename Action6,
typename Action7,
838 typename Action8,
typename Action9>
839inline internal::DoBothAction<Action1, internal::DoBothAction<Action2,
840 internal::DoBothAction<Action3, internal::DoBothAction<Action4,
841 internal::DoBothAction<Action5, internal::DoBothAction<Action6,
842 internal::DoBothAction<Action7, internal::DoBothAction<Action8,
843 Action9> > > > > > > >
844DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6,
845 Action7 a7, Action8 a8, Action9 a9) {
846 return DoAll(a1,
DoAll(a2, a3, a4, a5, a6, a7, a8, a9));
849template <
typename Action1,
typename Action2,
typename Action3,
850 typename Action4,
typename Action5,
typename Action6,
typename Action7,
851 typename Action8,
typename Action9,
typename Action10>
852inline internal::DoBothAction<Action1, internal::DoBothAction<Action2,
853 internal::DoBothAction<Action3, internal::DoBothAction<Action4,
854 internal::DoBothAction<Action5, internal::DoBothAction<Action6,
855 internal::DoBothAction<Action7, internal::DoBothAction<Action8,
856 internal::DoBothAction<Action9, Action10> > > > > > > > >
857DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6,
858 Action7 a7, Action8 a8, Action9 a9, Action10 a10) {
859 return DoAll(a1,
DoAll(a2, a3, a4, a5, a6, a7, a8, a9, a10));
961#define GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_\
962 const args_type& args GTEST_ATTRIBUTE_UNUSED_, \
963 arg0_type arg0 GTEST_ATTRIBUTE_UNUSED_, \
964 arg1_type arg1 GTEST_ATTRIBUTE_UNUSED_, \
965 arg2_type arg2 GTEST_ATTRIBUTE_UNUSED_, \
966 arg3_type arg3 GTEST_ATTRIBUTE_UNUSED_, \
967 arg4_type arg4 GTEST_ATTRIBUTE_UNUSED_, \
968 arg5_type arg5 GTEST_ATTRIBUTE_UNUSED_, \
969 arg6_type arg6 GTEST_ATTRIBUTE_UNUSED_, \
970 arg7_type arg7 GTEST_ATTRIBUTE_UNUSED_, \
971 arg8_type arg8 GTEST_ATTRIBUTE_UNUSED_, \
972 arg9_type arg9 GTEST_ATTRIBUTE_UNUSED_
1056#define GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS(kind0, name0) kind0 name0
1057#define GMOCK_INTERNAL_DECL_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, \
1058 name1) kind0 name0, kind1 name1
1059#define GMOCK_INTERNAL_DECL_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
1060 kind2, name2) kind0 name0, kind1 name1, kind2 name2
1061#define GMOCK_INTERNAL_DECL_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
1062 kind2, name2, kind3, name3) kind0 name0, kind1 name1, kind2 name2, \
1064#define GMOCK_INTERNAL_DECL_HAS_5_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
1065 kind2, name2, kind3, name3, kind4, name4) kind0 name0, kind1 name1, \
1066 kind2 name2, kind3 name3, kind4 name4
1067#define GMOCK_INTERNAL_DECL_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
1068 kind2, name2, kind3, name3, kind4, name4, kind5, name5) kind0 name0, \
1069 kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5
1070#define GMOCK_INTERNAL_DECL_HAS_7_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
1071 kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \
1072 name6) kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, \
1073 kind5 name5, kind6 name6
1074#define GMOCK_INTERNAL_DECL_HAS_8_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
1075 kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \
1076 kind7, name7) kind0 name0, kind1 name1, kind2 name2, kind3 name3, \
1077 kind4 name4, kind5 name5, kind6 name6, kind7 name7
1078#define GMOCK_INTERNAL_DECL_HAS_9_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
1079 kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \
1080 kind7, name7, kind8, name8) kind0 name0, kind1 name1, kind2 name2, \
1081 kind3 name3, kind4 name4, kind5 name5, kind6 name6, kind7 name7, \
1083#define GMOCK_INTERNAL_DECL_HAS_10_TEMPLATE_PARAMS(kind0, name0, kind1, \
1084 name1, kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \
1085 name6, kind7, name7, kind8, name8, kind9, name9) kind0 name0, \
1086 kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5, \
1087 kind6 name6, kind7 name7, kind8 name8, kind9 name9
1090#define GMOCK_INTERNAL_LIST_HAS_1_TEMPLATE_PARAMS(kind0, name0) name0
1091#define GMOCK_INTERNAL_LIST_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, \
1093#define GMOCK_INTERNAL_LIST_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
1094 kind2, name2) name0, name1, name2
1095#define GMOCK_INTERNAL_LIST_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
1096 kind2, name2, kind3, name3) name0, name1, name2, name3
1097#define GMOCK_INTERNAL_LIST_HAS_5_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
1098 kind2, name2, kind3, name3, kind4, name4) name0, name1, name2, name3, \
1100#define GMOCK_INTERNAL_LIST_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
1101 kind2, name2, kind3, name3, kind4, name4, kind5, name5) name0, name1, \
1102 name2, name3, name4, name5
1103#define GMOCK_INTERNAL_LIST_HAS_7_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
1104 kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \
1105 name6) name0, name1, name2, name3, name4, name5, name6
1106#define GMOCK_INTERNAL_LIST_HAS_8_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
1107 kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \
1108 kind7, name7) name0, name1, name2, name3, name4, name5, name6, name7
1109#define GMOCK_INTERNAL_LIST_HAS_9_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
1110 kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \
1111 kind7, name7, kind8, name8) name0, name1, name2, name3, name4, name5, \
1113#define GMOCK_INTERNAL_LIST_HAS_10_TEMPLATE_PARAMS(kind0, name0, kind1, \
1114 name1, kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \
1115 name6, kind7, name7, kind8, name8, kind9, name9) name0, name1, name2, \
1116 name3, name4, name5, name6, name7, name8, name9
1119#define GMOCK_INTERNAL_DECL_TYPE_AND_0_VALUE_PARAMS()
1120#define GMOCK_INTERNAL_DECL_TYPE_AND_1_VALUE_PARAMS(p0) , typename p0##_type
1121#define GMOCK_INTERNAL_DECL_TYPE_AND_2_VALUE_PARAMS(p0, p1) , \
1122 typename p0##_type, typename p1##_type
1123#define GMOCK_INTERNAL_DECL_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) , \
1124 typename p0##_type, typename p1##_type, typename p2##_type
1125#define GMOCK_INTERNAL_DECL_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) , \
1126 typename p0##_type, typename p1##_type, typename p2##_type, \
1128#define GMOCK_INTERNAL_DECL_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) , \
1129 typename p0##_type, typename p1##_type, typename p2##_type, \
1130 typename p3##_type, typename p4##_type
1131#define GMOCK_INTERNAL_DECL_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) , \
1132 typename p0##_type, typename p1##_type, typename p2##_type, \
1133 typename p3##_type, typename p4##_type, typename p5##_type
1134#define GMOCK_INTERNAL_DECL_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
1135 p6) , typename p0##_type, typename p1##_type, typename p2##_type, \
1136 typename p3##_type, typename p4##_type, typename p5##_type, \
1138#define GMOCK_INTERNAL_DECL_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
1139 p6, p7) , typename p0##_type, typename p1##_type, typename p2##_type, \
1140 typename p3##_type, typename p4##_type, typename p5##_type, \
1141 typename p6##_type, typename p7##_type
1142#define GMOCK_INTERNAL_DECL_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
1143 p6, p7, p8) , typename p0##_type, typename p1##_type, typename p2##_type, \
1144 typename p3##_type, typename p4##_type, typename p5##_type, \
1145 typename p6##_type, typename p7##_type, typename p8##_type
1146#define GMOCK_INTERNAL_DECL_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
1147 p6, p7, p8, p9) , typename p0##_type, typename p1##_type, \
1148 typename p2##_type, typename p3##_type, typename p4##_type, \
1149 typename p5##_type, typename p6##_type, typename p7##_type, \
1150 typename p8##_type, typename p9##_type
1153#define GMOCK_INTERNAL_INIT_AND_0_VALUE_PARAMS()\
1155#define GMOCK_INTERNAL_INIT_AND_1_VALUE_PARAMS(p0)\
1156 (p0##_type gmock_p0) : p0(::testing::internal::move(gmock_p0))
1157#define GMOCK_INTERNAL_INIT_AND_2_VALUE_PARAMS(p0, p1)\
1158 (p0##_type gmock_p0, \
1159 p1##_type gmock_p1) : p0(::testing::internal::move(gmock_p0)), \
1160 p1(::testing::internal::move(gmock_p1))
1161#define GMOCK_INTERNAL_INIT_AND_3_VALUE_PARAMS(p0, p1, p2)\
1162 (p0##_type gmock_p0, p1##_type gmock_p1, \
1163 p2##_type gmock_p2) : p0(::testing::internal::move(gmock_p0)), \
1164 p1(::testing::internal::move(gmock_p1)), \
1165 p2(::testing::internal::move(gmock_p2))
1166#define GMOCK_INTERNAL_INIT_AND_4_VALUE_PARAMS(p0, p1, p2, p3)\
1167 (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
1168 p3##_type gmock_p3) : p0(::testing::internal::move(gmock_p0)), \
1169 p1(::testing::internal::move(gmock_p1)), \
1170 p2(::testing::internal::move(gmock_p2)), \
1171 p3(::testing::internal::move(gmock_p3))
1172#define GMOCK_INTERNAL_INIT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)\
1173 (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
1174 p3##_type gmock_p3, \
1175 p4##_type gmock_p4) : p0(::testing::internal::move(gmock_p0)), \
1176 p1(::testing::internal::move(gmock_p1)), \
1177 p2(::testing::internal::move(gmock_p2)), \
1178 p3(::testing::internal::move(gmock_p3)), \
1179 p4(::testing::internal::move(gmock_p4))
1180#define GMOCK_INTERNAL_INIT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)\
1181 (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
1182 p3##_type gmock_p3, p4##_type gmock_p4, \
1183 p5##_type gmock_p5) : p0(::testing::internal::move(gmock_p0)), \
1184 p1(::testing::internal::move(gmock_p1)), \
1185 p2(::testing::internal::move(gmock_p2)), \
1186 p3(::testing::internal::move(gmock_p3)), \
1187 p4(::testing::internal::move(gmock_p4)), \
1188 p5(::testing::internal::move(gmock_p5))
1189#define GMOCK_INTERNAL_INIT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)\
1190 (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
1191 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
1192 p6##_type gmock_p6) : p0(::testing::internal::move(gmock_p0)), \
1193 p1(::testing::internal::move(gmock_p1)), \
1194 p2(::testing::internal::move(gmock_p2)), \
1195 p3(::testing::internal::move(gmock_p3)), \
1196 p4(::testing::internal::move(gmock_p4)), \
1197 p5(::testing::internal::move(gmock_p5)), \
1198 p6(::testing::internal::move(gmock_p6))
1199#define GMOCK_INTERNAL_INIT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)\
1200 (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, \
1203 p7##_type gmock_p7) : p0(::testing::internal::move(gmock_p0)), \
1204 p1(::testing::internal::move(gmock_p1)), \
1205 p2(::testing::internal::move(gmock_p2)), \
1206 p3(::testing::internal::move(gmock_p3)), \
1207 p4(::testing::internal::move(gmock_p4)), \
1208 p5(::testing::internal::move(gmock_p5)), \
1209 p6(::testing::internal::move(gmock_p6)), \
1210 p7(::testing::internal::move(gmock_p7))
1211#define GMOCK_INTERNAL_INIT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
1213 (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
1214 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
1215 p6##_type gmock_p6, p7##_type gmock_p7, \
1216 p8##_type gmock_p8) : p0(::testing::internal::move(gmock_p0)), \
1217 p1(::testing::internal::move(gmock_p1)), \
1218 p2(::testing::internal::move(gmock_p2)), \
1219 p3(::testing::internal::move(gmock_p3)), \
1220 p4(::testing::internal::move(gmock_p4)), \
1221 p5(::testing::internal::move(gmock_p5)), \
1222 p6(::testing::internal::move(gmock_p6)), \
1223 p7(::testing::internal::move(gmock_p7)), \
1224 p8(::testing::internal::move(gmock_p8))
1225#define GMOCK_INTERNAL_INIT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
1227 (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
1228 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
1229 p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \
1230 p9##_type gmock_p9) : p0(::testing::internal::move(gmock_p0)), \
1231 p1(::testing::internal::move(gmock_p1)), \
1232 p2(::testing::internal::move(gmock_p2)), \
1233 p3(::testing::internal::move(gmock_p3)), \
1234 p4(::testing::internal::move(gmock_p4)), \
1235 p5(::testing::internal::move(gmock_p5)), \
1236 p6(::testing::internal::move(gmock_p6)), \
1237 p7(::testing::internal::move(gmock_p7)), \
1238 p8(::testing::internal::move(gmock_p8)), \
1239 p9(::testing::internal::move(gmock_p9))
1242#define GMOCK_INTERNAL_DEFN_AND_0_VALUE_PARAMS()
1243#define GMOCK_INTERNAL_DEFN_AND_1_VALUE_PARAMS(p0) p0##_type p0;
1244#define GMOCK_INTERNAL_DEFN_AND_2_VALUE_PARAMS(p0, p1) p0##_type p0; \
1246#define GMOCK_INTERNAL_DEFN_AND_3_VALUE_PARAMS(p0, p1, p2) p0##_type p0; \
1247 p1##_type p1; p2##_type p2;
1248#define GMOCK_INTERNAL_DEFN_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0##_type p0; \
1249 p1##_type p1; p2##_type p2; p3##_type p3;
1250#define GMOCK_INTERNAL_DEFN_AND_5_VALUE_PARAMS(p0, p1, p2, p3, \
1251 p4) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4;
1252#define GMOCK_INTERNAL_DEFN_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, \
1253 p5) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \
1255#define GMOCK_INTERNAL_DEFN_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
1256 p6) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \
1257 p5##_type p5; p6##_type p6;
1258#define GMOCK_INTERNAL_DEFN_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
1259 p7) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \
1260 p5##_type p5; p6##_type p6; p7##_type p7;
1261#define GMOCK_INTERNAL_DEFN_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
1262 p7, p8) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; \
1263 p4##_type p4; p5##_type p5; p6##_type p6; p7##_type p7; p8##_type p8;
1264#define GMOCK_INTERNAL_DEFN_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
1265 p7, p8, p9) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; \
1266 p4##_type p4; p5##_type p5; p6##_type p6; p7##_type p7; p8##_type p8; \
1270#define GMOCK_INTERNAL_LIST_AND_0_VALUE_PARAMS()
1271#define GMOCK_INTERNAL_LIST_AND_1_VALUE_PARAMS(p0) p0
1272#define GMOCK_INTERNAL_LIST_AND_2_VALUE_PARAMS(p0, p1) p0, p1
1273#define GMOCK_INTERNAL_LIST_AND_3_VALUE_PARAMS(p0, p1, p2) p0, p1, p2
1274#define GMOCK_INTERNAL_LIST_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0, p1, p2, p3
1275#define GMOCK_INTERNAL_LIST_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) p0, p1, \
1277#define GMOCK_INTERNAL_LIST_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) p0, \
1279#define GMOCK_INTERNAL_LIST_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
1280 p6) p0, p1, p2, p3, p4, p5, p6
1281#define GMOCK_INTERNAL_LIST_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
1282 p7) p0, p1, p2, p3, p4, p5, p6, p7
1283#define GMOCK_INTERNAL_LIST_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
1284 p7, p8) p0, p1, p2, p3, p4, p5, p6, p7, p8
1285#define GMOCK_INTERNAL_LIST_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
1286 p7, p8, p9) p0, p1, p2, p3, p4, p5, p6, p7, p8, p9
1289#define GMOCK_INTERNAL_LIST_TYPE_AND_0_VALUE_PARAMS()
1290#define GMOCK_INTERNAL_LIST_TYPE_AND_1_VALUE_PARAMS(p0) , p0##_type
1291#define GMOCK_INTERNAL_LIST_TYPE_AND_2_VALUE_PARAMS(p0, p1) , p0##_type, \
1293#define GMOCK_INTERNAL_LIST_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) , p0##_type, \
1294 p1##_type, p2##_type
1295#define GMOCK_INTERNAL_LIST_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) , \
1296 p0##_type, p1##_type, p2##_type, p3##_type
1297#define GMOCK_INTERNAL_LIST_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) , \
1298 p0##_type, p1##_type, p2##_type, p3##_type, p4##_type
1299#define GMOCK_INTERNAL_LIST_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) , \
1300 p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type
1301#define GMOCK_INTERNAL_LIST_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
1302 p6) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, \
1304#define GMOCK_INTERNAL_LIST_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
1305 p6, p7) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
1306 p5##_type, p6##_type, p7##_type
1307#define GMOCK_INTERNAL_LIST_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
1308 p6, p7, p8) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
1309 p5##_type, p6##_type, p7##_type, p8##_type
1310#define GMOCK_INTERNAL_LIST_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
1311 p6, p7, p8, p9) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
1312 p5##_type, p6##_type, p7##_type, p8##_type, p9##_type
1315#define GMOCK_INTERNAL_DECL_AND_0_VALUE_PARAMS()
1316#define GMOCK_INTERNAL_DECL_AND_1_VALUE_PARAMS(p0) p0##_type p0
1317#define GMOCK_INTERNAL_DECL_AND_2_VALUE_PARAMS(p0, p1) p0##_type p0, \
1319#define GMOCK_INTERNAL_DECL_AND_3_VALUE_PARAMS(p0, p1, p2) p0##_type p0, \
1320 p1##_type p1, p2##_type p2
1321#define GMOCK_INTERNAL_DECL_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0##_type p0, \
1322 p1##_type p1, p2##_type p2, p3##_type p3
1323#define GMOCK_INTERNAL_DECL_AND_5_VALUE_PARAMS(p0, p1, p2, p3, \
1324 p4) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4
1325#define GMOCK_INTERNAL_DECL_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, \
1326 p5) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \
1328#define GMOCK_INTERNAL_DECL_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
1329 p6) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \
1330 p5##_type p5, p6##_type p6
1331#define GMOCK_INTERNAL_DECL_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
1332 p7) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \
1333 p5##_type p5, p6##_type p6, p7##_type p7
1334#define GMOCK_INTERNAL_DECL_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
1335 p7, p8) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \
1336 p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8
1337#define GMOCK_INTERNAL_DECL_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
1338 p7, p8, p9) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \
1339 p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \
1343#define GMOCK_INTERNAL_COUNT_AND_0_VALUE_PARAMS()
1344#define GMOCK_INTERNAL_COUNT_AND_1_VALUE_PARAMS(p0) P
1345#define GMOCK_INTERNAL_COUNT_AND_2_VALUE_PARAMS(p0, p1) P2
1346#define GMOCK_INTERNAL_COUNT_AND_3_VALUE_PARAMS(p0, p1, p2) P3
1347#define GMOCK_INTERNAL_COUNT_AND_4_VALUE_PARAMS(p0, p1, p2, p3) P4
1348#define GMOCK_INTERNAL_COUNT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) P5
1349#define GMOCK_INTERNAL_COUNT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) P6
1350#define GMOCK_INTERNAL_COUNT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6) P7
1351#define GMOCK_INTERNAL_COUNT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
1353#define GMOCK_INTERNAL_COUNT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
1355#define GMOCK_INTERNAL_COUNT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
1359#define GMOCK_ACTION_CLASS_(name, value_params)\
1360 GTEST_CONCAT_TOKEN_(name##Action, GMOCK_INTERNAL_COUNT_##value_params)
1362#define ACTION_TEMPLATE(name, template_params, value_params)\
1363 template <GMOCK_INTERNAL_DECL_##template_params\
1364 GMOCK_INTERNAL_DECL_TYPE_##value_params>\
1365 class GMOCK_ACTION_CLASS_(name, value_params) {\
1367 explicit GMOCK_ACTION_CLASS_(name, value_params)\
1368 GMOCK_INTERNAL_INIT_##value_params {}\
1369 template <typename F>\
1370 class gmock_Impl : public ::testing::ActionInterface<F> {\
1372 typedef F function_type;\
1373 typedef typename ::testing::internal::Function<F>::Result return_type;\
1374 typedef typename ::testing::internal::Function<F>::ArgumentTuple\
1376 explicit gmock_Impl GMOCK_INTERNAL_INIT_##value_params {}\
1377 virtual return_type Perform(const args_type& args) {\
1378 return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
1379 Perform(this, args);\
1381 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1382 typename arg3_type, typename arg4_type, typename arg5_type, \
1383 typename arg6_type, typename arg7_type, typename arg8_type, \
1384 typename arg9_type>\
1385 return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \
1386 arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \
1387 arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \
1388 arg9_type arg9) const;\
1389 GMOCK_INTERNAL_DEFN_##value_params\
1391 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
1393 template <typename F> operator ::testing::Action<F>() const {\
1394 return ::testing::Action<F>(\
1395 new gmock_Impl<F>(GMOCK_INTERNAL_LIST_##value_params));\
1397 GMOCK_INTERNAL_DEFN_##value_params\
1399 GTEST_DISALLOW_ASSIGN_(GMOCK_ACTION_CLASS_(name, value_params));\
1401 template <GMOCK_INTERNAL_DECL_##template_params\
1402 GMOCK_INTERNAL_DECL_TYPE_##value_params>\
1403 inline GMOCK_ACTION_CLASS_(name, value_params)<\
1404 GMOCK_INTERNAL_LIST_##template_params\
1405 GMOCK_INTERNAL_LIST_TYPE_##value_params> name(\
1406 GMOCK_INTERNAL_DECL_##value_params) {\
1407 return GMOCK_ACTION_CLASS_(name, value_params)<\
1408 GMOCK_INTERNAL_LIST_##template_params\
1409 GMOCK_INTERNAL_LIST_TYPE_##value_params>(\
1410 GMOCK_INTERNAL_LIST_##value_params);\
1412 template <GMOCK_INTERNAL_DECL_##template_params\
1413 GMOCK_INTERNAL_DECL_TYPE_##value_params>\
1414 template <typename F>\
1415 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1416 typename arg3_type, typename arg4_type, typename arg5_type, \
1417 typename arg6_type, typename arg7_type, typename arg8_type, \
1418 typename arg9_type>\
1419 typename ::testing::internal::Function<F>::Result\
1420 GMOCK_ACTION_CLASS_(name, value_params)<\
1421 GMOCK_INTERNAL_LIST_##template_params\
1422 GMOCK_INTERNAL_LIST_TYPE_##value_params>::gmock_Impl<F>::\
1424 GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1426#define ACTION(name)\
1427 class name##Action {\
1430 template <typename F>\
1431 class gmock_Impl : public ::testing::ActionInterface<F> {\
1433 typedef F function_type;\
1434 typedef typename ::testing::internal::Function<F>::Result return_type;\
1435 typedef typename ::testing::internal::Function<F>::ArgumentTuple\
1438 virtual return_type Perform(const args_type& args) {\
1439 return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
1440 Perform(this, args);\
1442 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1443 typename arg3_type, typename arg4_type, typename arg5_type, \
1444 typename arg6_type, typename arg7_type, typename arg8_type, \
1445 typename arg9_type>\
1446 return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \
1447 arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \
1448 arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \
1449 arg9_type arg9) const;\
1451 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
1453 template <typename F> operator ::testing::Action<F>() const {\
1454 return ::testing::Action<F>(new gmock_Impl<F>());\
1457 GTEST_DISALLOW_ASSIGN_(name##Action);\
1459 inline name##Action name() {\
1460 return name##Action();\
1462 template <typename F>\
1463 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1464 typename arg3_type, typename arg4_type, typename arg5_type, \
1465 typename arg6_type, typename arg7_type, typename arg8_type, \
1466 typename arg9_type>\
1467 typename ::testing::internal::Function<F>::Result\
1468 name##Action::gmock_Impl<F>::gmock_PerformImpl(\
1469 GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1471#define ACTION_P(name, p0)\
1472 template <typename p0##_type>\
1473 class name##ActionP {\
1475 explicit name##ActionP(p0##_type gmock_p0) : \
1476 p0(::testing::internal::forward<p0##_type>(gmock_p0)) {}\
1477 template <typename F>\
1478 class gmock_Impl : public ::testing::ActionInterface<F> {\
1480 typedef F function_type;\
1481 typedef typename ::testing::internal::Function<F>::Result return_type;\
1482 typedef typename ::testing::internal::Function<F>::ArgumentTuple\
1484 explicit gmock_Impl(p0##_type gmock_p0) : \
1485 p0(::testing::internal::forward<p0##_type>(gmock_p0)) {}\
1486 virtual return_type Perform(const args_type& args) {\
1487 return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
1488 Perform(this, args);\
1490 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1491 typename arg3_type, typename arg4_type, typename arg5_type, \
1492 typename arg6_type, typename arg7_type, typename arg8_type, \
1493 typename arg9_type>\
1494 return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \
1495 arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \
1496 arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \
1497 arg9_type arg9) const;\
1500 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
1502 template <typename F> operator ::testing::Action<F>() const {\
1503 return ::testing::Action<F>(new gmock_Impl<F>(p0));\
1507 GTEST_DISALLOW_ASSIGN_(name##ActionP);\
1509 template <typename p0##_type>\
1510 inline name##ActionP<p0##_type> name(p0##_type p0) {\
1511 return name##ActionP<p0##_type>(p0);\
1513 template <typename p0##_type>\
1514 template <typename F>\
1515 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1516 typename arg3_type, typename arg4_type, typename arg5_type, \
1517 typename arg6_type, typename arg7_type, typename arg8_type, \
1518 typename arg9_type>\
1519 typename ::testing::internal::Function<F>::Result\
1520 name##ActionP<p0##_type>::gmock_Impl<F>::gmock_PerformImpl(\
1521 GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1523#define ACTION_P2(name, p0, p1)\
1524 template <typename p0##_type, typename p1##_type>\
1525 class name##ActionP2 {\
1527 name##ActionP2(p0##_type gmock_p0, \
1528 p1##_type gmock_p1) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
1529 p1(::testing::internal::forward<p1##_type>(gmock_p1)) {}\
1530 template <typename F>\
1531 class gmock_Impl : public ::testing::ActionInterface<F> {\
1533 typedef F function_type;\
1534 typedef typename ::testing::internal::Function<F>::Result return_type;\
1535 typedef typename ::testing::internal::Function<F>::ArgumentTuple\
1537 gmock_Impl(p0##_type gmock_p0, \
1538 p1##_type gmock_p1) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
1539 p1(::testing::internal::forward<p1##_type>(gmock_p1)) {}\
1540 virtual return_type Perform(const args_type& args) {\
1541 return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
1542 Perform(this, args);\
1544 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1545 typename arg3_type, typename arg4_type, typename arg5_type, \
1546 typename arg6_type, typename arg7_type, typename arg8_type, \
1547 typename arg9_type>\
1548 return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \
1549 arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \
1550 arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \
1551 arg9_type arg9) const;\
1555 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
1557 template <typename F> operator ::testing::Action<F>() const {\
1558 return ::testing::Action<F>(new gmock_Impl<F>(p0, p1));\
1563 GTEST_DISALLOW_ASSIGN_(name##ActionP2);\
1565 template <typename p0##_type, typename p1##_type>\
1566 inline name##ActionP2<p0##_type, p1##_type> name(p0##_type p0, \
1568 return name##ActionP2<p0##_type, p1##_type>(p0, p1);\
1570 template <typename p0##_type, typename p1##_type>\
1571 template <typename F>\
1572 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1573 typename arg3_type, typename arg4_type, typename arg5_type, \
1574 typename arg6_type, typename arg7_type, typename arg8_type, \
1575 typename arg9_type>\
1576 typename ::testing::internal::Function<F>::Result\
1577 name##ActionP2<p0##_type, p1##_type>::gmock_Impl<F>::gmock_PerformImpl(\
1578 GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1580#define ACTION_P3(name, p0, p1, p2)\
1581 template <typename p0##_type, typename p1##_type, typename p2##_type>\
1582 class name##ActionP3 {\
1584 name##ActionP3(p0##_type gmock_p0, p1##_type gmock_p1, \
1585 p2##_type gmock_p2) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
1586 p1(::testing::internal::forward<p1##_type>(gmock_p1)), \
1587 p2(::testing::internal::forward<p2##_type>(gmock_p2)) {}\
1588 template <typename F>\
1589 class gmock_Impl : public ::testing::ActionInterface<F> {\
1591 typedef F function_type;\
1592 typedef typename ::testing::internal::Function<F>::Result return_type;\
1593 typedef typename ::testing::internal::Function<F>::ArgumentTuple\
1595 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, \
1596 p2##_type gmock_p2) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
1597 p1(::testing::internal::forward<p1##_type>(gmock_p1)), \
1598 p2(::testing::internal::forward<p2##_type>(gmock_p2)) {}\
1599 virtual return_type Perform(const args_type& args) {\
1600 return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
1601 Perform(this, args);\
1603 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1604 typename arg3_type, typename arg4_type, typename arg5_type, \
1605 typename arg6_type, typename arg7_type, typename arg8_type, \
1606 typename arg9_type>\
1607 return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \
1608 arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \
1609 arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \
1610 arg9_type arg9) const;\
1615 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
1617 template <typename F> operator ::testing::Action<F>() const {\
1618 return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2));\
1624 GTEST_DISALLOW_ASSIGN_(name##ActionP3);\
1626 template <typename p0##_type, typename p1##_type, typename p2##_type>\
1627 inline name##ActionP3<p0##_type, p1##_type, p2##_type> name(p0##_type p0, \
1628 p1##_type p1, p2##_type p2) {\
1629 return name##ActionP3<p0##_type, p1##_type, p2##_type>(p0, p1, p2);\
1631 template <typename p0##_type, typename p1##_type, typename p2##_type>\
1632 template <typename F>\
1633 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1634 typename arg3_type, typename arg4_type, typename arg5_type, \
1635 typename arg6_type, typename arg7_type, typename arg8_type, \
1636 typename arg9_type>\
1637 typename ::testing::internal::Function<F>::Result\
1638 name##ActionP3<p0##_type, p1##_type, \
1639 p2##_type>::gmock_Impl<F>::gmock_PerformImpl(\
1640 GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1642#define ACTION_P4(name, p0, p1, p2, p3)\
1643 template <typename p0##_type, typename p1##_type, typename p2##_type, \
1644 typename p3##_type>\
1645 class name##ActionP4 {\
1647 name##ActionP4(p0##_type gmock_p0, p1##_type gmock_p1, \
1648 p2##_type gmock_p2, \
1649 p3##_type gmock_p3) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
1650 p1(::testing::internal::forward<p1##_type>(gmock_p1)), \
1651 p2(::testing::internal::forward<p2##_type>(gmock_p2)), \
1652 p3(::testing::internal::forward<p3##_type>(gmock_p3)) {}\
1653 template <typename F>\
1654 class gmock_Impl : public ::testing::ActionInterface<F> {\
1656 typedef F function_type;\
1657 typedef typename ::testing::internal::Function<F>::Result return_type;\
1658 typedef typename ::testing::internal::Function<F>::ArgumentTuple\
1660 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
1661 p3##_type gmock_p3) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
1662 p1(::testing::internal::forward<p1##_type>(gmock_p1)), \
1663 p2(::testing::internal::forward<p2##_type>(gmock_p2)), \
1664 p3(::testing::internal::forward<p3##_type>(gmock_p3)) {}\
1665 virtual return_type Perform(const args_type& args) {\
1666 return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
1667 Perform(this, args);\
1669 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1670 typename arg3_type, typename arg4_type, typename arg5_type, \
1671 typename arg6_type, typename arg7_type, typename arg8_type, \
1672 typename arg9_type>\
1673 return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \
1674 arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \
1675 arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \
1676 arg9_type arg9) const;\
1682 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
1684 template <typename F> operator ::testing::Action<F>() const {\
1685 return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3));\
1692 GTEST_DISALLOW_ASSIGN_(name##ActionP4);\
1694 template <typename p0##_type, typename p1##_type, typename p2##_type, \
1695 typename p3##_type>\
1696 inline name##ActionP4<p0##_type, p1##_type, p2##_type, \
1697 p3##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \
1699 return name##ActionP4<p0##_type, p1##_type, p2##_type, p3##_type>(p0, p1, \
1702 template <typename p0##_type, typename p1##_type, typename p2##_type, \
1703 typename p3##_type>\
1704 template <typename F>\
1705 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1706 typename arg3_type, typename arg4_type, typename arg5_type, \
1707 typename arg6_type, typename arg7_type, typename arg8_type, \
1708 typename arg9_type>\
1709 typename ::testing::internal::Function<F>::Result\
1710 name##ActionP4<p0##_type, p1##_type, p2##_type, \
1711 p3##_type>::gmock_Impl<F>::gmock_PerformImpl(\
1712 GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1714#define ACTION_P5(name, p0, p1, p2, p3, p4)\
1715 template <typename p0##_type, typename p1##_type, typename p2##_type, \
1716 typename p3##_type, typename p4##_type>\
1717 class name##ActionP5 {\
1719 name##ActionP5(p0##_type gmock_p0, p1##_type gmock_p1, \
1720 p2##_type gmock_p2, p3##_type gmock_p3, \
1721 p4##_type gmock_p4) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
1722 p1(::testing::internal::forward<p1##_type>(gmock_p1)), \
1723 p2(::testing::internal::forward<p2##_type>(gmock_p2)), \
1724 p3(::testing::internal::forward<p3##_type>(gmock_p3)), \
1725 p4(::testing::internal::forward<p4##_type>(gmock_p4)) {}\
1726 template <typename F>\
1727 class gmock_Impl : public ::testing::ActionInterface<F> {\
1729 typedef F function_type;\
1730 typedef typename ::testing::internal::Function<F>::Result return_type;\
1731 typedef typename ::testing::internal::Function<F>::ArgumentTuple\
1733 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
1734 p3##_type gmock_p3, \
1735 p4##_type gmock_p4) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
1736 p1(::testing::internal::forward<p1##_type>(gmock_p1)), \
1737 p2(::testing::internal::forward<p2##_type>(gmock_p2)), \
1738 p3(::testing::internal::forward<p3##_type>(gmock_p3)), \
1739 p4(::testing::internal::forward<p4##_type>(gmock_p4)) {}\
1740 virtual return_type Perform(const args_type& args) {\
1741 return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
1742 Perform(this, args);\
1744 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1745 typename arg3_type, typename arg4_type, typename arg5_type, \
1746 typename arg6_type, typename arg7_type, typename arg8_type, \
1747 typename arg9_type>\
1748 return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \
1749 arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \
1750 arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \
1751 arg9_type arg9) const;\
1758 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
1760 template <typename F> operator ::testing::Action<F>() const {\
1761 return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4));\
1769 GTEST_DISALLOW_ASSIGN_(name##ActionP5);\
1771 template <typename p0##_type, typename p1##_type, typename p2##_type, \
1772 typename p3##_type, typename p4##_type>\
1773 inline name##ActionP5<p0##_type, p1##_type, p2##_type, p3##_type, \
1774 p4##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \
1776 return name##ActionP5<p0##_type, p1##_type, p2##_type, p3##_type, \
1777 p4##_type>(p0, p1, p2, p3, p4);\
1779 template <typename p0##_type, typename p1##_type, typename p2##_type, \
1780 typename p3##_type, typename p4##_type>\
1781 template <typename F>\
1782 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1783 typename arg3_type, typename arg4_type, typename arg5_type, \
1784 typename arg6_type, typename arg7_type, typename arg8_type, \
1785 typename arg9_type>\
1786 typename ::testing::internal::Function<F>::Result\
1787 name##ActionP5<p0##_type, p1##_type, p2##_type, p3##_type, \
1788 p4##_type>::gmock_Impl<F>::gmock_PerformImpl(\
1789 GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1791#define ACTION_P6(name, p0, p1, p2, p3, p4, p5)\
1792 template <typename p0##_type, typename p1##_type, typename p2##_type, \
1793 typename p3##_type, typename p4##_type, typename p5##_type>\
1794 class name##ActionP6 {\
1796 name##ActionP6(p0##_type gmock_p0, p1##_type gmock_p1, \
1797 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \
1798 p5##_type gmock_p5) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
1799 p1(::testing::internal::forward<p1##_type>(gmock_p1)), \
1800 p2(::testing::internal::forward<p2##_type>(gmock_p2)), \
1801 p3(::testing::internal::forward<p3##_type>(gmock_p3)), \
1802 p4(::testing::internal::forward<p4##_type>(gmock_p4)), \
1803 p5(::testing::internal::forward<p5##_type>(gmock_p5)) {}\
1804 template <typename F>\
1805 class gmock_Impl : public ::testing::ActionInterface<F> {\
1807 typedef F function_type;\
1808 typedef typename ::testing::internal::Function<F>::Result return_type;\
1809 typedef typename ::testing::internal::Function<F>::ArgumentTuple\
1811 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
1812 p3##_type gmock_p3, p4##_type gmock_p4, \
1813 p5##_type gmock_p5) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
1814 p1(::testing::internal::forward<p1##_type>(gmock_p1)), \
1815 p2(::testing::internal::forward<p2##_type>(gmock_p2)), \
1816 p3(::testing::internal::forward<p3##_type>(gmock_p3)), \
1817 p4(::testing::internal::forward<p4##_type>(gmock_p4)), \
1818 p5(::testing::internal::forward<p5##_type>(gmock_p5)) {}\
1819 virtual return_type Perform(const args_type& args) {\
1820 return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
1821 Perform(this, args);\
1823 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1824 typename arg3_type, typename arg4_type, typename arg5_type, \
1825 typename arg6_type, typename arg7_type, typename arg8_type, \
1826 typename arg9_type>\
1827 return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \
1828 arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \
1829 arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \
1830 arg9_type arg9) const;\
1838 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
1840 template <typename F> operator ::testing::Action<F>() const {\
1841 return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5));\
1850 GTEST_DISALLOW_ASSIGN_(name##ActionP6);\
1852 template <typename p0##_type, typename p1##_type, typename p2##_type, \
1853 typename p3##_type, typename p4##_type, typename p5##_type>\
1854 inline name##ActionP6<p0##_type, p1##_type, p2##_type, p3##_type, \
1855 p4##_type, p5##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \
1856 p3##_type p3, p4##_type p4, p5##_type p5) {\
1857 return name##ActionP6<p0##_type, p1##_type, p2##_type, p3##_type, \
1858 p4##_type, p5##_type>(p0, p1, p2, p3, p4, p5);\
1860 template <typename p0##_type, typename p1##_type, typename p2##_type, \
1861 typename p3##_type, typename p4##_type, typename p5##_type>\
1862 template <typename F>\
1863 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1864 typename arg3_type, typename arg4_type, typename arg5_type, \
1865 typename arg6_type, typename arg7_type, typename arg8_type, \
1866 typename arg9_type>\
1867 typename ::testing::internal::Function<F>::Result\
1868 name##ActionP6<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
1869 p5##_type>::gmock_Impl<F>::gmock_PerformImpl(\
1870 GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1872#define ACTION_P7(name, p0, p1, p2, p3, p4, p5, p6)\
1873 template <typename p0##_type, typename p1##_type, typename p2##_type, \
1874 typename p3##_type, typename p4##_type, typename p5##_type, \
1875 typename p6##_type>\
1876 class name##ActionP7 {\
1878 name##ActionP7(p0##_type gmock_p0, p1##_type gmock_p1, \
1879 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \
1880 p5##_type gmock_p5, \
1881 p6##_type gmock_p6) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
1882 p1(::testing::internal::forward<p1##_type>(gmock_p1)), \
1883 p2(::testing::internal::forward<p2##_type>(gmock_p2)), \
1884 p3(::testing::internal::forward<p3##_type>(gmock_p3)), \
1885 p4(::testing::internal::forward<p4##_type>(gmock_p4)), \
1886 p5(::testing::internal::forward<p5##_type>(gmock_p5)), \
1887 p6(::testing::internal::forward<p6##_type>(gmock_p6)) {}\
1888 template <typename F>\
1889 class gmock_Impl : public ::testing::ActionInterface<F> {\
1891 typedef F function_type;\
1892 typedef typename ::testing::internal::Function<F>::Result return_type;\
1893 typedef typename ::testing::internal::Function<F>::ArgumentTuple\
1895 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
1896 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
1897 p6##_type gmock_p6) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
1898 p1(::testing::internal::forward<p1##_type>(gmock_p1)), \
1899 p2(::testing::internal::forward<p2##_type>(gmock_p2)), \
1900 p3(::testing::internal::forward<p3##_type>(gmock_p3)), \
1901 p4(::testing::internal::forward<p4##_type>(gmock_p4)), \
1902 p5(::testing::internal::forward<p5##_type>(gmock_p5)), \
1903 p6(::testing::internal::forward<p6##_type>(gmock_p6)) {}\
1904 virtual return_type Perform(const args_type& args) {\
1905 return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
1906 Perform(this, args);\
1908 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1909 typename arg3_type, typename arg4_type, typename arg5_type, \
1910 typename arg6_type, typename arg7_type, typename arg8_type, \
1911 typename arg9_type>\
1912 return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \
1913 arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \
1914 arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \
1915 arg9_type arg9) const;\
1924 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
1926 template <typename F> operator ::testing::Action<F>() const {\
1927 return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \
1938 GTEST_DISALLOW_ASSIGN_(name##ActionP7);\
1940 template <typename p0##_type, typename p1##_type, typename p2##_type, \
1941 typename p3##_type, typename p4##_type, typename p5##_type, \
1942 typename p6##_type>\
1943 inline name##ActionP7<p0##_type, p1##_type, p2##_type, p3##_type, \
1944 p4##_type, p5##_type, p6##_type> name(p0##_type p0, p1##_type p1, \
1945 p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \
1947 return name##ActionP7<p0##_type, p1##_type, p2##_type, p3##_type, \
1948 p4##_type, p5##_type, p6##_type>(p0, p1, p2, p3, p4, p5, p6);\
1950 template <typename p0##_type, typename p1##_type, typename p2##_type, \
1951 typename p3##_type, typename p4##_type, typename p5##_type, \
1952 typename p6##_type>\
1953 template <typename F>\
1954 template <typename arg0_type, typename arg1_type, typename arg2_type, \
1955 typename arg3_type, typename arg4_type, typename arg5_type, \
1956 typename arg6_type, typename arg7_type, typename arg8_type, \
1957 typename arg9_type>\
1958 typename ::testing::internal::Function<F>::Result\
1959 name##ActionP7<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
1960 p5##_type, p6##_type>::gmock_Impl<F>::gmock_PerformImpl(\
1961 GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1963#define ACTION_P8(name, p0, p1, p2, p3, p4, p5, p6, p7)\
1964 template <typename p0##_type, typename p1##_type, typename p2##_type, \
1965 typename p3##_type, typename p4##_type, typename p5##_type, \
1966 typename p6##_type, typename p7##_type>\
1967 class name##ActionP8 {\
1969 name##ActionP8(p0##_type gmock_p0, p1##_type gmock_p1, \
1970 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \
1971 p5##_type gmock_p5, p6##_type gmock_p6, \
1972 p7##_type gmock_p7) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
1973 p1(::testing::internal::forward<p1##_type>(gmock_p1)), \
1974 p2(::testing::internal::forward<p2##_type>(gmock_p2)), \
1975 p3(::testing::internal::forward<p3##_type>(gmock_p3)), \
1976 p4(::testing::internal::forward<p4##_type>(gmock_p4)), \
1977 p5(::testing::internal::forward<p5##_type>(gmock_p5)), \
1978 p6(::testing::internal::forward<p6##_type>(gmock_p6)), \
1979 p7(::testing::internal::forward<p7##_type>(gmock_p7)) {}\
1980 template <typename F>\
1981 class gmock_Impl : public ::testing::ActionInterface<F> {\
1983 typedef F function_type;\
1984 typedef typename ::testing::internal::Function<F>::Result return_type;\
1985 typedef typename ::testing::internal::Function<F>::ArgumentTuple\
1987 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
1988 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
1989 p6##_type gmock_p6, \
1990 p7##_type gmock_p7) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
1991 p1(::testing::internal::forward<p1##_type>(gmock_p1)), \
1992 p2(::testing::internal::forward<p2##_type>(gmock_p2)), \
1993 p3(::testing::internal::forward<p3##_type>(gmock_p3)), \
1994 p4(::testing::internal::forward<p4##_type>(gmock_p4)), \
1995 p5(::testing::internal::forward<p5##_type>(gmock_p5)), \
1996 p6(::testing::internal::forward<p6##_type>(gmock_p6)), \
1997 p7(::testing::internal::forward<p7##_type>(gmock_p7)) {}\
1998 virtual return_type Perform(const args_type& args) {\
1999 return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
2000 Perform(this, args);\
2002 template <typename arg0_type, typename arg1_type, typename arg2_type, \
2003 typename arg3_type, typename arg4_type, typename arg5_type, \
2004 typename arg6_type, typename arg7_type, typename arg8_type, \
2005 typename arg9_type>\
2006 return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \
2007 arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \
2008 arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \
2009 arg9_type arg9) const;\
2019 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
2021 template <typename F> operator ::testing::Action<F>() const {\
2022 return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \
2034 GTEST_DISALLOW_ASSIGN_(name##ActionP8);\
2036 template <typename p0##_type, typename p1##_type, typename p2##_type, \
2037 typename p3##_type, typename p4##_type, typename p5##_type, \
2038 typename p6##_type, typename p7##_type>\
2039 inline name##ActionP8<p0##_type, p1##_type, p2##_type, p3##_type, \
2040 p4##_type, p5##_type, p6##_type, p7##_type> name(p0##_type p0, \
2041 p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \
2042 p6##_type p6, p7##_type p7) {\
2043 return name##ActionP8<p0##_type, p1##_type, p2##_type, p3##_type, \
2044 p4##_type, p5##_type, p6##_type, p7##_type>(p0, p1, p2, p3, p4, p5, \
2047 template <typename p0##_type, typename p1##_type, typename p2##_type, \
2048 typename p3##_type, typename p4##_type, typename p5##_type, \
2049 typename p6##_type, typename p7##_type>\
2050 template <typename F>\
2051 template <typename arg0_type, typename arg1_type, typename arg2_type, \
2052 typename arg3_type, typename arg4_type, typename arg5_type, \
2053 typename arg6_type, typename arg7_type, typename arg8_type, \
2054 typename arg9_type>\
2055 typename ::testing::internal::Function<F>::Result\
2056 name##ActionP8<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
2057 p5##_type, p6##_type, \
2058 p7##_type>::gmock_Impl<F>::gmock_PerformImpl(\
2059 GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
2061#define ACTION_P9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8)\
2062 template <typename p0##_type, typename p1##_type, typename p2##_type, \
2063 typename p3##_type, typename p4##_type, typename p5##_type, \
2064 typename p6##_type, typename p7##_type, typename p8##_type>\
2065 class name##ActionP9 {\
2067 name##ActionP9(p0##_type gmock_p0, p1##_type gmock_p1, \
2068 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \
2069 p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \
2070 p8##_type gmock_p8) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
2071 p1(::testing::internal::forward<p1##_type>(gmock_p1)), \
2072 p2(::testing::internal::forward<p2##_type>(gmock_p2)), \
2073 p3(::testing::internal::forward<p3##_type>(gmock_p3)), \
2074 p4(::testing::internal::forward<p4##_type>(gmock_p4)), \
2075 p5(::testing::internal::forward<p5##_type>(gmock_p5)), \
2076 p6(::testing::internal::forward<p6##_type>(gmock_p6)), \
2077 p7(::testing::internal::forward<p7##_type>(gmock_p7)), \
2078 p8(::testing::internal::forward<p8##_type>(gmock_p8)) {}\
2079 template <typename F>\
2080 class gmock_Impl : public ::testing::ActionInterface<F> {\
2082 typedef F function_type;\
2083 typedef typename ::testing::internal::Function<F>::Result return_type;\
2084 typedef typename ::testing::internal::Function<F>::ArgumentTuple\
2086 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
2087 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
2088 p6##_type gmock_p6, p7##_type gmock_p7, \
2089 p8##_type gmock_p8) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
2090 p1(::testing::internal::forward<p1##_type>(gmock_p1)), \
2091 p2(::testing::internal::forward<p2##_type>(gmock_p2)), \
2092 p3(::testing::internal::forward<p3##_type>(gmock_p3)), \
2093 p4(::testing::internal::forward<p4##_type>(gmock_p4)), \
2094 p5(::testing::internal::forward<p5##_type>(gmock_p5)), \
2095 p6(::testing::internal::forward<p6##_type>(gmock_p6)), \
2096 p7(::testing::internal::forward<p7##_type>(gmock_p7)), \
2097 p8(::testing::internal::forward<p8##_type>(gmock_p8)) {}\
2098 virtual return_type Perform(const args_type& args) {\
2099 return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
2100 Perform(this, args);\
2102 template <typename arg0_type, typename arg1_type, typename arg2_type, \
2103 typename arg3_type, typename arg4_type, typename arg5_type, \
2104 typename arg6_type, typename arg7_type, typename arg8_type, \
2105 typename arg9_type>\
2106 return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \
2107 arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \
2108 arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \
2109 arg9_type arg9) const;\
2120 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
2122 template <typename F> operator ::testing::Action<F>() const {\
2123 return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \
2136 GTEST_DISALLOW_ASSIGN_(name##ActionP9);\
2138 template <typename p0##_type, typename p1##_type, typename p2##_type, \
2139 typename p3##_type, typename p4##_type, typename p5##_type, \
2140 typename p6##_type, typename p7##_type, typename p8##_type>\
2141 inline name##ActionP9<p0##_type, p1##_type, p2##_type, p3##_type, \
2142 p4##_type, p5##_type, p6##_type, p7##_type, \
2143 p8##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \
2144 p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, \
2146 return name##ActionP9<p0##_type, p1##_type, p2##_type, p3##_type, \
2147 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type>(p0, p1, p2, \
2148 p3, p4, p5, p6, p7, p8);\
2150 template <typename p0##_type, typename p1##_type, typename p2##_type, \
2151 typename p3##_type, typename p4##_type, typename p5##_type, \
2152 typename p6##_type, typename p7##_type, typename p8##_type>\
2153 template <typename F>\
2154 template <typename arg0_type, typename arg1_type, typename arg2_type, \
2155 typename arg3_type, typename arg4_type, typename arg5_type, \
2156 typename arg6_type, typename arg7_type, typename arg8_type, \
2157 typename arg9_type>\
2158 typename ::testing::internal::Function<F>::Result\
2159 name##ActionP9<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
2160 p5##_type, p6##_type, p7##_type, \
2161 p8##_type>::gmock_Impl<F>::gmock_PerformImpl(\
2162 GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
2164#define ACTION_P10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)\
2165 template <typename p0##_type, typename p1##_type, typename p2##_type, \
2166 typename p3##_type, typename p4##_type, typename p5##_type, \
2167 typename p6##_type, typename p7##_type, typename p8##_type, \
2168 typename p9##_type>\
2169 class name##ActionP10 {\
2171 name##ActionP10(p0##_type gmock_p0, p1##_type gmock_p1, \
2172 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \
2173 p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \
2174 p8##_type gmock_p8, \
2175 p9##_type gmock_p9) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
2176 p1(::testing::internal::forward<p1##_type>(gmock_p1)), \
2177 p2(::testing::internal::forward<p2##_type>(gmock_p2)), \
2178 p3(::testing::internal::forward<p3##_type>(gmock_p3)), \
2179 p4(::testing::internal::forward<p4##_type>(gmock_p4)), \
2180 p5(::testing::internal::forward<p5##_type>(gmock_p5)), \
2181 p6(::testing::internal::forward<p6##_type>(gmock_p6)), \
2182 p7(::testing::internal::forward<p7##_type>(gmock_p7)), \
2183 p8(::testing::internal::forward<p8##_type>(gmock_p8)), \
2184 p9(::testing::internal::forward<p9##_type>(gmock_p9)) {}\
2185 template <typename F>\
2186 class gmock_Impl : public ::testing::ActionInterface<F> {\
2188 typedef F function_type;\
2189 typedef typename ::testing::internal::Function<F>::Result return_type;\
2190 typedef typename ::testing::internal::Function<F>::ArgumentTuple\
2192 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
2193 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
2194 p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \
2195 p9##_type gmock_p9) : p0(::testing::internal::forward<p0##_type>(gmock_p0)), \
2196 p1(::testing::internal::forward<p1##_type>(gmock_p1)), \
2197 p2(::testing::internal::forward<p2##_type>(gmock_p2)), \
2198 p3(::testing::internal::forward<p3##_type>(gmock_p3)), \
2199 p4(::testing::internal::forward<p4##_type>(gmock_p4)), \
2200 p5(::testing::internal::forward<p5##_type>(gmock_p5)), \
2201 p6(::testing::internal::forward<p6##_type>(gmock_p6)), \
2202 p7(::testing::internal::forward<p7##_type>(gmock_p7)), \
2203 p8(::testing::internal::forward<p8##_type>(gmock_p8)), \
2204 p9(::testing::internal::forward<p9##_type>(gmock_p9)) {}\
2205 virtual return_type Perform(const args_type& args) {\
2206 return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
2207 Perform(this, args);\
2209 template <typename arg0_type, typename arg1_type, typename arg2_type, \
2210 typename arg3_type, typename arg4_type, typename arg5_type, \
2211 typename arg6_type, typename arg7_type, typename arg8_type, \
2212 typename arg9_type>\
2213 return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \
2214 arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \
2215 arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \
2216 arg9_type arg9) const;\
2228 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
2230 template <typename F> operator ::testing::Action<F>() const {\
2231 return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \
2245 GTEST_DISALLOW_ASSIGN_(name##ActionP10);\
2247 template <typename p0##_type, typename p1##_type, typename p2##_type, \
2248 typename p3##_type, typename p4##_type, typename p5##_type, \
2249 typename p6##_type, typename p7##_type, typename p8##_type, \
2250 typename p9##_type>\
2251 inline name##ActionP10<p0##_type, p1##_type, p2##_type, p3##_type, \
2252 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \
2253 p9##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \
2254 p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \
2256 return name##ActionP10<p0##_type, p1##_type, p2##_type, p3##_type, \
2257 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, p9##_type>(p0, \
2258 p1, p2, p3, p4, p5, p6, p7, p8, p9);\
2260 template <typename p0##_type, typename p1##_type, typename p2##_type, \
2261 typename p3##_type, typename p4##_type, typename p5##_type, \
2262 typename p6##_type, typename p7##_type, typename p8##_type, \
2263 typename p9##_type>\
2264 template <typename F>\
2265 template <typename arg0_type, typename arg1_type, typename arg2_type, \
2266 typename arg3_type, typename arg4_type, typename arg5_type, \
2267 typename arg6_type, typename arg7_type, typename arg8_type, \
2268 typename arg9_type>\
2269 typename ::testing::internal::Function<F>::Result\
2270 name##ActionP10<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
2271 p5##_type, p6##_type, p7##_type, p8##_type, \
2272 p9##_type>::gmock_Impl<F>::gmock_PerformImpl(\
2273 GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
2284# pragma warning(push)
2285# pragma warning(disable:4100)
2319namespace invoke_argument {
2330template <
typename R,
typename F>
2334template <
typename R,
typename F,
typename A1>
2338template <
typename R,
typename F,
typename A1,
typename A2>
2342template <
typename R,
typename F,
typename A1,
typename A2,
typename A3>
2344 return f(a1, a2, a3);
2346template <
typename R,
typename F,
typename A1,
typename A2,
typename A3,
2349 return f(a1, a2, a3, a4);
2351template <
typename R,
typename F,
typename A1,
typename A2,
typename A3,
2352 typename A4,
typename A5>
2354 return f(a1, a2, a3, a4, a5);
2356template <
typename R,
typename F,
typename A1,
typename A2,
typename A3,
2357 typename A4,
typename A5,
typename A6>
2359 return f(a1, a2, a3, a4, a5, a6);
2361template <
typename R,
typename F,
typename A1,
typename A2,
typename A3,
2362 typename A4,
typename A5,
typename A6,
typename A7>
2365 return f(a1, a2, a3, a4, a5, a6, a7);
2367template <
typename R,
typename F,
typename A1,
typename A2,
typename A3,
2368 typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
2371 return f(a1, a2, a3, a4, a5, a6, a7, a8);
2373template <
typename R,
typename F,
typename A1,
typename A2,
typename A3,
2374 typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
2377 A7 a7, A8 a8, A9 a9) {
2378 return f(a1, a2, a3, a4, a5, a6, a7, a8, a9);
2380template <
typename R,
typename F,
typename A1,
typename A2,
typename A3,
2381 typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
2382 typename A9,
typename A10>
2384 A7 a7, A8 a8, A9 a9, A10 a10) {
2385 return f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
2391 HAS_1_TEMPLATE_PARAMS(
int, k),
2392 AND_0_VALUE_PARAMS()) {
2394 return InvokeArgumentAdl<return_type>(
2396 ::testing::get<k>(args));
2400 HAS_1_TEMPLATE_PARAMS(
int, k),
2401 AND_1_VALUE_PARAMS(p0)) {
2403 return InvokeArgumentAdl<return_type>(
2405 ::testing::get<k>(args), p0);
2409 HAS_1_TEMPLATE_PARAMS(
int, k),
2410 AND_2_VALUE_PARAMS(p0, p1)) {
2412 return InvokeArgumentAdl<return_type>(
2414 ::testing::get<k>(args), p0, p1);
2418 HAS_1_TEMPLATE_PARAMS(
int, k),
2419 AND_3_VALUE_PARAMS(p0, p1, p2)) {
2421 return InvokeArgumentAdl<return_type>(
2423 ::testing::get<k>(args), p0, p1, p2);
2427 HAS_1_TEMPLATE_PARAMS(
int, k),
2428 AND_4_VALUE_PARAMS(p0, p1, p2, p3)) {
2430 return InvokeArgumentAdl<return_type>(
2432 ::testing::get<k>(args), p0, p1, p2, p3);
2436 HAS_1_TEMPLATE_PARAMS(
int, k),
2437 AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)) {
2439 return InvokeArgumentAdl<return_type>(
2441 ::testing::get<k>(args), p0, p1, p2, p3, p4);
2445 HAS_1_TEMPLATE_PARAMS(
int, k),
2446 AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)) {
2448 return InvokeArgumentAdl<return_type>(
2450 ::testing::get<k>(args), p0, p1, p2, p3, p4, p5);
2454 HAS_1_TEMPLATE_PARAMS(
int, k),
2455 AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)) {
2457 return InvokeArgumentAdl<return_type>(
2459 ::testing::get<k>(args), p0, p1, p2, p3, p4, p5, p6);
2463 HAS_1_TEMPLATE_PARAMS(
int, k),
2464 AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)) {
2466 return InvokeArgumentAdl<return_type>(
2468 ::testing::get<k>(args), p0, p1, p2, p3, p4, p5, p6, p7);
2472 HAS_1_TEMPLATE_PARAMS(
int, k),
2473 AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8)) {
2475 return InvokeArgumentAdl<return_type>(
2477 ::testing::get<k>(args), p0, p1, p2, p3, p4, p5, p6, p7, p8);
2481 HAS_1_TEMPLATE_PARAMS(
int, k),
2482 AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) {
2484 return InvokeArgumentAdl<return_type>(
2486 ::testing::get<k>(args), p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
2495 HAS_1_TEMPLATE_PARAMS(
typename,
T),
2496 AND_0_VALUE_PARAMS()) {
2501 HAS_1_TEMPLATE_PARAMS(
typename,
T),
2502 AND_1_VALUE_PARAMS(p0)) {
2507 HAS_1_TEMPLATE_PARAMS(
typename,
T),
2508 AND_2_VALUE_PARAMS(p0, p1)) {
2509 return new T(p0, p1);
2513 HAS_1_TEMPLATE_PARAMS(
typename,
T),
2514 AND_3_VALUE_PARAMS(p0, p1, p2)) {
2515 return new T(p0, p1, p2);
2519 HAS_1_TEMPLATE_PARAMS(
typename,
T),
2520 AND_4_VALUE_PARAMS(p0, p1, p2, p3)) {
2521 return new T(p0, p1, p2, p3);
2525 HAS_1_TEMPLATE_PARAMS(
typename,
T),
2526 AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)) {
2527 return new T(p0, p1, p2, p3, p4);
2531 HAS_1_TEMPLATE_PARAMS(
typename,
T),
2532 AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)) {
2533 return new T(p0, p1, p2, p3, p4, p5);
2537 HAS_1_TEMPLATE_PARAMS(
typename,
T),
2538 AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)) {
2539 return new T(p0, p1, p2, p3, p4, p5, p6);
2543 HAS_1_TEMPLATE_PARAMS(
typename,
T),
2544 AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)) {
2545 return new T(p0, p1, p2, p3, p4, p5, p6, p7);
2549 HAS_1_TEMPLATE_PARAMS(
typename,
T),
2550 AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8)) {
2551 return new T(p0, p1, p2, p3, p4, p5, p6, p7, p8);
2555 HAS_1_TEMPLATE_PARAMS(
typename,
T),
2556 AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) {
2557 return new T(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
2561# pragma warning(pop)
Result Perform(ArgumentTuple args) const
static Result Perform(Impl *impl, const ::testing::tuple< A0 > &args)
static Result Perform(Impl *impl, const ::testing::tuple< A0, A1, A2, A3, A4, A5, A6, A7 > &args)
static Result Perform(Impl *impl, const ::testing::tuple<> &args)
static Result Perform(Impl *impl, const ::testing::tuple< A0, A1, A2, A3 > &args)
static Result Perform(Impl *impl, const ::testing::tuple< A0, A1, A2, A3, A4, A5, A6 > &args)
static Result Perform(Impl *impl, const ::testing::tuple< A0, A1, A2, A3, A4, A5 > &args)
static Result Perform(Impl *impl, const ::testing::tuple< A0, A1 > &args)
static Result Perform(Impl *impl, const ::testing::tuple< A0, A1, A2 > &args)
static Result Perform(Impl *impl, const ::testing::tuple< A0, A1, A2, A3, A4, A5, A6, A7, A8, A9 > &args)
static Result Perform(Impl *impl, const ::testing::tuple< A0, A1, A2, A3, A4, A5, A6, A7, A8 > &args)
static Result Perform(Impl *impl, const ::testing::tuple< A0, A1, A2, A3, A4 > &args)
InvokeCallbackAction(CallbackType *callback)
Result Perform(const ArgumentTuple &args) const
static R InvokeCallback(CallbackType *callback, const ::testing::tuple< A1, A2, A3, A4 > &args)
static R InvokeMethod(Class *obj_ptr, MethodPtr method_ptr, const ::testing::tuple< A1, A2, A3, A4 > &args)
static R Invoke(Function function, const ::testing::tuple< A1, A2, A3, A4 > &args)
static R InvokeCallback(CallbackType *callback, const ::testing::tuple< A1, A2, A3 > &args)
static R InvokeMethod(Class *obj_ptr, MethodPtr method_ptr, const ::testing::tuple< A1, A2, A3 > &args)
static R Invoke(Function function, const ::testing::tuple< A1, A2, A3 > &args)
static R Invoke(Function function, const ::testing::tuple< A1, A2, A3, A4, A5, A6 > &args)
static R InvokeMethod(Class *obj_ptr, MethodPtr method_ptr, const ::testing::tuple< A1, A2, A3, A4, A5, A6 > &args)
static R Invoke(Function function, const ::testing::tuple< A1, A2, A3, A4, A5 > &args)
static R InvokeMethod(Class *obj_ptr, MethodPtr method_ptr, const ::testing::tuple< A1, A2, A3, A4, A5 > &args)
static R InvokeCallback(CallbackType *callback, const ::testing::tuple< A1, A2, A3, A4, A5 > &args)
static R Invoke(Function function, const ::testing::tuple< A1, A2, A3, A4, A5, A6, A7 > &args)
static R InvokeMethod(Class *obj_ptr, MethodPtr method_ptr, const ::testing::tuple< A1, A2, A3, A4, A5, A6, A7 > &args)
static R InvokeMethod(Class *obj_ptr, MethodPtr method_ptr, const ::testing::tuple< A1, A2, A3, A4, A5, A6, A7, A8 > &args)
static R Invoke(Function function, const ::testing::tuple< A1, A2, A3, A4, A5, A6, A7, A8 > &args)
static R InvokeMethod(Class *obj_ptr, MethodPtr method_ptr, const ::testing::tuple< A1, A2, A3, A4, A5, A6, A7, A8, A9 > &args)
static R Invoke(Function function, const ::testing::tuple< A1, A2, A3, A4, A5, A6, A7, A8, A9 > &args)
testing::internal::InvokeHelper< R, ::testing::tuple< A1, A2, A3, A4, A5, A6, A7, A8, A9, A10 > >::InvokeMethod static R InvokeMethod(Class *obj_ptr, MethodPtr method_ptr, const ::testing::tuple< A1, A2, A3, A4, A5, A6, A7, A8, A9, A10 > &args)
testing::internal::InvokeHelper< R, ::testing::tuple< A1, A2, A3, A4, A5, A6, A7, A8, A9, A10 > >::Invoke static R Invoke(Function function, const ::testing::tuple< A1, A2, A3, A4, A5, A6, A7, A8, A9, A10 > &args)
static R InvokeMethod(Class *obj_ptr, MethodPtr method_ptr, const ::testing::tuple< A1, A2 > &args)
static R InvokeCallback(CallbackType *callback, const ::testing::tuple< A1, A2 > &args)
static R Invoke(Function function, const ::testing::tuple< A1, A2 > &args)
static R InvokeCallback(CallbackType *callback, const ::testing::tuple< A1 > &args)
static R Invoke(Function function, const ::testing::tuple< A1 > &args)
static R InvokeMethod(Class *obj_ptr, MethodPtr method_ptr, const ::testing::tuple< A1 > &args)
static R InvokeMethod(Class *obj_ptr, MethodPtr method_ptr, const ::testing::tuple<> &)
static R Invoke(Function function, const ::testing::tuple<> &)
static R InvokeCallback(CallbackType *callback, const ::testing::tuple<> &)
testing::internal::SelectArgs< Result, ArgumentTuple, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 >::type Result type()
testing::internal::SelectArgs< Result, ArgumentTuple, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 >::Select static SelectedArgs Select(const ArgumentTuple &)
testing::internal::SelectArgs< Result, ArgumentTuple, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 >::SelectedArgs Function< type >::ArgumentTuple SelectedArgs
testing::internal::SelectArgs< Result, ArgumentTuple, k1, -1, -1, -1, -1, -1, -1, -1, -1, -1 >::Select static SelectedArgs Select(const ArgumentTuple &args)
testing::internal::SelectArgs< Result, ArgumentTuple, k1, -1, -1, -1, -1, -1, -1, -1, -1, -1 >::type Result type(GMOCK_FIELD_(ArgumentTuple, k1))
testing::internal::SelectArgs< Result, ArgumentTuple, k1, -1, -1, -1, -1, -1, -1, -1, -1, -1 >::SelectedArgs Function< type >::ArgumentTuple SelectedArgs
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, -1, -1, -1, -1, -1, -1, -1, -1 >::SelectedArgs Function< type >::ArgumentTuple SelectedArgs
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, -1, -1, -1, -1, -1, -1, -1, -1 >::type Result type(GMOCK_FIELD_(ArgumentTuple, k1), GMOCK_FIELD_(ArgumentTuple, k2))
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, -1, -1, -1, -1, -1, -1, -1, -1 >::Select static SelectedArgs Select(const ArgumentTuple &args)
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, k5, k6, -1, -1, -1, -1 >::type Result type(GMOCK_FIELD_(ArgumentTuple, k1), GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), GMOCK_FIELD_(ArgumentTuple, k6))
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, k5, k6, -1, -1, -1, -1 >::SelectedArgs Function< type >::ArgumentTuple SelectedArgs
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, k5, k6, -1, -1, -1, -1 >::Select static SelectedArgs Select(const ArgumentTuple &args)
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, -1, -1, -1, -1, -1, -1, -1 >::SelectedArgs Function< type >::ArgumentTuple SelectedArgs
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, -1, -1, -1, -1, -1, -1, -1 >::type Result type(GMOCK_FIELD_(ArgumentTuple, k1), GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3))
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, -1, -1, -1, -1, -1, -1, -1 >::Select static SelectedArgs Select(const ArgumentTuple &args)
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, k5, -1, -1, -1, -1, -1 >::Select static SelectedArgs Select(const ArgumentTuple &args)
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, k5, -1, -1, -1, -1, -1 >::SelectedArgs Function< type >::ArgumentTuple SelectedArgs
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, k5, -1, -1, -1, -1, -1 >::type Result type(GMOCK_FIELD_(ArgumentTuple, k1), GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5))
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, k5, k6, k7, k8, k9, -1 >::SelectedArgs Function< type >::ArgumentTuple SelectedArgs
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, k5, k6, k7, k8, k9, -1 >::Select static SelectedArgs Select(const ArgumentTuple &args)
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, k5, k6, k7, k8, k9, -1 >::type Result type(GMOCK_FIELD_(ArgumentTuple, k1), GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7), GMOCK_FIELD_(ArgumentTuple, k8), GMOCK_FIELD_(ArgumentTuple, k9))
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, -1, -1, -1, -1, -1, -1 >::SelectedArgs Function< type >::ArgumentTuple SelectedArgs
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, -1, -1, -1, -1, -1, -1 >::Select static SelectedArgs Select(const ArgumentTuple &args)
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, -1, -1, -1, -1, -1, -1 >::type Result type(GMOCK_FIELD_(ArgumentTuple, k1), GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), GMOCK_FIELD_(ArgumentTuple, k4))
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, k5, k6, k7, k8, -1, -1 >::Select static SelectedArgs Select(const ArgumentTuple &args)
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, k5, k6, k7, k8, -1, -1 >::type Result type(GMOCK_FIELD_(ArgumentTuple, k1), GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7), GMOCK_FIELD_(ArgumentTuple, k8))
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, k5, k6, k7, k8, -1, -1 >::SelectedArgs Function< type >::ArgumentTuple SelectedArgs
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, k5, k6, k7, -1, -1, -1 >::Select static SelectedArgs Select(const ArgumentTuple &args)
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, k5, k6, k7, -1, -1, -1 >::SelectedArgs Function< type >::ArgumentTuple SelectedArgs
testing::internal::SelectArgs< Result, ArgumentTuple, k1, k2, k3, k4, k5, k6, k7, -1, -1, -1 >::type Result type(GMOCK_FIELD_(ArgumentTuple, k1), GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7))
static SelectedArgs Select(const ArgumentTuple &args)
Result type(GMOCK_FIELD_(ArgumentTuple, k1), GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7), GMOCK_FIELD_(ArgumentTuple, k8), GMOCK_FIELD_(ArgumentTuple, k9), GMOCK_FIELD_(ArgumentTuple, k10))
Function< type >::ArgumentTuple SelectedArgs
WithArgsAction(const InnerAction &action)
#define GMOCK_FIELD_(Tuple, N)
#define ACTION_TEMPLATE(name, template_params, value_params)
#define GTEST_DISALLOW_ASSIGN_(type)
R InvokeArgumentAdl(AdlTag, F f)
internal::WithArgsAction< InnerAction, k1 > WithArgs(const InnerAction &action)
Action< F > MakeAction(ActionInterface< F > *impl)
internal::DoBothAction< Action1, Action2 > DoAll(Action1 a1, Action2 a2)
#define T(meth, val, expected)