gmock-generated-actions.h revision 13481
113481Sgiacomo.travaglini@arm.com// This file was GENERATED by a script. DO NOT EDIT BY HAND!!! 213481Sgiacomo.travaglini@arm.com 313481Sgiacomo.travaglini@arm.com// Copyright 2007, Google Inc. 413481Sgiacomo.travaglini@arm.com// All rights reserved. 513481Sgiacomo.travaglini@arm.com// 613481Sgiacomo.travaglini@arm.com// Redistribution and use in source and binary forms, with or without 713481Sgiacomo.travaglini@arm.com// modification, are permitted provided that the following conditions are 813481Sgiacomo.travaglini@arm.com// met: 913481Sgiacomo.travaglini@arm.com// 1013481Sgiacomo.travaglini@arm.com// * Redistributions of source code must retain the above copyright 1113481Sgiacomo.travaglini@arm.com// notice, this list of conditions and the following disclaimer. 1213481Sgiacomo.travaglini@arm.com// * Redistributions in binary form must reproduce the above 1313481Sgiacomo.travaglini@arm.com// copyright notice, this list of conditions and the following disclaimer 1413481Sgiacomo.travaglini@arm.com// in the documentation and/or other materials provided with the 1513481Sgiacomo.travaglini@arm.com// distribution. 1613481Sgiacomo.travaglini@arm.com// * Neither the name of Google Inc. nor the names of its 1713481Sgiacomo.travaglini@arm.com// contributors may be used to endorse or promote products derived from 1813481Sgiacomo.travaglini@arm.com// this software without specific prior written permission. 1913481Sgiacomo.travaglini@arm.com// 2013481Sgiacomo.travaglini@arm.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2113481Sgiacomo.travaglini@arm.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2213481Sgiacomo.travaglini@arm.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2313481Sgiacomo.travaglini@arm.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2413481Sgiacomo.travaglini@arm.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2513481Sgiacomo.travaglini@arm.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2613481Sgiacomo.travaglini@arm.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2713481Sgiacomo.travaglini@arm.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2813481Sgiacomo.travaglini@arm.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2913481Sgiacomo.travaglini@arm.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3013481Sgiacomo.travaglini@arm.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3113481Sgiacomo.travaglini@arm.com// 3213481Sgiacomo.travaglini@arm.com// Author: wan@google.com (Zhanyong Wan) 3313481Sgiacomo.travaglini@arm.com 3413481Sgiacomo.travaglini@arm.com// Google Mock - a framework for writing C++ mock classes. 3513481Sgiacomo.travaglini@arm.com// 3613481Sgiacomo.travaglini@arm.com// This file implements some commonly used variadic actions. 3713481Sgiacomo.travaglini@arm.com 3813481Sgiacomo.travaglini@arm.com#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ 3913481Sgiacomo.travaglini@arm.com#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ 4013481Sgiacomo.travaglini@arm.com 4113481Sgiacomo.travaglini@arm.com#include "gmock/gmock-actions.h" 4213481Sgiacomo.travaglini@arm.com#include "gmock/internal/gmock-port.h" 4313481Sgiacomo.travaglini@arm.com 4413481Sgiacomo.travaglini@arm.comnamespace testing { 4513481Sgiacomo.travaglini@arm.comnamespace internal { 4613481Sgiacomo.travaglini@arm.com 4713481Sgiacomo.travaglini@arm.com// InvokeHelper<F> knows how to unpack an N-tuple and invoke an N-ary 4813481Sgiacomo.travaglini@arm.com// function or method with the unpacked values, where F is a function 4913481Sgiacomo.travaglini@arm.com// type that takes N arguments. 5013481Sgiacomo.travaglini@arm.comtemplate <typename Result, typename ArgumentTuple> 5113481Sgiacomo.travaglini@arm.comclass InvokeHelper; 5213481Sgiacomo.travaglini@arm.com 5313481Sgiacomo.travaglini@arm.comtemplate <typename R> 5413481Sgiacomo.travaglini@arm.comclass InvokeHelper<R, ::testing::tuple<> > { 5513481Sgiacomo.travaglini@arm.com public: 5613481Sgiacomo.travaglini@arm.com template <typename Function> 5713481Sgiacomo.travaglini@arm.com static R Invoke(Function function, const ::testing::tuple<>&) { 5813481Sgiacomo.travaglini@arm.com return function(); 5913481Sgiacomo.travaglini@arm.com } 6013481Sgiacomo.travaglini@arm.com 6113481Sgiacomo.travaglini@arm.com template <class Class, typename MethodPtr> 6213481Sgiacomo.travaglini@arm.com static R InvokeMethod(Class* obj_ptr, 6313481Sgiacomo.travaglini@arm.com MethodPtr method_ptr, 6413481Sgiacomo.travaglini@arm.com const ::testing::tuple<>&) { 6513481Sgiacomo.travaglini@arm.com return (obj_ptr->*method_ptr)(); 6613481Sgiacomo.travaglini@arm.com } 6713481Sgiacomo.travaglini@arm.com}; 6813481Sgiacomo.travaglini@arm.com 6913481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1> 7013481Sgiacomo.travaglini@arm.comclass InvokeHelper<R, ::testing::tuple<A1> > { 7113481Sgiacomo.travaglini@arm.com public: 7213481Sgiacomo.travaglini@arm.com template <typename Function> 7313481Sgiacomo.travaglini@arm.com static R Invoke(Function function, const ::testing::tuple<A1>& args) { 7413481Sgiacomo.travaglini@arm.com return function(get<0>(args)); 7513481Sgiacomo.travaglini@arm.com } 7613481Sgiacomo.travaglini@arm.com 7713481Sgiacomo.travaglini@arm.com template <class Class, typename MethodPtr> 7813481Sgiacomo.travaglini@arm.com static R InvokeMethod(Class* obj_ptr, 7913481Sgiacomo.travaglini@arm.com MethodPtr method_ptr, 8013481Sgiacomo.travaglini@arm.com const ::testing::tuple<A1>& args) { 8113481Sgiacomo.travaglini@arm.com return (obj_ptr->*method_ptr)(get<0>(args)); 8213481Sgiacomo.travaglini@arm.com } 8313481Sgiacomo.travaglini@arm.com}; 8413481Sgiacomo.travaglini@arm.com 8513481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2> 8613481Sgiacomo.travaglini@arm.comclass InvokeHelper<R, ::testing::tuple<A1, A2> > { 8713481Sgiacomo.travaglini@arm.com public: 8813481Sgiacomo.travaglini@arm.com template <typename Function> 8913481Sgiacomo.travaglini@arm.com static R Invoke(Function function, const ::testing::tuple<A1, A2>& args) { 9013481Sgiacomo.travaglini@arm.com return function(get<0>(args), get<1>(args)); 9113481Sgiacomo.travaglini@arm.com } 9213481Sgiacomo.travaglini@arm.com 9313481Sgiacomo.travaglini@arm.com template <class Class, typename MethodPtr> 9413481Sgiacomo.travaglini@arm.com static R InvokeMethod(Class* obj_ptr, 9513481Sgiacomo.travaglini@arm.com MethodPtr method_ptr, 9613481Sgiacomo.travaglini@arm.com const ::testing::tuple<A1, A2>& args) { 9713481Sgiacomo.travaglini@arm.com return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args)); 9813481Sgiacomo.travaglini@arm.com } 9913481Sgiacomo.travaglini@arm.com}; 10013481Sgiacomo.travaglini@arm.com 10113481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2, typename A3> 10213481Sgiacomo.travaglini@arm.comclass InvokeHelper<R, ::testing::tuple<A1, A2, A3> > { 10313481Sgiacomo.travaglini@arm.com public: 10413481Sgiacomo.travaglini@arm.com template <typename Function> 10513481Sgiacomo.travaglini@arm.com static R Invoke(Function function, const ::testing::tuple<A1, A2, A3>& args) { 10613481Sgiacomo.travaglini@arm.com return function(get<0>(args), get<1>(args), get<2>(args)); 10713481Sgiacomo.travaglini@arm.com } 10813481Sgiacomo.travaglini@arm.com 10913481Sgiacomo.travaglini@arm.com template <class Class, typename MethodPtr> 11013481Sgiacomo.travaglini@arm.com static R InvokeMethod(Class* obj_ptr, 11113481Sgiacomo.travaglini@arm.com MethodPtr method_ptr, 11213481Sgiacomo.travaglini@arm.com const ::testing::tuple<A1, A2, A3>& args) { 11313481Sgiacomo.travaglini@arm.com return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), 11413481Sgiacomo.travaglini@arm.com get<2>(args)); 11513481Sgiacomo.travaglini@arm.com } 11613481Sgiacomo.travaglini@arm.com}; 11713481Sgiacomo.travaglini@arm.com 11813481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2, typename A3, typename A4> 11913481Sgiacomo.travaglini@arm.comclass InvokeHelper<R, ::testing::tuple<A1, A2, A3, A4> > { 12013481Sgiacomo.travaglini@arm.com public: 12113481Sgiacomo.travaglini@arm.com template <typename Function> 12213481Sgiacomo.travaglini@arm.com static R Invoke(Function function, const ::testing::tuple<A1, A2, A3, 12313481Sgiacomo.travaglini@arm.com A4>& args) { 12413481Sgiacomo.travaglini@arm.com return function(get<0>(args), get<1>(args), get<2>(args), 12513481Sgiacomo.travaglini@arm.com get<3>(args)); 12613481Sgiacomo.travaglini@arm.com } 12713481Sgiacomo.travaglini@arm.com 12813481Sgiacomo.travaglini@arm.com template <class Class, typename MethodPtr> 12913481Sgiacomo.travaglini@arm.com static R InvokeMethod(Class* obj_ptr, 13013481Sgiacomo.travaglini@arm.com MethodPtr method_ptr, 13113481Sgiacomo.travaglini@arm.com const ::testing::tuple<A1, A2, A3, A4>& args) { 13213481Sgiacomo.travaglini@arm.com return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), 13313481Sgiacomo.travaglini@arm.com get<2>(args), get<3>(args)); 13413481Sgiacomo.travaglini@arm.com } 13513481Sgiacomo.travaglini@arm.com}; 13613481Sgiacomo.travaglini@arm.com 13713481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 13813481Sgiacomo.travaglini@arm.com typename A5> 13913481Sgiacomo.travaglini@arm.comclass InvokeHelper<R, ::testing::tuple<A1, A2, A3, A4, A5> > { 14013481Sgiacomo.travaglini@arm.com public: 14113481Sgiacomo.travaglini@arm.com template <typename Function> 14213481Sgiacomo.travaglini@arm.com static R Invoke(Function function, const ::testing::tuple<A1, A2, A3, A4, 14313481Sgiacomo.travaglini@arm.com A5>& args) { 14413481Sgiacomo.travaglini@arm.com return function(get<0>(args), get<1>(args), get<2>(args), 14513481Sgiacomo.travaglini@arm.com get<3>(args), get<4>(args)); 14613481Sgiacomo.travaglini@arm.com } 14713481Sgiacomo.travaglini@arm.com 14813481Sgiacomo.travaglini@arm.com template <class Class, typename MethodPtr> 14913481Sgiacomo.travaglini@arm.com static R InvokeMethod(Class* obj_ptr, 15013481Sgiacomo.travaglini@arm.com MethodPtr method_ptr, 15113481Sgiacomo.travaglini@arm.com const ::testing::tuple<A1, A2, A3, A4, A5>& args) { 15213481Sgiacomo.travaglini@arm.com return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), 15313481Sgiacomo.travaglini@arm.com get<2>(args), get<3>(args), get<4>(args)); 15413481Sgiacomo.travaglini@arm.com } 15513481Sgiacomo.travaglini@arm.com}; 15613481Sgiacomo.travaglini@arm.com 15713481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 15813481Sgiacomo.travaglini@arm.com typename A5, typename A6> 15913481Sgiacomo.travaglini@arm.comclass InvokeHelper<R, ::testing::tuple<A1, A2, A3, A4, A5, A6> > { 16013481Sgiacomo.travaglini@arm.com public: 16113481Sgiacomo.travaglini@arm.com template <typename Function> 16213481Sgiacomo.travaglini@arm.com static R Invoke(Function function, const ::testing::tuple<A1, A2, A3, A4, A5, 16313481Sgiacomo.travaglini@arm.com A6>& args) { 16413481Sgiacomo.travaglini@arm.com return function(get<0>(args), get<1>(args), get<2>(args), 16513481Sgiacomo.travaglini@arm.com get<3>(args), get<4>(args), get<5>(args)); 16613481Sgiacomo.travaglini@arm.com } 16713481Sgiacomo.travaglini@arm.com 16813481Sgiacomo.travaglini@arm.com template <class Class, typename MethodPtr> 16913481Sgiacomo.travaglini@arm.com static R InvokeMethod(Class* obj_ptr, 17013481Sgiacomo.travaglini@arm.com MethodPtr method_ptr, 17113481Sgiacomo.travaglini@arm.com const ::testing::tuple<A1, A2, A3, A4, A5, A6>& args) { 17213481Sgiacomo.travaglini@arm.com return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), 17313481Sgiacomo.travaglini@arm.com get<2>(args), get<3>(args), get<4>(args), get<5>(args)); 17413481Sgiacomo.travaglini@arm.com } 17513481Sgiacomo.travaglini@arm.com}; 17613481Sgiacomo.travaglini@arm.com 17713481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 17813481Sgiacomo.travaglini@arm.com typename A5, typename A6, typename A7> 17913481Sgiacomo.travaglini@arm.comclass InvokeHelper<R, ::testing::tuple<A1, A2, A3, A4, A5, A6, A7> > { 18013481Sgiacomo.travaglini@arm.com public: 18113481Sgiacomo.travaglini@arm.com template <typename Function> 18213481Sgiacomo.travaglini@arm.com static R Invoke(Function function, const ::testing::tuple<A1, A2, A3, A4, A5, 18313481Sgiacomo.travaglini@arm.com A6, A7>& args) { 18413481Sgiacomo.travaglini@arm.com return function(get<0>(args), get<1>(args), get<2>(args), 18513481Sgiacomo.travaglini@arm.com get<3>(args), get<4>(args), get<5>(args), get<6>(args)); 18613481Sgiacomo.travaglini@arm.com } 18713481Sgiacomo.travaglini@arm.com 18813481Sgiacomo.travaglini@arm.com template <class Class, typename MethodPtr> 18913481Sgiacomo.travaglini@arm.com static R InvokeMethod(Class* obj_ptr, 19013481Sgiacomo.travaglini@arm.com MethodPtr method_ptr, 19113481Sgiacomo.travaglini@arm.com const ::testing::tuple<A1, A2, A3, A4, A5, A6, 19213481Sgiacomo.travaglini@arm.com A7>& args) { 19313481Sgiacomo.travaglini@arm.com return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), 19413481Sgiacomo.travaglini@arm.com get<2>(args), get<3>(args), get<4>(args), get<5>(args), 19513481Sgiacomo.travaglini@arm.com get<6>(args)); 19613481Sgiacomo.travaglini@arm.com } 19713481Sgiacomo.travaglini@arm.com}; 19813481Sgiacomo.travaglini@arm.com 19913481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 20013481Sgiacomo.travaglini@arm.com typename A5, typename A6, typename A7, typename A8> 20113481Sgiacomo.travaglini@arm.comclass InvokeHelper<R, ::testing::tuple<A1, A2, A3, A4, A5, A6, A7, A8> > { 20213481Sgiacomo.travaglini@arm.com public: 20313481Sgiacomo.travaglini@arm.com template <typename Function> 20413481Sgiacomo.travaglini@arm.com static R Invoke(Function function, const ::testing::tuple<A1, A2, A3, A4, A5, 20513481Sgiacomo.travaglini@arm.com A6, A7, A8>& args) { 20613481Sgiacomo.travaglini@arm.com return function(get<0>(args), get<1>(args), get<2>(args), 20713481Sgiacomo.travaglini@arm.com get<3>(args), get<4>(args), get<5>(args), get<6>(args), 20813481Sgiacomo.travaglini@arm.com get<7>(args)); 20913481Sgiacomo.travaglini@arm.com } 21013481Sgiacomo.travaglini@arm.com 21113481Sgiacomo.travaglini@arm.com template <class Class, typename MethodPtr> 21213481Sgiacomo.travaglini@arm.com static R InvokeMethod(Class* obj_ptr, 21313481Sgiacomo.travaglini@arm.com MethodPtr method_ptr, 21413481Sgiacomo.travaglini@arm.com const ::testing::tuple<A1, A2, A3, A4, A5, A6, A7, 21513481Sgiacomo.travaglini@arm.com A8>& args) { 21613481Sgiacomo.travaglini@arm.com return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), 21713481Sgiacomo.travaglini@arm.com get<2>(args), get<3>(args), get<4>(args), get<5>(args), 21813481Sgiacomo.travaglini@arm.com get<6>(args), get<7>(args)); 21913481Sgiacomo.travaglini@arm.com } 22013481Sgiacomo.travaglini@arm.com}; 22113481Sgiacomo.travaglini@arm.com 22213481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 22313481Sgiacomo.travaglini@arm.com typename A5, typename A6, typename A7, typename A8, typename A9> 22413481Sgiacomo.travaglini@arm.comclass InvokeHelper<R, ::testing::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9> > { 22513481Sgiacomo.travaglini@arm.com public: 22613481Sgiacomo.travaglini@arm.com template <typename Function> 22713481Sgiacomo.travaglini@arm.com static R Invoke(Function function, const ::testing::tuple<A1, A2, A3, A4, A5, 22813481Sgiacomo.travaglini@arm.com A6, A7, A8, A9>& args) { 22913481Sgiacomo.travaglini@arm.com return function(get<0>(args), get<1>(args), get<2>(args), 23013481Sgiacomo.travaglini@arm.com get<3>(args), get<4>(args), get<5>(args), get<6>(args), 23113481Sgiacomo.travaglini@arm.com get<7>(args), get<8>(args)); 23213481Sgiacomo.travaglini@arm.com } 23313481Sgiacomo.travaglini@arm.com 23413481Sgiacomo.travaglini@arm.com template <class Class, typename MethodPtr> 23513481Sgiacomo.travaglini@arm.com static R InvokeMethod(Class* obj_ptr, 23613481Sgiacomo.travaglini@arm.com MethodPtr method_ptr, 23713481Sgiacomo.travaglini@arm.com const ::testing::tuple<A1, A2, A3, A4, A5, A6, A7, A8, 23813481Sgiacomo.travaglini@arm.com A9>& args) { 23913481Sgiacomo.travaglini@arm.com return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), 24013481Sgiacomo.travaglini@arm.com get<2>(args), get<3>(args), get<4>(args), get<5>(args), 24113481Sgiacomo.travaglini@arm.com get<6>(args), get<7>(args), get<8>(args)); 24213481Sgiacomo.travaglini@arm.com } 24313481Sgiacomo.travaglini@arm.com}; 24413481Sgiacomo.travaglini@arm.com 24513481Sgiacomo.travaglini@arm.comtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 24613481Sgiacomo.travaglini@arm.com typename A5, typename A6, typename A7, typename A8, typename A9, 24713481Sgiacomo.travaglini@arm.com typename A10> 24813481Sgiacomo.travaglini@arm.comclass InvokeHelper<R, ::testing::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9, 24913481Sgiacomo.travaglini@arm.com A10> > { 25013481Sgiacomo.travaglini@arm.com public: 25113481Sgiacomo.travaglini@arm.com template <typename Function> 25213481Sgiacomo.travaglini@arm.com static R Invoke(Function function, const ::testing::tuple<A1, A2, A3, A4, A5, 25313481Sgiacomo.travaglini@arm.com A6, A7, A8, A9, A10>& args) { 25413481Sgiacomo.travaglini@arm.com return function(get<0>(args), get<1>(args), get<2>(args), 25513481Sgiacomo.travaglini@arm.com get<3>(args), get<4>(args), get<5>(args), get<6>(args), 25613481Sgiacomo.travaglini@arm.com get<7>(args), get<8>(args), get<9>(args)); 25713481Sgiacomo.travaglini@arm.com } 25813481Sgiacomo.travaglini@arm.com 25913481Sgiacomo.travaglini@arm.com template <class Class, typename MethodPtr> 26013481Sgiacomo.travaglini@arm.com static R InvokeMethod(Class* obj_ptr, 26113481Sgiacomo.travaglini@arm.com MethodPtr method_ptr, 26213481Sgiacomo.travaglini@arm.com const ::testing::tuple<A1, A2, A3, A4, A5, A6, A7, A8, 26313481Sgiacomo.travaglini@arm.com A9, A10>& args) { 26413481Sgiacomo.travaglini@arm.com return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), 26513481Sgiacomo.travaglini@arm.com get<2>(args), get<3>(args), get<4>(args), get<5>(args), 26613481Sgiacomo.travaglini@arm.com get<6>(args), get<7>(args), get<8>(args), get<9>(args)); 26713481Sgiacomo.travaglini@arm.com } 26813481Sgiacomo.travaglini@arm.com}; 26913481Sgiacomo.travaglini@arm.com 27013481Sgiacomo.travaglini@arm.com// An INTERNAL macro for extracting the type of a tuple field. It's 27113481Sgiacomo.travaglini@arm.com// subject to change without notice - DO NOT USE IN USER CODE! 27213481Sgiacomo.travaglini@arm.com#define GMOCK_FIELD_(Tuple, N) \ 27313481Sgiacomo.travaglini@arm.com typename ::testing::tuple_element<N, Tuple>::type 27413481Sgiacomo.travaglini@arm.com 27513481Sgiacomo.travaglini@arm.com// SelectArgs<Result, ArgumentTuple, k1, k2, ..., k_n>::type is the 27613481Sgiacomo.travaglini@arm.com// type of an n-ary function whose i-th (1-based) argument type is the 27713481Sgiacomo.travaglini@arm.com// k{i}-th (0-based) field of ArgumentTuple, which must be a tuple 27813481Sgiacomo.travaglini@arm.com// type, and whose return type is Result. For example, 27913481Sgiacomo.travaglini@arm.com// SelectArgs<int, ::testing::tuple<bool, char, double, long>, 0, 3>::type 28013481Sgiacomo.travaglini@arm.com// is int(bool, long). 28113481Sgiacomo.travaglini@arm.com// 28213481Sgiacomo.travaglini@arm.com// SelectArgs<Result, ArgumentTuple, k1, k2, ..., k_n>::Select(args) 28313481Sgiacomo.travaglini@arm.com// returns the selected fields (k1, k2, ..., k_n) of args as a tuple. 28413481Sgiacomo.travaglini@arm.com// For example, 28513481Sgiacomo.travaglini@arm.com// SelectArgs<int, tuple<bool, char, double>, 2, 0>::Select( 28613481Sgiacomo.travaglini@arm.com// ::testing::make_tuple(true, 'a', 2.5)) 28713481Sgiacomo.travaglini@arm.com// returns tuple (2.5, true). 28813481Sgiacomo.travaglini@arm.com// 28913481Sgiacomo.travaglini@arm.com// The numbers in list k1, k2, ..., k_n must be >= 0, where n can be 29013481Sgiacomo.travaglini@arm.com// in the range [0, 10]. Duplicates are allowed and they don't have 29113481Sgiacomo.travaglini@arm.com// to be in an ascending or descending order. 29213481Sgiacomo.travaglini@arm.com 29313481Sgiacomo.travaglini@arm.comtemplate <typename Result, typename ArgumentTuple, int k1, int k2, int k3, 29413481Sgiacomo.travaglini@arm.com int k4, int k5, int k6, int k7, int k8, int k9, int k10> 29513481Sgiacomo.travaglini@arm.comclass SelectArgs { 29613481Sgiacomo.travaglini@arm.com public: 29713481Sgiacomo.travaglini@arm.com typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 29813481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), 29913481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), 30013481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7), 30113481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k8), GMOCK_FIELD_(ArgumentTuple, k9), 30213481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k10)); 30313481Sgiacomo.travaglini@arm.com typedef typename Function<type>::ArgumentTuple SelectedArgs; 30413481Sgiacomo.travaglini@arm.com static SelectedArgs Select(const ArgumentTuple& args) { 30513481Sgiacomo.travaglini@arm.com return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args), 30613481Sgiacomo.travaglini@arm.com get<k4>(args), get<k5>(args), get<k6>(args), get<k7>(args), 30713481Sgiacomo.travaglini@arm.com get<k8>(args), get<k9>(args), get<k10>(args)); 30813481Sgiacomo.travaglini@arm.com } 30913481Sgiacomo.travaglini@arm.com}; 31013481Sgiacomo.travaglini@arm.com 31113481Sgiacomo.travaglini@arm.comtemplate <typename Result, typename ArgumentTuple> 31213481Sgiacomo.travaglini@arm.comclass SelectArgs<Result, ArgumentTuple, 31313481Sgiacomo.travaglini@arm.com -1, -1, -1, -1, -1, -1, -1, -1, -1, -1> { 31413481Sgiacomo.travaglini@arm.com public: 31513481Sgiacomo.travaglini@arm.com typedef Result type(); 31613481Sgiacomo.travaglini@arm.com typedef typename Function<type>::ArgumentTuple SelectedArgs; 31713481Sgiacomo.travaglini@arm.com static SelectedArgs Select(const ArgumentTuple& /* args */) { 31813481Sgiacomo.travaglini@arm.com return SelectedArgs(); 31913481Sgiacomo.travaglini@arm.com } 32013481Sgiacomo.travaglini@arm.com}; 32113481Sgiacomo.travaglini@arm.com 32213481Sgiacomo.travaglini@arm.comtemplate <typename Result, typename ArgumentTuple, int k1> 32313481Sgiacomo.travaglini@arm.comclass SelectArgs<Result, ArgumentTuple, 32413481Sgiacomo.travaglini@arm.com k1, -1, -1, -1, -1, -1, -1, -1, -1, -1> { 32513481Sgiacomo.travaglini@arm.com public: 32613481Sgiacomo.travaglini@arm.com typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1)); 32713481Sgiacomo.travaglini@arm.com typedef typename Function<type>::ArgumentTuple SelectedArgs; 32813481Sgiacomo.travaglini@arm.com static SelectedArgs Select(const ArgumentTuple& args) { 32913481Sgiacomo.travaglini@arm.com return SelectedArgs(get<k1>(args)); 33013481Sgiacomo.travaglini@arm.com } 33113481Sgiacomo.travaglini@arm.com}; 33213481Sgiacomo.travaglini@arm.com 33313481Sgiacomo.travaglini@arm.comtemplate <typename Result, typename ArgumentTuple, int k1, int k2> 33413481Sgiacomo.travaglini@arm.comclass SelectArgs<Result, ArgumentTuple, 33513481Sgiacomo.travaglini@arm.com k1, k2, -1, -1, -1, -1, -1, -1, -1, -1> { 33613481Sgiacomo.travaglini@arm.com public: 33713481Sgiacomo.travaglini@arm.com typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 33813481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k2)); 33913481Sgiacomo.travaglini@arm.com typedef typename Function<type>::ArgumentTuple SelectedArgs; 34013481Sgiacomo.travaglini@arm.com static SelectedArgs Select(const ArgumentTuple& args) { 34113481Sgiacomo.travaglini@arm.com return SelectedArgs(get<k1>(args), get<k2>(args)); 34213481Sgiacomo.travaglini@arm.com } 34313481Sgiacomo.travaglini@arm.com}; 34413481Sgiacomo.travaglini@arm.com 34513481Sgiacomo.travaglini@arm.comtemplate <typename Result, typename ArgumentTuple, int k1, int k2, int k3> 34613481Sgiacomo.travaglini@arm.comclass SelectArgs<Result, ArgumentTuple, 34713481Sgiacomo.travaglini@arm.com k1, k2, k3, -1, -1, -1, -1, -1, -1, -1> { 34813481Sgiacomo.travaglini@arm.com public: 34913481Sgiacomo.travaglini@arm.com typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 35013481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3)); 35113481Sgiacomo.travaglini@arm.com typedef typename Function<type>::ArgumentTuple SelectedArgs; 35213481Sgiacomo.travaglini@arm.com static SelectedArgs Select(const ArgumentTuple& args) { 35313481Sgiacomo.travaglini@arm.com return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args)); 35413481Sgiacomo.travaglini@arm.com } 35513481Sgiacomo.travaglini@arm.com}; 35613481Sgiacomo.travaglini@arm.com 35713481Sgiacomo.travaglini@arm.comtemplate <typename Result, typename ArgumentTuple, int k1, int k2, int k3, 35813481Sgiacomo.travaglini@arm.com int k4> 35913481Sgiacomo.travaglini@arm.comclass SelectArgs<Result, ArgumentTuple, 36013481Sgiacomo.travaglini@arm.com k1, k2, k3, k4, -1, -1, -1, -1, -1, -1> { 36113481Sgiacomo.travaglini@arm.com public: 36213481Sgiacomo.travaglini@arm.com typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 36313481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), 36413481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k4)); 36513481Sgiacomo.travaglini@arm.com typedef typename Function<type>::ArgumentTuple SelectedArgs; 36613481Sgiacomo.travaglini@arm.com static SelectedArgs Select(const ArgumentTuple& args) { 36713481Sgiacomo.travaglini@arm.com return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args), 36813481Sgiacomo.travaglini@arm.com get<k4>(args)); 36913481Sgiacomo.travaglini@arm.com } 37013481Sgiacomo.travaglini@arm.com}; 37113481Sgiacomo.travaglini@arm.com 37213481Sgiacomo.travaglini@arm.comtemplate <typename Result, typename ArgumentTuple, int k1, int k2, int k3, 37313481Sgiacomo.travaglini@arm.com int k4, int k5> 37413481Sgiacomo.travaglini@arm.comclass SelectArgs<Result, ArgumentTuple, 37513481Sgiacomo.travaglini@arm.com k1, k2, k3, k4, k5, -1, -1, -1, -1, -1> { 37613481Sgiacomo.travaglini@arm.com public: 37713481Sgiacomo.travaglini@arm.com typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 37813481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), 37913481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5)); 38013481Sgiacomo.travaglini@arm.com typedef typename Function<type>::ArgumentTuple SelectedArgs; 38113481Sgiacomo.travaglini@arm.com static SelectedArgs Select(const ArgumentTuple& args) { 38213481Sgiacomo.travaglini@arm.com return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args), 38313481Sgiacomo.travaglini@arm.com get<k4>(args), get<k5>(args)); 38413481Sgiacomo.travaglini@arm.com } 38513481Sgiacomo.travaglini@arm.com}; 38613481Sgiacomo.travaglini@arm.com 38713481Sgiacomo.travaglini@arm.comtemplate <typename Result, typename ArgumentTuple, int k1, int k2, int k3, 38813481Sgiacomo.travaglini@arm.com int k4, int k5, int k6> 38913481Sgiacomo.travaglini@arm.comclass SelectArgs<Result, ArgumentTuple, 39013481Sgiacomo.travaglini@arm.com k1, k2, k3, k4, k5, k6, -1, -1, -1, -1> { 39113481Sgiacomo.travaglini@arm.com public: 39213481Sgiacomo.travaglini@arm.com typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 39313481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), 39413481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), 39513481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k6)); 39613481Sgiacomo.travaglini@arm.com typedef typename Function<type>::ArgumentTuple SelectedArgs; 39713481Sgiacomo.travaglini@arm.com static SelectedArgs Select(const ArgumentTuple& args) { 39813481Sgiacomo.travaglini@arm.com return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args), 39913481Sgiacomo.travaglini@arm.com get<k4>(args), get<k5>(args), get<k6>(args)); 40013481Sgiacomo.travaglini@arm.com } 40113481Sgiacomo.travaglini@arm.com}; 40213481Sgiacomo.travaglini@arm.com 40313481Sgiacomo.travaglini@arm.comtemplate <typename Result, typename ArgumentTuple, int k1, int k2, int k3, 40413481Sgiacomo.travaglini@arm.com int k4, int k5, int k6, int k7> 40513481Sgiacomo.travaglini@arm.comclass SelectArgs<Result, ArgumentTuple, 40613481Sgiacomo.travaglini@arm.com k1, k2, k3, k4, k5, k6, k7, -1, -1, -1> { 40713481Sgiacomo.travaglini@arm.com public: 40813481Sgiacomo.travaglini@arm.com typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 40913481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), 41013481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), 41113481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7)); 41213481Sgiacomo.travaglini@arm.com typedef typename Function<type>::ArgumentTuple SelectedArgs; 41313481Sgiacomo.travaglini@arm.com static SelectedArgs Select(const ArgumentTuple& args) { 41413481Sgiacomo.travaglini@arm.com return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args), 41513481Sgiacomo.travaglini@arm.com get<k4>(args), get<k5>(args), get<k6>(args), get<k7>(args)); 41613481Sgiacomo.travaglini@arm.com } 41713481Sgiacomo.travaglini@arm.com}; 41813481Sgiacomo.travaglini@arm.com 41913481Sgiacomo.travaglini@arm.comtemplate <typename Result, typename ArgumentTuple, int k1, int k2, int k3, 42013481Sgiacomo.travaglini@arm.com int k4, int k5, int k6, int k7, int k8> 42113481Sgiacomo.travaglini@arm.comclass SelectArgs<Result, ArgumentTuple, 42213481Sgiacomo.travaglini@arm.com k1, k2, k3, k4, k5, k6, k7, k8, -1, -1> { 42313481Sgiacomo.travaglini@arm.com public: 42413481Sgiacomo.travaglini@arm.com typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 42513481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), 42613481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), 42713481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7), 42813481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k8)); 42913481Sgiacomo.travaglini@arm.com typedef typename Function<type>::ArgumentTuple SelectedArgs; 43013481Sgiacomo.travaglini@arm.com static SelectedArgs Select(const ArgumentTuple& args) { 43113481Sgiacomo.travaglini@arm.com return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args), 43213481Sgiacomo.travaglini@arm.com get<k4>(args), get<k5>(args), get<k6>(args), get<k7>(args), 43313481Sgiacomo.travaglini@arm.com get<k8>(args)); 43413481Sgiacomo.travaglini@arm.com } 43513481Sgiacomo.travaglini@arm.com}; 43613481Sgiacomo.travaglini@arm.com 43713481Sgiacomo.travaglini@arm.comtemplate <typename Result, typename ArgumentTuple, int k1, int k2, int k3, 43813481Sgiacomo.travaglini@arm.com int k4, int k5, int k6, int k7, int k8, int k9> 43913481Sgiacomo.travaglini@arm.comclass SelectArgs<Result, ArgumentTuple, 44013481Sgiacomo.travaglini@arm.com k1, k2, k3, k4, k5, k6, k7, k8, k9, -1> { 44113481Sgiacomo.travaglini@arm.com public: 44213481Sgiacomo.travaglini@arm.com typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 44313481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), 44413481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), 44513481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7), 44613481Sgiacomo.travaglini@arm.com GMOCK_FIELD_(ArgumentTuple, k8), GMOCK_FIELD_(ArgumentTuple, k9)); 44713481Sgiacomo.travaglini@arm.com typedef typename Function<type>::ArgumentTuple SelectedArgs; 44813481Sgiacomo.travaglini@arm.com static SelectedArgs Select(const ArgumentTuple& args) { 44913481Sgiacomo.travaglini@arm.com return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args), 45013481Sgiacomo.travaglini@arm.com get<k4>(args), get<k5>(args), get<k6>(args), get<k7>(args), 45113481Sgiacomo.travaglini@arm.com get<k8>(args), get<k9>(args)); 45213481Sgiacomo.travaglini@arm.com } 45313481Sgiacomo.travaglini@arm.com}; 45413481Sgiacomo.travaglini@arm.com 45513481Sgiacomo.travaglini@arm.com#undef GMOCK_FIELD_ 45613481Sgiacomo.travaglini@arm.com 45713481Sgiacomo.travaglini@arm.com// Implements the WithArgs action. 45813481Sgiacomo.travaglini@arm.comtemplate <typename InnerAction, int k1 = -1, int k2 = -1, int k3 = -1, 45913481Sgiacomo.travaglini@arm.com int k4 = -1, int k5 = -1, int k6 = -1, int k7 = -1, int k8 = -1, 46013481Sgiacomo.travaglini@arm.com int k9 = -1, int k10 = -1> 46113481Sgiacomo.travaglini@arm.comclass WithArgsAction { 46213481Sgiacomo.travaglini@arm.com public: 46313481Sgiacomo.travaglini@arm.com explicit WithArgsAction(const InnerAction& action) : action_(action) {} 46413481Sgiacomo.travaglini@arm.com 46513481Sgiacomo.travaglini@arm.com template <typename F> 46613481Sgiacomo.travaglini@arm.com operator Action<F>() const { return MakeAction(new Impl<F>(action_)); } 46713481Sgiacomo.travaglini@arm.com 46813481Sgiacomo.travaglini@arm.com private: 46913481Sgiacomo.travaglini@arm.com template <typename F> 47013481Sgiacomo.travaglini@arm.com class Impl : public ActionInterface<F> { 47113481Sgiacomo.travaglini@arm.com public: 47213481Sgiacomo.travaglini@arm.com typedef typename Function<F>::Result Result; 47313481Sgiacomo.travaglini@arm.com typedef typename Function<F>::ArgumentTuple ArgumentTuple; 47413481Sgiacomo.travaglini@arm.com 47513481Sgiacomo.travaglini@arm.com explicit Impl(const InnerAction& action) : action_(action) {} 47613481Sgiacomo.travaglini@arm.com 47713481Sgiacomo.travaglini@arm.com virtual Result Perform(const ArgumentTuple& args) { 47813481Sgiacomo.travaglini@arm.com return action_.Perform(SelectArgs<Result, ArgumentTuple, k1, k2, k3, k4, 47913481Sgiacomo.travaglini@arm.com k5, k6, k7, k8, k9, k10>::Select(args)); 48013481Sgiacomo.travaglini@arm.com } 48113481Sgiacomo.travaglini@arm.com 48213481Sgiacomo.travaglini@arm.com private: 48313481Sgiacomo.travaglini@arm.com typedef typename SelectArgs<Result, ArgumentTuple, 48413481Sgiacomo.travaglini@arm.com k1, k2, k3, k4, k5, k6, k7, k8, k9, k10>::type InnerFunctionType; 48513481Sgiacomo.travaglini@arm.com 48613481Sgiacomo.travaglini@arm.com Action<InnerFunctionType> action_; 48713481Sgiacomo.travaglini@arm.com }; 48813481Sgiacomo.travaglini@arm.com 48913481Sgiacomo.travaglini@arm.com const InnerAction action_; 49013481Sgiacomo.travaglini@arm.com 49113481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(WithArgsAction); 49213481Sgiacomo.travaglini@arm.com}; 49313481Sgiacomo.travaglini@arm.com 49413481Sgiacomo.travaglini@arm.com// A macro from the ACTION* family (defined later in this file) 49513481Sgiacomo.travaglini@arm.com// defines an action that can be used in a mock function. Typically, 49613481Sgiacomo.travaglini@arm.com// these actions only care about a subset of the arguments of the mock 49713481Sgiacomo.travaglini@arm.com// function. For example, if such an action only uses the second 49813481Sgiacomo.travaglini@arm.com// argument, it can be used in any mock function that takes >= 2 49913481Sgiacomo.travaglini@arm.com// arguments where the type of the second argument is compatible. 50013481Sgiacomo.travaglini@arm.com// 50113481Sgiacomo.travaglini@arm.com// Therefore, the action implementation must be prepared to take more 50213481Sgiacomo.travaglini@arm.com// arguments than it needs. The ExcessiveArg type is used to 50313481Sgiacomo.travaglini@arm.com// represent those excessive arguments. In order to keep the compiler 50413481Sgiacomo.travaglini@arm.com// error messages tractable, we define it in the testing namespace 50513481Sgiacomo.travaglini@arm.com// instead of testing::internal. However, this is an INTERNAL TYPE 50613481Sgiacomo.travaglini@arm.com// and subject to change without notice, so a user MUST NOT USE THIS 50713481Sgiacomo.travaglini@arm.com// TYPE DIRECTLY. 50813481Sgiacomo.travaglini@arm.comstruct ExcessiveArg {}; 50913481Sgiacomo.travaglini@arm.com 51013481Sgiacomo.travaglini@arm.com// A helper class needed for implementing the ACTION* macros. 51113481Sgiacomo.travaglini@arm.comtemplate <typename Result, class Impl> 51213481Sgiacomo.travaglini@arm.comclass ActionHelper { 51313481Sgiacomo.travaglini@arm.com public: 51413481Sgiacomo.travaglini@arm.com static Result Perform(Impl* impl, const ::testing::tuple<>& args) { 51513481Sgiacomo.travaglini@arm.com return impl->template gmock_PerformImpl<>(args, ExcessiveArg(), 51613481Sgiacomo.travaglini@arm.com ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 51713481Sgiacomo.travaglini@arm.com ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 51813481Sgiacomo.travaglini@arm.com ExcessiveArg()); 51913481Sgiacomo.travaglini@arm.com } 52013481Sgiacomo.travaglini@arm.com 52113481Sgiacomo.travaglini@arm.com template <typename A0> 52213481Sgiacomo.travaglini@arm.com static Result Perform(Impl* impl, const ::testing::tuple<A0>& args) { 52313481Sgiacomo.travaglini@arm.com return impl->template gmock_PerformImpl<A0>(args, get<0>(args), 52413481Sgiacomo.travaglini@arm.com ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 52513481Sgiacomo.travaglini@arm.com ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 52613481Sgiacomo.travaglini@arm.com ExcessiveArg()); 52713481Sgiacomo.travaglini@arm.com } 52813481Sgiacomo.travaglini@arm.com 52913481Sgiacomo.travaglini@arm.com template <typename A0, typename A1> 53013481Sgiacomo.travaglini@arm.com static Result Perform(Impl* impl, const ::testing::tuple<A0, A1>& args) { 53113481Sgiacomo.travaglini@arm.com return impl->template gmock_PerformImpl<A0, A1>(args, get<0>(args), 53213481Sgiacomo.travaglini@arm.com get<1>(args), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 53313481Sgiacomo.travaglini@arm.com ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 53413481Sgiacomo.travaglini@arm.com ExcessiveArg()); 53513481Sgiacomo.travaglini@arm.com } 53613481Sgiacomo.travaglini@arm.com 53713481Sgiacomo.travaglini@arm.com template <typename A0, typename A1, typename A2> 53813481Sgiacomo.travaglini@arm.com static Result Perform(Impl* impl, const ::testing::tuple<A0, A1, A2>& args) { 53913481Sgiacomo.travaglini@arm.com return impl->template gmock_PerformImpl<A0, A1, A2>(args, get<0>(args), 54013481Sgiacomo.travaglini@arm.com get<1>(args), get<2>(args), ExcessiveArg(), ExcessiveArg(), 54113481Sgiacomo.travaglini@arm.com ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 54213481Sgiacomo.travaglini@arm.com ExcessiveArg()); 54313481Sgiacomo.travaglini@arm.com } 54413481Sgiacomo.travaglini@arm.com 54513481Sgiacomo.travaglini@arm.com template <typename A0, typename A1, typename A2, typename A3> 54613481Sgiacomo.travaglini@arm.com static Result Perform(Impl* impl, const ::testing::tuple<A0, A1, A2, 54713481Sgiacomo.travaglini@arm.com A3>& args) { 54813481Sgiacomo.travaglini@arm.com return impl->template gmock_PerformImpl<A0, A1, A2, A3>(args, get<0>(args), 54913481Sgiacomo.travaglini@arm.com get<1>(args), get<2>(args), get<3>(args), ExcessiveArg(), 55013481Sgiacomo.travaglini@arm.com ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 55113481Sgiacomo.travaglini@arm.com ExcessiveArg()); 55213481Sgiacomo.travaglini@arm.com } 55313481Sgiacomo.travaglini@arm.com 55413481Sgiacomo.travaglini@arm.com template <typename A0, typename A1, typename A2, typename A3, typename A4> 55513481Sgiacomo.travaglini@arm.com static Result Perform(Impl* impl, const ::testing::tuple<A0, A1, A2, A3, 55613481Sgiacomo.travaglini@arm.com A4>& args) { 55713481Sgiacomo.travaglini@arm.com return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4>(args, 55813481Sgiacomo.travaglini@arm.com get<0>(args), get<1>(args), get<2>(args), get<3>(args), get<4>(args), 55913481Sgiacomo.travaglini@arm.com ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 56013481Sgiacomo.travaglini@arm.com ExcessiveArg()); 56113481Sgiacomo.travaglini@arm.com } 56213481Sgiacomo.travaglini@arm.com 56313481Sgiacomo.travaglini@arm.com template <typename A0, typename A1, typename A2, typename A3, typename A4, 56413481Sgiacomo.travaglini@arm.com typename A5> 56513481Sgiacomo.travaglini@arm.com static Result Perform(Impl* impl, const ::testing::tuple<A0, A1, A2, A3, A4, 56613481Sgiacomo.travaglini@arm.com A5>& args) { 56713481Sgiacomo.travaglini@arm.com return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5>(args, 56813481Sgiacomo.travaglini@arm.com get<0>(args), get<1>(args), get<2>(args), get<3>(args), get<4>(args), 56913481Sgiacomo.travaglini@arm.com get<5>(args), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 57013481Sgiacomo.travaglini@arm.com ExcessiveArg()); 57113481Sgiacomo.travaglini@arm.com } 57213481Sgiacomo.travaglini@arm.com 57313481Sgiacomo.travaglini@arm.com template <typename A0, typename A1, typename A2, typename A3, typename A4, 57413481Sgiacomo.travaglini@arm.com typename A5, typename A6> 57513481Sgiacomo.travaglini@arm.com static Result Perform(Impl* impl, const ::testing::tuple<A0, A1, A2, A3, A4, 57613481Sgiacomo.travaglini@arm.com A5, A6>& args) { 57713481Sgiacomo.travaglini@arm.com return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6>(args, 57813481Sgiacomo.travaglini@arm.com get<0>(args), get<1>(args), get<2>(args), get<3>(args), get<4>(args), 57913481Sgiacomo.travaglini@arm.com get<5>(args), get<6>(args), ExcessiveArg(), ExcessiveArg(), 58013481Sgiacomo.travaglini@arm.com ExcessiveArg()); 58113481Sgiacomo.travaglini@arm.com } 58213481Sgiacomo.travaglini@arm.com 58313481Sgiacomo.travaglini@arm.com template <typename A0, typename A1, typename A2, typename A3, typename A4, 58413481Sgiacomo.travaglini@arm.com typename A5, typename A6, typename A7> 58513481Sgiacomo.travaglini@arm.com static Result Perform(Impl* impl, const ::testing::tuple<A0, A1, A2, A3, A4, 58613481Sgiacomo.travaglini@arm.com A5, A6, A7>& args) { 58713481Sgiacomo.travaglini@arm.com return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6, 58813481Sgiacomo.travaglini@arm.com A7>(args, get<0>(args), get<1>(args), get<2>(args), get<3>(args), 58913481Sgiacomo.travaglini@arm.com get<4>(args), get<5>(args), get<6>(args), get<7>(args), ExcessiveArg(), 59013481Sgiacomo.travaglini@arm.com ExcessiveArg()); 59113481Sgiacomo.travaglini@arm.com } 59213481Sgiacomo.travaglini@arm.com 59313481Sgiacomo.travaglini@arm.com template <typename A0, typename A1, typename A2, typename A3, typename A4, 59413481Sgiacomo.travaglini@arm.com typename A5, typename A6, typename A7, typename A8> 59513481Sgiacomo.travaglini@arm.com static Result Perform(Impl* impl, const ::testing::tuple<A0, A1, A2, A3, A4, 59613481Sgiacomo.travaglini@arm.com A5, A6, A7, A8>& args) { 59713481Sgiacomo.travaglini@arm.com return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6, A7, 59813481Sgiacomo.travaglini@arm.com A8>(args, get<0>(args), get<1>(args), get<2>(args), get<3>(args), 59913481Sgiacomo.travaglini@arm.com get<4>(args), get<5>(args), get<6>(args), get<7>(args), get<8>(args), 60013481Sgiacomo.travaglini@arm.com ExcessiveArg()); 60113481Sgiacomo.travaglini@arm.com } 60213481Sgiacomo.travaglini@arm.com 60313481Sgiacomo.travaglini@arm.com template <typename A0, typename A1, typename A2, typename A3, typename A4, 60413481Sgiacomo.travaglini@arm.com typename A5, typename A6, typename A7, typename A8, typename A9> 60513481Sgiacomo.travaglini@arm.com static Result Perform(Impl* impl, const ::testing::tuple<A0, A1, A2, A3, A4, 60613481Sgiacomo.travaglini@arm.com A5, A6, A7, A8, A9>& args) { 60713481Sgiacomo.travaglini@arm.com return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6, A7, A8, 60813481Sgiacomo.travaglini@arm.com A9>(args, get<0>(args), get<1>(args), get<2>(args), get<3>(args), 60913481Sgiacomo.travaglini@arm.com get<4>(args), get<5>(args), get<6>(args), get<7>(args), get<8>(args), 61013481Sgiacomo.travaglini@arm.com get<9>(args)); 61113481Sgiacomo.travaglini@arm.com } 61213481Sgiacomo.travaglini@arm.com}; 61313481Sgiacomo.travaglini@arm.com 61413481Sgiacomo.travaglini@arm.com} // namespace internal 61513481Sgiacomo.travaglini@arm.com 61613481Sgiacomo.travaglini@arm.com// Various overloads for Invoke(). 61713481Sgiacomo.travaglini@arm.com 61813481Sgiacomo.travaglini@arm.com// WithArgs<N1, N2, ..., Nk>(an_action) creates an action that passes 61913481Sgiacomo.travaglini@arm.com// the selected arguments of the mock function to an_action and 62013481Sgiacomo.travaglini@arm.com// performs it. It serves as an adaptor between actions with 62113481Sgiacomo.travaglini@arm.com// different argument lists. C++ doesn't support default arguments for 62213481Sgiacomo.travaglini@arm.com// function templates, so we have to overload it. 62313481Sgiacomo.travaglini@arm.comtemplate <int k1, typename InnerAction> 62413481Sgiacomo.travaglini@arm.cominline internal::WithArgsAction<InnerAction, k1> 62513481Sgiacomo.travaglini@arm.comWithArgs(const InnerAction& action) { 62613481Sgiacomo.travaglini@arm.com return internal::WithArgsAction<InnerAction, k1>(action); 62713481Sgiacomo.travaglini@arm.com} 62813481Sgiacomo.travaglini@arm.com 62913481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, typename InnerAction> 63013481Sgiacomo.travaglini@arm.cominline internal::WithArgsAction<InnerAction, k1, k2> 63113481Sgiacomo.travaglini@arm.comWithArgs(const InnerAction& action) { 63213481Sgiacomo.travaglini@arm.com return internal::WithArgsAction<InnerAction, k1, k2>(action); 63313481Sgiacomo.travaglini@arm.com} 63413481Sgiacomo.travaglini@arm.com 63513481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, int k3, typename InnerAction> 63613481Sgiacomo.travaglini@arm.cominline internal::WithArgsAction<InnerAction, k1, k2, k3> 63713481Sgiacomo.travaglini@arm.comWithArgs(const InnerAction& action) { 63813481Sgiacomo.travaglini@arm.com return internal::WithArgsAction<InnerAction, k1, k2, k3>(action); 63913481Sgiacomo.travaglini@arm.com} 64013481Sgiacomo.travaglini@arm.com 64113481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, int k3, int k4, typename InnerAction> 64213481Sgiacomo.travaglini@arm.cominline internal::WithArgsAction<InnerAction, k1, k2, k3, k4> 64313481Sgiacomo.travaglini@arm.comWithArgs(const InnerAction& action) { 64413481Sgiacomo.travaglini@arm.com return internal::WithArgsAction<InnerAction, k1, k2, k3, k4>(action); 64513481Sgiacomo.travaglini@arm.com} 64613481Sgiacomo.travaglini@arm.com 64713481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, int k3, int k4, int k5, typename InnerAction> 64813481Sgiacomo.travaglini@arm.cominline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5> 64913481Sgiacomo.travaglini@arm.comWithArgs(const InnerAction& action) { 65013481Sgiacomo.travaglini@arm.com return internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5>(action); 65113481Sgiacomo.travaglini@arm.com} 65213481Sgiacomo.travaglini@arm.com 65313481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, int k3, int k4, int k5, int k6, typename InnerAction> 65413481Sgiacomo.travaglini@arm.cominline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6> 65513481Sgiacomo.travaglini@arm.comWithArgs(const InnerAction& action) { 65613481Sgiacomo.travaglini@arm.com return internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6>(action); 65713481Sgiacomo.travaglini@arm.com} 65813481Sgiacomo.travaglini@arm.com 65913481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, int k3, int k4, int k5, int k6, int k7, 66013481Sgiacomo.travaglini@arm.com typename InnerAction> 66113481Sgiacomo.travaglini@arm.cominline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7> 66213481Sgiacomo.travaglini@arm.comWithArgs(const InnerAction& action) { 66313481Sgiacomo.travaglini@arm.com return internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, 66413481Sgiacomo.travaglini@arm.com k7>(action); 66513481Sgiacomo.travaglini@arm.com} 66613481Sgiacomo.travaglini@arm.com 66713481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, int k3, int k4, int k5, int k6, int k7, int k8, 66813481Sgiacomo.travaglini@arm.com typename InnerAction> 66913481Sgiacomo.travaglini@arm.cominline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7, k8> 67013481Sgiacomo.travaglini@arm.comWithArgs(const InnerAction& action) { 67113481Sgiacomo.travaglini@arm.com return internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7, 67213481Sgiacomo.travaglini@arm.com k8>(action); 67313481Sgiacomo.travaglini@arm.com} 67413481Sgiacomo.travaglini@arm.com 67513481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, int k3, int k4, int k5, int k6, int k7, int k8, 67613481Sgiacomo.travaglini@arm.com int k9, typename InnerAction> 67713481Sgiacomo.travaglini@arm.cominline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7, k8, k9> 67813481Sgiacomo.travaglini@arm.comWithArgs(const InnerAction& action) { 67913481Sgiacomo.travaglini@arm.com return internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7, k8, 68013481Sgiacomo.travaglini@arm.com k9>(action); 68113481Sgiacomo.travaglini@arm.com} 68213481Sgiacomo.travaglini@arm.com 68313481Sgiacomo.travaglini@arm.comtemplate <int k1, int k2, int k3, int k4, int k5, int k6, int k7, int k8, 68413481Sgiacomo.travaglini@arm.com int k9, int k10, typename InnerAction> 68513481Sgiacomo.travaglini@arm.cominline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7, k8, 68613481Sgiacomo.travaglini@arm.com k9, k10> 68713481Sgiacomo.travaglini@arm.comWithArgs(const InnerAction& action) { 68813481Sgiacomo.travaglini@arm.com return internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7, k8, 68913481Sgiacomo.travaglini@arm.com k9, k10>(action); 69013481Sgiacomo.travaglini@arm.com} 69113481Sgiacomo.travaglini@arm.com 69213481Sgiacomo.travaglini@arm.com// Creates an action that does actions a1, a2, ..., sequentially in 69313481Sgiacomo.travaglini@arm.com// each invocation. 69413481Sgiacomo.travaglini@arm.comtemplate <typename Action1, typename Action2> 69513481Sgiacomo.travaglini@arm.cominline internal::DoBothAction<Action1, Action2> 69613481Sgiacomo.travaglini@arm.comDoAll(Action1 a1, Action2 a2) { 69713481Sgiacomo.travaglini@arm.com return internal::DoBothAction<Action1, Action2>(a1, a2); 69813481Sgiacomo.travaglini@arm.com} 69913481Sgiacomo.travaglini@arm.com 70013481Sgiacomo.travaglini@arm.comtemplate <typename Action1, typename Action2, typename Action3> 70113481Sgiacomo.travaglini@arm.cominline internal::DoBothAction<Action1, internal::DoBothAction<Action2, 70213481Sgiacomo.travaglini@arm.com Action3> > 70313481Sgiacomo.travaglini@arm.comDoAll(Action1 a1, Action2 a2, Action3 a3) { 70413481Sgiacomo.travaglini@arm.com return DoAll(a1, DoAll(a2, a3)); 70513481Sgiacomo.travaglini@arm.com} 70613481Sgiacomo.travaglini@arm.com 70713481Sgiacomo.travaglini@arm.comtemplate <typename Action1, typename Action2, typename Action3, 70813481Sgiacomo.travaglini@arm.com typename Action4> 70913481Sgiacomo.travaglini@arm.cominline internal::DoBothAction<Action1, internal::DoBothAction<Action2, 71013481Sgiacomo.travaglini@arm.com internal::DoBothAction<Action3, Action4> > > 71113481Sgiacomo.travaglini@arm.comDoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4) { 71213481Sgiacomo.travaglini@arm.com return DoAll(a1, DoAll(a2, a3, a4)); 71313481Sgiacomo.travaglini@arm.com} 71413481Sgiacomo.travaglini@arm.com 71513481Sgiacomo.travaglini@arm.comtemplate <typename Action1, typename Action2, typename Action3, 71613481Sgiacomo.travaglini@arm.com typename Action4, typename Action5> 71713481Sgiacomo.travaglini@arm.cominline internal::DoBothAction<Action1, internal::DoBothAction<Action2, 71813481Sgiacomo.travaglini@arm.com internal::DoBothAction<Action3, internal::DoBothAction<Action4, 71913481Sgiacomo.travaglini@arm.com Action5> > > > 72013481Sgiacomo.travaglini@arm.comDoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5) { 72113481Sgiacomo.travaglini@arm.com return DoAll(a1, DoAll(a2, a3, a4, a5)); 72213481Sgiacomo.travaglini@arm.com} 72313481Sgiacomo.travaglini@arm.com 72413481Sgiacomo.travaglini@arm.comtemplate <typename Action1, typename Action2, typename Action3, 72513481Sgiacomo.travaglini@arm.com typename Action4, typename Action5, typename Action6> 72613481Sgiacomo.travaglini@arm.cominline internal::DoBothAction<Action1, internal::DoBothAction<Action2, 72713481Sgiacomo.travaglini@arm.com internal::DoBothAction<Action3, internal::DoBothAction<Action4, 72813481Sgiacomo.travaglini@arm.com internal::DoBothAction<Action5, Action6> > > > > 72913481Sgiacomo.travaglini@arm.comDoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6) { 73013481Sgiacomo.travaglini@arm.com return DoAll(a1, DoAll(a2, a3, a4, a5, a6)); 73113481Sgiacomo.travaglini@arm.com} 73213481Sgiacomo.travaglini@arm.com 73313481Sgiacomo.travaglini@arm.comtemplate <typename Action1, typename Action2, typename Action3, 73413481Sgiacomo.travaglini@arm.com typename Action4, typename Action5, typename Action6, typename Action7> 73513481Sgiacomo.travaglini@arm.cominline internal::DoBothAction<Action1, internal::DoBothAction<Action2, 73613481Sgiacomo.travaglini@arm.com internal::DoBothAction<Action3, internal::DoBothAction<Action4, 73713481Sgiacomo.travaglini@arm.com internal::DoBothAction<Action5, internal::DoBothAction<Action6, 73813481Sgiacomo.travaglini@arm.com Action7> > > > > > 73913481Sgiacomo.travaglini@arm.comDoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, 74013481Sgiacomo.travaglini@arm.com Action7 a7) { 74113481Sgiacomo.travaglini@arm.com return DoAll(a1, DoAll(a2, a3, a4, a5, a6, a7)); 74213481Sgiacomo.travaglini@arm.com} 74313481Sgiacomo.travaglini@arm.com 74413481Sgiacomo.travaglini@arm.comtemplate <typename Action1, typename Action2, typename Action3, 74513481Sgiacomo.travaglini@arm.com typename Action4, typename Action5, typename Action6, typename Action7, 74613481Sgiacomo.travaglini@arm.com typename Action8> 74713481Sgiacomo.travaglini@arm.cominline internal::DoBothAction<Action1, internal::DoBothAction<Action2, 74813481Sgiacomo.travaglini@arm.com internal::DoBothAction<Action3, internal::DoBothAction<Action4, 74913481Sgiacomo.travaglini@arm.com internal::DoBothAction<Action5, internal::DoBothAction<Action6, 75013481Sgiacomo.travaglini@arm.com internal::DoBothAction<Action7, Action8> > > > > > > 75113481Sgiacomo.travaglini@arm.comDoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, 75213481Sgiacomo.travaglini@arm.com Action7 a7, Action8 a8) { 75313481Sgiacomo.travaglini@arm.com return DoAll(a1, DoAll(a2, a3, a4, a5, a6, a7, a8)); 75413481Sgiacomo.travaglini@arm.com} 75513481Sgiacomo.travaglini@arm.com 75613481Sgiacomo.travaglini@arm.comtemplate <typename Action1, typename Action2, typename Action3, 75713481Sgiacomo.travaglini@arm.com typename Action4, typename Action5, typename Action6, typename Action7, 75813481Sgiacomo.travaglini@arm.com typename Action8, typename Action9> 75913481Sgiacomo.travaglini@arm.cominline internal::DoBothAction<Action1, internal::DoBothAction<Action2, 76013481Sgiacomo.travaglini@arm.com internal::DoBothAction<Action3, internal::DoBothAction<Action4, 76113481Sgiacomo.travaglini@arm.com internal::DoBothAction<Action5, internal::DoBothAction<Action6, 76213481Sgiacomo.travaglini@arm.com internal::DoBothAction<Action7, internal::DoBothAction<Action8, 76313481Sgiacomo.travaglini@arm.com Action9> > > > > > > > 76413481Sgiacomo.travaglini@arm.comDoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, 76513481Sgiacomo.travaglini@arm.com Action7 a7, Action8 a8, Action9 a9) { 76613481Sgiacomo.travaglini@arm.com return DoAll(a1, DoAll(a2, a3, a4, a5, a6, a7, a8, a9)); 76713481Sgiacomo.travaglini@arm.com} 76813481Sgiacomo.travaglini@arm.com 76913481Sgiacomo.travaglini@arm.comtemplate <typename Action1, typename Action2, typename Action3, 77013481Sgiacomo.travaglini@arm.com typename Action4, typename Action5, typename Action6, typename Action7, 77113481Sgiacomo.travaglini@arm.com typename Action8, typename Action9, typename Action10> 77213481Sgiacomo.travaglini@arm.cominline internal::DoBothAction<Action1, internal::DoBothAction<Action2, 77313481Sgiacomo.travaglini@arm.com internal::DoBothAction<Action3, internal::DoBothAction<Action4, 77413481Sgiacomo.travaglini@arm.com internal::DoBothAction<Action5, internal::DoBothAction<Action6, 77513481Sgiacomo.travaglini@arm.com internal::DoBothAction<Action7, internal::DoBothAction<Action8, 77613481Sgiacomo.travaglini@arm.com internal::DoBothAction<Action9, Action10> > > > > > > > > 77713481Sgiacomo.travaglini@arm.comDoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, 77813481Sgiacomo.travaglini@arm.com Action7 a7, Action8 a8, Action9 a9, Action10 a10) { 77913481Sgiacomo.travaglini@arm.com return DoAll(a1, DoAll(a2, a3, a4, a5, a6, a7, a8, a9, a10)); 78013481Sgiacomo.travaglini@arm.com} 78113481Sgiacomo.travaglini@arm.com 78213481Sgiacomo.travaglini@arm.com} // namespace testing 78313481Sgiacomo.travaglini@arm.com 78413481Sgiacomo.travaglini@arm.com// The ACTION* family of macros can be used in a namespace scope to 78513481Sgiacomo.travaglini@arm.com// define custom actions easily. The syntax: 78613481Sgiacomo.travaglini@arm.com// 78713481Sgiacomo.travaglini@arm.com// ACTION(name) { statements; } 78813481Sgiacomo.travaglini@arm.com// 78913481Sgiacomo.travaglini@arm.com// will define an action with the given name that executes the 79013481Sgiacomo.travaglini@arm.com// statements. The value returned by the statements will be used as 79113481Sgiacomo.travaglini@arm.com// the return value of the action. Inside the statements, you can 79213481Sgiacomo.travaglini@arm.com// refer to the K-th (0-based) argument of the mock function by 79313481Sgiacomo.travaglini@arm.com// 'argK', and refer to its type by 'argK_type'. For example: 79413481Sgiacomo.travaglini@arm.com// 79513481Sgiacomo.travaglini@arm.com// ACTION(IncrementArg1) { 79613481Sgiacomo.travaglini@arm.com// arg1_type temp = arg1; 79713481Sgiacomo.travaglini@arm.com// return ++(*temp); 79813481Sgiacomo.travaglini@arm.com// } 79913481Sgiacomo.travaglini@arm.com// 80013481Sgiacomo.travaglini@arm.com// allows you to write 80113481Sgiacomo.travaglini@arm.com// 80213481Sgiacomo.travaglini@arm.com// ...WillOnce(IncrementArg1()); 80313481Sgiacomo.travaglini@arm.com// 80413481Sgiacomo.travaglini@arm.com// You can also refer to the entire argument tuple and its type by 80513481Sgiacomo.travaglini@arm.com// 'args' and 'args_type', and refer to the mock function type and its 80613481Sgiacomo.travaglini@arm.com// return type by 'function_type' and 'return_type'. 80713481Sgiacomo.travaglini@arm.com// 80813481Sgiacomo.travaglini@arm.com// Note that you don't need to specify the types of the mock function 80913481Sgiacomo.travaglini@arm.com// arguments. However rest assured that your code is still type-safe: 81013481Sgiacomo.travaglini@arm.com// you'll get a compiler error if *arg1 doesn't support the ++ 81113481Sgiacomo.travaglini@arm.com// operator, or if the type of ++(*arg1) isn't compatible with the 81213481Sgiacomo.travaglini@arm.com// mock function's return type, for example. 81313481Sgiacomo.travaglini@arm.com// 81413481Sgiacomo.travaglini@arm.com// Sometimes you'll want to parameterize the action. For that you can use 81513481Sgiacomo.travaglini@arm.com// another macro: 81613481Sgiacomo.travaglini@arm.com// 81713481Sgiacomo.travaglini@arm.com// ACTION_P(name, param_name) { statements; } 81813481Sgiacomo.travaglini@arm.com// 81913481Sgiacomo.travaglini@arm.com// For example: 82013481Sgiacomo.travaglini@arm.com// 82113481Sgiacomo.travaglini@arm.com// ACTION_P(Add, n) { return arg0 + n; } 82213481Sgiacomo.travaglini@arm.com// 82313481Sgiacomo.travaglini@arm.com// will allow you to write: 82413481Sgiacomo.travaglini@arm.com// 82513481Sgiacomo.travaglini@arm.com// ...WillOnce(Add(5)); 82613481Sgiacomo.travaglini@arm.com// 82713481Sgiacomo.travaglini@arm.com// Note that you don't need to provide the type of the parameter 82813481Sgiacomo.travaglini@arm.com// either. If you need to reference the type of a parameter named 82913481Sgiacomo.travaglini@arm.com// 'foo', you can write 'foo_type'. For example, in the body of 83013481Sgiacomo.travaglini@arm.com// ACTION_P(Add, n) above, you can write 'n_type' to refer to the type 83113481Sgiacomo.travaglini@arm.com// of 'n'. 83213481Sgiacomo.travaglini@arm.com// 83313481Sgiacomo.travaglini@arm.com// We also provide ACTION_P2, ACTION_P3, ..., up to ACTION_P10 to support 83413481Sgiacomo.travaglini@arm.com// multi-parameter actions. 83513481Sgiacomo.travaglini@arm.com// 83613481Sgiacomo.travaglini@arm.com// For the purpose of typing, you can view 83713481Sgiacomo.travaglini@arm.com// 83813481Sgiacomo.travaglini@arm.com// ACTION_Pk(Foo, p1, ..., pk) { ... } 83913481Sgiacomo.travaglini@arm.com// 84013481Sgiacomo.travaglini@arm.com// as shorthand for 84113481Sgiacomo.travaglini@arm.com// 84213481Sgiacomo.travaglini@arm.com// template <typename p1_type, ..., typename pk_type> 84313481Sgiacomo.travaglini@arm.com// FooActionPk<p1_type, ..., pk_type> Foo(p1_type p1, ..., pk_type pk) { ... } 84413481Sgiacomo.travaglini@arm.com// 84513481Sgiacomo.travaglini@arm.com// In particular, you can provide the template type arguments 84613481Sgiacomo.travaglini@arm.com// explicitly when invoking Foo(), as in Foo<long, bool>(5, false); 84713481Sgiacomo.travaglini@arm.com// although usually you can rely on the compiler to infer the types 84813481Sgiacomo.travaglini@arm.com// for you automatically. You can assign the result of expression 84913481Sgiacomo.travaglini@arm.com// Foo(p1, ..., pk) to a variable of type FooActionPk<p1_type, ..., 85013481Sgiacomo.travaglini@arm.com// pk_type>. This can be useful when composing actions. 85113481Sgiacomo.travaglini@arm.com// 85213481Sgiacomo.travaglini@arm.com// You can also overload actions with different numbers of parameters: 85313481Sgiacomo.travaglini@arm.com// 85413481Sgiacomo.travaglini@arm.com// ACTION_P(Plus, a) { ... } 85513481Sgiacomo.travaglini@arm.com// ACTION_P2(Plus, a, b) { ... } 85613481Sgiacomo.travaglini@arm.com// 85713481Sgiacomo.travaglini@arm.com// While it's tempting to always use the ACTION* macros when defining 85813481Sgiacomo.travaglini@arm.com// a new action, you should also consider implementing ActionInterface 85913481Sgiacomo.travaglini@arm.com// or using MakePolymorphicAction() instead, especially if you need to 86013481Sgiacomo.travaglini@arm.com// use the action a lot. While these approaches require more work, 86113481Sgiacomo.travaglini@arm.com// they give you more control on the types of the mock function 86213481Sgiacomo.travaglini@arm.com// arguments and the action parameters, which in general leads to 86313481Sgiacomo.travaglini@arm.com// better compiler error messages that pay off in the long run. They 86413481Sgiacomo.travaglini@arm.com// also allow overloading actions based on parameter types (as opposed 86513481Sgiacomo.travaglini@arm.com// to just based on the number of parameters). 86613481Sgiacomo.travaglini@arm.com// 86713481Sgiacomo.travaglini@arm.com// CAVEAT: 86813481Sgiacomo.travaglini@arm.com// 86913481Sgiacomo.travaglini@arm.com// ACTION*() can only be used in a namespace scope. The reason is 87013481Sgiacomo.travaglini@arm.com// that C++ doesn't yet allow function-local types to be used to 87113481Sgiacomo.travaglini@arm.com// instantiate templates. The up-coming C++0x standard will fix this. 87213481Sgiacomo.travaglini@arm.com// Once that's done, we'll consider supporting using ACTION*() inside 87313481Sgiacomo.travaglini@arm.com// a function. 87413481Sgiacomo.travaglini@arm.com// 87513481Sgiacomo.travaglini@arm.com// MORE INFORMATION: 87613481Sgiacomo.travaglini@arm.com// 87713481Sgiacomo.travaglini@arm.com// To learn more about using these macros, please search for 'ACTION' 87813481Sgiacomo.travaglini@arm.com// on http://code.google.com/p/googlemock/wiki/CookBook. 87913481Sgiacomo.travaglini@arm.com 88013481Sgiacomo.travaglini@arm.com// An internal macro needed for implementing ACTION*(). 88113481Sgiacomo.travaglini@arm.com#define GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_\ 88213481Sgiacomo.travaglini@arm.com const args_type& args GTEST_ATTRIBUTE_UNUSED_, \ 88313481Sgiacomo.travaglini@arm.com arg0_type arg0 GTEST_ATTRIBUTE_UNUSED_, \ 88413481Sgiacomo.travaglini@arm.com arg1_type arg1 GTEST_ATTRIBUTE_UNUSED_, \ 88513481Sgiacomo.travaglini@arm.com arg2_type arg2 GTEST_ATTRIBUTE_UNUSED_, \ 88613481Sgiacomo.travaglini@arm.com arg3_type arg3 GTEST_ATTRIBUTE_UNUSED_, \ 88713481Sgiacomo.travaglini@arm.com arg4_type arg4 GTEST_ATTRIBUTE_UNUSED_, \ 88813481Sgiacomo.travaglini@arm.com arg5_type arg5 GTEST_ATTRIBUTE_UNUSED_, \ 88913481Sgiacomo.travaglini@arm.com arg6_type arg6 GTEST_ATTRIBUTE_UNUSED_, \ 89013481Sgiacomo.travaglini@arm.com arg7_type arg7 GTEST_ATTRIBUTE_UNUSED_, \ 89113481Sgiacomo.travaglini@arm.com arg8_type arg8 GTEST_ATTRIBUTE_UNUSED_, \ 89213481Sgiacomo.travaglini@arm.com arg9_type arg9 GTEST_ATTRIBUTE_UNUSED_ 89313481Sgiacomo.travaglini@arm.com 89413481Sgiacomo.travaglini@arm.com// Sometimes you want to give an action explicit template parameters 89513481Sgiacomo.travaglini@arm.com// that cannot be inferred from its value parameters. ACTION() and 89613481Sgiacomo.travaglini@arm.com// ACTION_P*() don't support that. ACTION_TEMPLATE() remedies that 89713481Sgiacomo.travaglini@arm.com// and can be viewed as an extension to ACTION() and ACTION_P*(). 89813481Sgiacomo.travaglini@arm.com// 89913481Sgiacomo.travaglini@arm.com// The syntax: 90013481Sgiacomo.travaglini@arm.com// 90113481Sgiacomo.travaglini@arm.com// ACTION_TEMPLATE(ActionName, 90213481Sgiacomo.travaglini@arm.com// HAS_m_TEMPLATE_PARAMS(kind1, name1, ..., kind_m, name_m), 90313481Sgiacomo.travaglini@arm.com// AND_n_VALUE_PARAMS(p1, ..., p_n)) { statements; } 90413481Sgiacomo.travaglini@arm.com// 90513481Sgiacomo.travaglini@arm.com// defines an action template that takes m explicit template 90613481Sgiacomo.travaglini@arm.com// parameters and n value parameters. name_i is the name of the i-th 90713481Sgiacomo.travaglini@arm.com// template parameter, and kind_i specifies whether it's a typename, 90813481Sgiacomo.travaglini@arm.com// an integral constant, or a template. p_i is the name of the i-th 90913481Sgiacomo.travaglini@arm.com// value parameter. 91013481Sgiacomo.travaglini@arm.com// 91113481Sgiacomo.travaglini@arm.com// Example: 91213481Sgiacomo.travaglini@arm.com// 91313481Sgiacomo.travaglini@arm.com// // DuplicateArg<k, T>(output) converts the k-th argument of the mock 91413481Sgiacomo.travaglini@arm.com// // function to type T and copies it to *output. 91513481Sgiacomo.travaglini@arm.com// ACTION_TEMPLATE(DuplicateArg, 91613481Sgiacomo.travaglini@arm.com// HAS_2_TEMPLATE_PARAMS(int, k, typename, T), 91713481Sgiacomo.travaglini@arm.com// AND_1_VALUE_PARAMS(output)) { 91813481Sgiacomo.travaglini@arm.com// *output = T(::testing::get<k>(args)); 91913481Sgiacomo.travaglini@arm.com// } 92013481Sgiacomo.travaglini@arm.com// ... 92113481Sgiacomo.travaglini@arm.com// int n; 92213481Sgiacomo.travaglini@arm.com// EXPECT_CALL(mock, Foo(_, _)) 92313481Sgiacomo.travaglini@arm.com// .WillOnce(DuplicateArg<1, unsigned char>(&n)); 92413481Sgiacomo.travaglini@arm.com// 92513481Sgiacomo.travaglini@arm.com// To create an instance of an action template, write: 92613481Sgiacomo.travaglini@arm.com// 92713481Sgiacomo.travaglini@arm.com// ActionName<t1, ..., t_m>(v1, ..., v_n) 92813481Sgiacomo.travaglini@arm.com// 92913481Sgiacomo.travaglini@arm.com// where the ts are the template arguments and the vs are the value 93013481Sgiacomo.travaglini@arm.com// arguments. The value argument types are inferred by the compiler. 93113481Sgiacomo.travaglini@arm.com// If you want to explicitly specify the value argument types, you can 93213481Sgiacomo.travaglini@arm.com// provide additional template arguments: 93313481Sgiacomo.travaglini@arm.com// 93413481Sgiacomo.travaglini@arm.com// ActionName<t1, ..., t_m, u1, ..., u_k>(v1, ..., v_n) 93513481Sgiacomo.travaglini@arm.com// 93613481Sgiacomo.travaglini@arm.com// where u_i is the desired type of v_i. 93713481Sgiacomo.travaglini@arm.com// 93813481Sgiacomo.travaglini@arm.com// ACTION_TEMPLATE and ACTION/ACTION_P* can be overloaded on the 93913481Sgiacomo.travaglini@arm.com// number of value parameters, but not on the number of template 94013481Sgiacomo.travaglini@arm.com// parameters. Without the restriction, the meaning of the following 94113481Sgiacomo.travaglini@arm.com// is unclear: 94213481Sgiacomo.travaglini@arm.com// 94313481Sgiacomo.travaglini@arm.com// OverloadedAction<int, bool>(x); 94413481Sgiacomo.travaglini@arm.com// 94513481Sgiacomo.travaglini@arm.com// Are we using a single-template-parameter action where 'bool' refers 94613481Sgiacomo.travaglini@arm.com// to the type of x, or are we using a two-template-parameter action 94713481Sgiacomo.travaglini@arm.com// where the compiler is asked to infer the type of x? 94813481Sgiacomo.travaglini@arm.com// 94913481Sgiacomo.travaglini@arm.com// Implementation notes: 95013481Sgiacomo.travaglini@arm.com// 95113481Sgiacomo.travaglini@arm.com// GMOCK_INTERNAL_*_HAS_m_TEMPLATE_PARAMS and 95213481Sgiacomo.travaglini@arm.com// GMOCK_INTERNAL_*_AND_n_VALUE_PARAMS are internal macros for 95313481Sgiacomo.travaglini@arm.com// implementing ACTION_TEMPLATE. The main trick we use is to create 95413481Sgiacomo.travaglini@arm.com// new macro invocations when expanding a macro. For example, we have 95513481Sgiacomo.travaglini@arm.com// 95613481Sgiacomo.travaglini@arm.com// #define ACTION_TEMPLATE(name, template_params, value_params) 95713481Sgiacomo.travaglini@arm.com// ... GMOCK_INTERNAL_DECL_##template_params ... 95813481Sgiacomo.travaglini@arm.com// 95913481Sgiacomo.travaglini@arm.com// which causes ACTION_TEMPLATE(..., HAS_1_TEMPLATE_PARAMS(typename, T), ...) 96013481Sgiacomo.travaglini@arm.com// to expand to 96113481Sgiacomo.travaglini@arm.com// 96213481Sgiacomo.travaglini@arm.com// ... GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS(typename, T) ... 96313481Sgiacomo.travaglini@arm.com// 96413481Sgiacomo.travaglini@arm.com// Since GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS is a macro, the 96513481Sgiacomo.travaglini@arm.com// preprocessor will continue to expand it to 96613481Sgiacomo.travaglini@arm.com// 96713481Sgiacomo.travaglini@arm.com// ... typename T ... 96813481Sgiacomo.travaglini@arm.com// 96913481Sgiacomo.travaglini@arm.com// This technique conforms to the C++ standard and is portable. It 97013481Sgiacomo.travaglini@arm.com// allows us to implement action templates using O(N) code, where N is 97113481Sgiacomo.travaglini@arm.com// the maximum number of template/value parameters supported. Without 97213481Sgiacomo.travaglini@arm.com// using it, we'd have to devote O(N^2) amount of code to implement all 97313481Sgiacomo.travaglini@arm.com// combinations of m and n. 97413481Sgiacomo.travaglini@arm.com 97513481Sgiacomo.travaglini@arm.com// Declares the template parameters. 97613481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS(kind0, name0) kind0 name0 97713481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, \ 97813481Sgiacomo.travaglini@arm.com name1) kind0 name0, kind1 name1 97913481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 98013481Sgiacomo.travaglini@arm.com kind2, name2) kind0 name0, kind1 name1, kind2 name2 98113481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 98213481Sgiacomo.travaglini@arm.com kind2, name2, kind3, name3) kind0 name0, kind1 name1, kind2 name2, \ 98313481Sgiacomo.travaglini@arm.com kind3 name3 98413481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_HAS_5_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 98513481Sgiacomo.travaglini@arm.com kind2, name2, kind3, name3, kind4, name4) kind0 name0, kind1 name1, \ 98613481Sgiacomo.travaglini@arm.com kind2 name2, kind3 name3, kind4 name4 98713481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 98813481Sgiacomo.travaglini@arm.com kind2, name2, kind3, name3, kind4, name4, kind5, name5) kind0 name0, \ 98913481Sgiacomo.travaglini@arm.com kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5 99013481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_HAS_7_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 99113481Sgiacomo.travaglini@arm.com kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ 99213481Sgiacomo.travaglini@arm.com name6) kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, \ 99313481Sgiacomo.travaglini@arm.com kind5 name5, kind6 name6 99413481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_HAS_8_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 99513481Sgiacomo.travaglini@arm.com kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ 99613481Sgiacomo.travaglini@arm.com kind7, name7) kind0 name0, kind1 name1, kind2 name2, kind3 name3, \ 99713481Sgiacomo.travaglini@arm.com kind4 name4, kind5 name5, kind6 name6, kind7 name7 99813481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_HAS_9_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 99913481Sgiacomo.travaglini@arm.com kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ 100013481Sgiacomo.travaglini@arm.com kind7, name7, kind8, name8) kind0 name0, kind1 name1, kind2 name2, \ 100113481Sgiacomo.travaglini@arm.com kind3 name3, kind4 name4, kind5 name5, kind6 name6, kind7 name7, \ 100213481Sgiacomo.travaglini@arm.com kind8 name8 100313481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_HAS_10_TEMPLATE_PARAMS(kind0, name0, kind1, \ 100413481Sgiacomo.travaglini@arm.com name1, kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ 100513481Sgiacomo.travaglini@arm.com name6, kind7, name7, kind8, name8, kind9, name9) kind0 name0, \ 100613481Sgiacomo.travaglini@arm.com kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5, \ 100713481Sgiacomo.travaglini@arm.com kind6 name6, kind7 name7, kind8 name8, kind9 name9 100813481Sgiacomo.travaglini@arm.com 100913481Sgiacomo.travaglini@arm.com// Lists the template parameters. 101013481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_HAS_1_TEMPLATE_PARAMS(kind0, name0) name0 101113481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, \ 101213481Sgiacomo.travaglini@arm.com name1) name0, name1 101313481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 101413481Sgiacomo.travaglini@arm.com kind2, name2) name0, name1, name2 101513481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 101613481Sgiacomo.travaglini@arm.com kind2, name2, kind3, name3) name0, name1, name2, name3 101713481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_HAS_5_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 101813481Sgiacomo.travaglini@arm.com kind2, name2, kind3, name3, kind4, name4) name0, name1, name2, name3, \ 101913481Sgiacomo.travaglini@arm.com name4 102013481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 102113481Sgiacomo.travaglini@arm.com kind2, name2, kind3, name3, kind4, name4, kind5, name5) name0, name1, \ 102213481Sgiacomo.travaglini@arm.com name2, name3, name4, name5 102313481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_HAS_7_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 102413481Sgiacomo.travaglini@arm.com kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ 102513481Sgiacomo.travaglini@arm.com name6) name0, name1, name2, name3, name4, name5, name6 102613481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_HAS_8_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 102713481Sgiacomo.travaglini@arm.com kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ 102813481Sgiacomo.travaglini@arm.com kind7, name7) name0, name1, name2, name3, name4, name5, name6, name7 102913481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_HAS_9_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 103013481Sgiacomo.travaglini@arm.com kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ 103113481Sgiacomo.travaglini@arm.com kind7, name7, kind8, name8) name0, name1, name2, name3, name4, name5, \ 103213481Sgiacomo.travaglini@arm.com name6, name7, name8 103313481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_HAS_10_TEMPLATE_PARAMS(kind0, name0, kind1, \ 103413481Sgiacomo.travaglini@arm.com name1, kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ 103513481Sgiacomo.travaglini@arm.com name6, kind7, name7, kind8, name8, kind9, name9) name0, name1, name2, \ 103613481Sgiacomo.travaglini@arm.com name3, name4, name5, name6, name7, name8, name9 103713481Sgiacomo.travaglini@arm.com 103813481Sgiacomo.travaglini@arm.com// Declares the types of value parameters. 103913481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_TYPE_AND_0_VALUE_PARAMS() 104013481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_TYPE_AND_1_VALUE_PARAMS(p0) , typename p0##_type 104113481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_TYPE_AND_2_VALUE_PARAMS(p0, p1) , \ 104213481Sgiacomo.travaglini@arm.com typename p0##_type, typename p1##_type 104313481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) , \ 104413481Sgiacomo.travaglini@arm.com typename p0##_type, typename p1##_type, typename p2##_type 104513481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) , \ 104613481Sgiacomo.travaglini@arm.com typename p0##_type, typename p1##_type, typename p2##_type, \ 104713481Sgiacomo.travaglini@arm.com typename p3##_type 104813481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) , \ 104913481Sgiacomo.travaglini@arm.com typename p0##_type, typename p1##_type, typename p2##_type, \ 105013481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type 105113481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) , \ 105213481Sgiacomo.travaglini@arm.com typename p0##_type, typename p1##_type, typename p2##_type, \ 105313481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type 105413481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 105513481Sgiacomo.travaglini@arm.com p6) , typename p0##_type, typename p1##_type, typename p2##_type, \ 105613481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 105713481Sgiacomo.travaglini@arm.com typename p6##_type 105813481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 105913481Sgiacomo.travaglini@arm.com p6, p7) , typename p0##_type, typename p1##_type, typename p2##_type, \ 106013481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 106113481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type 106213481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 106313481Sgiacomo.travaglini@arm.com p6, p7, p8) , typename p0##_type, typename p1##_type, typename p2##_type, \ 106413481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 106513481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type, typename p8##_type 106613481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 106713481Sgiacomo.travaglini@arm.com p6, p7, p8, p9) , typename p0##_type, typename p1##_type, \ 106813481Sgiacomo.travaglini@arm.com typename p2##_type, typename p3##_type, typename p4##_type, \ 106913481Sgiacomo.travaglini@arm.com typename p5##_type, typename p6##_type, typename p7##_type, \ 107013481Sgiacomo.travaglini@arm.com typename p8##_type, typename p9##_type 107113481Sgiacomo.travaglini@arm.com 107213481Sgiacomo.travaglini@arm.com// Initializes the value parameters. 107313481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_INIT_AND_0_VALUE_PARAMS()\ 107413481Sgiacomo.travaglini@arm.com () 107513481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_INIT_AND_1_VALUE_PARAMS(p0)\ 107613481Sgiacomo.travaglini@arm.com (p0##_type gmock_p0) : p0(gmock_p0) 107713481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_INIT_AND_2_VALUE_PARAMS(p0, p1)\ 107813481Sgiacomo.travaglini@arm.com (p0##_type gmock_p0, p1##_type gmock_p1) : p0(gmock_p0), p1(gmock_p1) 107913481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_INIT_AND_3_VALUE_PARAMS(p0, p1, p2)\ 108013481Sgiacomo.travaglini@arm.com (p0##_type gmock_p0, p1##_type gmock_p1, \ 108113481Sgiacomo.travaglini@arm.com p2##_type gmock_p2) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2) 108213481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_INIT_AND_4_VALUE_PARAMS(p0, p1, p2, p3)\ 108313481Sgiacomo.travaglini@arm.com (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 108413481Sgiacomo.travaglini@arm.com p3##_type gmock_p3) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 108513481Sgiacomo.travaglini@arm.com p3(gmock_p3) 108613481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_INIT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)\ 108713481Sgiacomo.travaglini@arm.com (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 108813481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4) : p0(gmock_p0), p1(gmock_p1), \ 108913481Sgiacomo.travaglini@arm.com p2(gmock_p2), p3(gmock_p3), p4(gmock_p4) 109013481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_INIT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)\ 109113481Sgiacomo.travaglini@arm.com (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 109213481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4, \ 109313481Sgiacomo.travaglini@arm.com p5##_type gmock_p5) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 109413481Sgiacomo.travaglini@arm.com p3(gmock_p3), p4(gmock_p4), p5(gmock_p5) 109513481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_INIT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)\ 109613481Sgiacomo.travaglini@arm.com (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 109713481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 109813481Sgiacomo.travaglini@arm.com p6##_type gmock_p6) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 109913481Sgiacomo.travaglini@arm.com p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6) 110013481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_INIT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)\ 110113481Sgiacomo.travaglini@arm.com (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 110213481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 110313481Sgiacomo.travaglini@arm.com p6##_type gmock_p6, p7##_type gmock_p7) : p0(gmock_p0), p1(gmock_p1), \ 110413481Sgiacomo.travaglini@arm.com p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ 110513481Sgiacomo.travaglini@arm.com p7(gmock_p7) 110613481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_INIT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 110713481Sgiacomo.travaglini@arm.com p7, p8)\ 110813481Sgiacomo.travaglini@arm.com (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 110913481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 111013481Sgiacomo.travaglini@arm.com p6##_type gmock_p6, p7##_type gmock_p7, \ 111113481Sgiacomo.travaglini@arm.com p8##_type gmock_p8) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 111213481Sgiacomo.travaglini@arm.com p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \ 111313481Sgiacomo.travaglini@arm.com p8(gmock_p8) 111413481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_INIT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 111513481Sgiacomo.travaglini@arm.com p7, p8, p9)\ 111613481Sgiacomo.travaglini@arm.com (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 111713481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 111813481Sgiacomo.travaglini@arm.com p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \ 111913481Sgiacomo.travaglini@arm.com p9##_type gmock_p9) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 112013481Sgiacomo.travaglini@arm.com p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \ 112113481Sgiacomo.travaglini@arm.com p8(gmock_p8), p9(gmock_p9) 112213481Sgiacomo.travaglini@arm.com 112313481Sgiacomo.travaglini@arm.com// Declares the fields for storing the value parameters. 112413481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DEFN_AND_0_VALUE_PARAMS() 112513481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DEFN_AND_1_VALUE_PARAMS(p0) p0##_type p0; 112613481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DEFN_AND_2_VALUE_PARAMS(p0, p1) p0##_type p0; \ 112713481Sgiacomo.travaglini@arm.com p1##_type p1; 112813481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DEFN_AND_3_VALUE_PARAMS(p0, p1, p2) p0##_type p0; \ 112913481Sgiacomo.travaglini@arm.com p1##_type p1; p2##_type p2; 113013481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DEFN_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0##_type p0; \ 113113481Sgiacomo.travaglini@arm.com p1##_type p1; p2##_type p2; p3##_type p3; 113213481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DEFN_AND_5_VALUE_PARAMS(p0, p1, p2, p3, \ 113313481Sgiacomo.travaglini@arm.com p4) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; 113413481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DEFN_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, \ 113513481Sgiacomo.travaglini@arm.com p5) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \ 113613481Sgiacomo.travaglini@arm.com p5##_type p5; 113713481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DEFN_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 113813481Sgiacomo.travaglini@arm.com p6) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \ 113913481Sgiacomo.travaglini@arm.com p5##_type p5; p6##_type p6; 114013481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DEFN_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 114113481Sgiacomo.travaglini@arm.com p7) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \ 114213481Sgiacomo.travaglini@arm.com p5##_type p5; p6##_type p6; p7##_type p7; 114313481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DEFN_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 114413481Sgiacomo.travaglini@arm.com p7, p8) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; \ 114513481Sgiacomo.travaglini@arm.com p4##_type p4; p5##_type p5; p6##_type p6; p7##_type p7; p8##_type p8; 114613481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DEFN_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 114713481Sgiacomo.travaglini@arm.com p7, p8, p9) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; \ 114813481Sgiacomo.travaglini@arm.com p4##_type p4; p5##_type p5; p6##_type p6; p7##_type p7; p8##_type p8; \ 114913481Sgiacomo.travaglini@arm.com p9##_type p9; 115013481Sgiacomo.travaglini@arm.com 115113481Sgiacomo.travaglini@arm.com// Lists the value parameters. 115213481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_AND_0_VALUE_PARAMS() 115313481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_AND_1_VALUE_PARAMS(p0) p0 115413481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_AND_2_VALUE_PARAMS(p0, p1) p0, p1 115513481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_AND_3_VALUE_PARAMS(p0, p1, p2) p0, p1, p2 115613481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0, p1, p2, p3 115713481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) p0, p1, \ 115813481Sgiacomo.travaglini@arm.com p2, p3, p4 115913481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) p0, \ 116013481Sgiacomo.travaglini@arm.com p1, p2, p3, p4, p5 116113481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 116213481Sgiacomo.travaglini@arm.com p6) p0, p1, p2, p3, p4, p5, p6 116313481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 116413481Sgiacomo.travaglini@arm.com p7) p0, p1, p2, p3, p4, p5, p6, p7 116513481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 116613481Sgiacomo.travaglini@arm.com p7, p8) p0, p1, p2, p3, p4, p5, p6, p7, p8 116713481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 116813481Sgiacomo.travaglini@arm.com p7, p8, p9) p0, p1, p2, p3, p4, p5, p6, p7, p8, p9 116913481Sgiacomo.travaglini@arm.com 117013481Sgiacomo.travaglini@arm.com// Lists the value parameter types. 117113481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_TYPE_AND_0_VALUE_PARAMS() 117213481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_TYPE_AND_1_VALUE_PARAMS(p0) , p0##_type 117313481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_TYPE_AND_2_VALUE_PARAMS(p0, p1) , p0##_type, \ 117413481Sgiacomo.travaglini@arm.com p1##_type 117513481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) , p0##_type, \ 117613481Sgiacomo.travaglini@arm.com p1##_type, p2##_type 117713481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) , \ 117813481Sgiacomo.travaglini@arm.com p0##_type, p1##_type, p2##_type, p3##_type 117913481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) , \ 118013481Sgiacomo.travaglini@arm.com p0##_type, p1##_type, p2##_type, p3##_type, p4##_type 118113481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) , \ 118213481Sgiacomo.travaglini@arm.com p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type 118313481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 118413481Sgiacomo.travaglini@arm.com p6) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, \ 118513481Sgiacomo.travaglini@arm.com p6##_type 118613481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 118713481Sgiacomo.travaglini@arm.com p6, p7) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 118813481Sgiacomo.travaglini@arm.com p5##_type, p6##_type, p7##_type 118913481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 119013481Sgiacomo.travaglini@arm.com p6, p7, p8) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 119113481Sgiacomo.travaglini@arm.com p5##_type, p6##_type, p7##_type, p8##_type 119213481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_LIST_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 119313481Sgiacomo.travaglini@arm.com p6, p7, p8, p9) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 119413481Sgiacomo.travaglini@arm.com p5##_type, p6##_type, p7##_type, p8##_type, p9##_type 119513481Sgiacomo.travaglini@arm.com 119613481Sgiacomo.travaglini@arm.com// Declares the value parameters. 119713481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_AND_0_VALUE_PARAMS() 119813481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_AND_1_VALUE_PARAMS(p0) p0##_type p0 119913481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_AND_2_VALUE_PARAMS(p0, p1) p0##_type p0, \ 120013481Sgiacomo.travaglini@arm.com p1##_type p1 120113481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_AND_3_VALUE_PARAMS(p0, p1, p2) p0##_type p0, \ 120213481Sgiacomo.travaglini@arm.com p1##_type p1, p2##_type p2 120313481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0##_type p0, \ 120413481Sgiacomo.travaglini@arm.com p1##_type p1, p2##_type p2, p3##_type p3 120513481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_AND_5_VALUE_PARAMS(p0, p1, p2, p3, \ 120613481Sgiacomo.travaglini@arm.com p4) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4 120713481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, \ 120813481Sgiacomo.travaglini@arm.com p5) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ 120913481Sgiacomo.travaglini@arm.com p5##_type p5 121013481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 121113481Sgiacomo.travaglini@arm.com p6) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ 121213481Sgiacomo.travaglini@arm.com p5##_type p5, p6##_type p6 121313481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 121413481Sgiacomo.travaglini@arm.com p7) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ 121513481Sgiacomo.travaglini@arm.com p5##_type p5, p6##_type p6, p7##_type p7 121613481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 121713481Sgiacomo.travaglini@arm.com p7, p8) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 121813481Sgiacomo.travaglini@arm.com p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8 121913481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_DECL_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 122013481Sgiacomo.travaglini@arm.com p7, p8, p9) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 122113481Sgiacomo.travaglini@arm.com p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \ 122213481Sgiacomo.travaglini@arm.com p9##_type p9 122313481Sgiacomo.travaglini@arm.com 122413481Sgiacomo.travaglini@arm.com// The suffix of the class template implementing the action template. 122513481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_COUNT_AND_0_VALUE_PARAMS() 122613481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_COUNT_AND_1_VALUE_PARAMS(p0) P 122713481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_COUNT_AND_2_VALUE_PARAMS(p0, p1) P2 122813481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_COUNT_AND_3_VALUE_PARAMS(p0, p1, p2) P3 122913481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_COUNT_AND_4_VALUE_PARAMS(p0, p1, p2, p3) P4 123013481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_COUNT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) P5 123113481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_COUNT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) P6 123213481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_COUNT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6) P7 123313481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_COUNT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 123413481Sgiacomo.travaglini@arm.com p7) P8 123513481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_COUNT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 123613481Sgiacomo.travaglini@arm.com p7, p8) P9 123713481Sgiacomo.travaglini@arm.com#define GMOCK_INTERNAL_COUNT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 123813481Sgiacomo.travaglini@arm.com p7, p8, p9) P10 123913481Sgiacomo.travaglini@arm.com 124013481Sgiacomo.travaglini@arm.com// The name of the class template implementing the action template. 124113481Sgiacomo.travaglini@arm.com#define GMOCK_ACTION_CLASS_(name, value_params)\ 124213481Sgiacomo.travaglini@arm.com GTEST_CONCAT_TOKEN_(name##Action, GMOCK_INTERNAL_COUNT_##value_params) 124313481Sgiacomo.travaglini@arm.com 124413481Sgiacomo.travaglini@arm.com#define ACTION_TEMPLATE(name, template_params, value_params)\ 124513481Sgiacomo.travaglini@arm.com template <GMOCK_INTERNAL_DECL_##template_params\ 124613481Sgiacomo.travaglini@arm.com GMOCK_INTERNAL_DECL_TYPE_##value_params>\ 124713481Sgiacomo.travaglini@arm.com class GMOCK_ACTION_CLASS_(name, value_params) {\ 124813481Sgiacomo.travaglini@arm.com public:\ 124913481Sgiacomo.travaglini@arm.com explicit GMOCK_ACTION_CLASS_(name, value_params)\ 125013481Sgiacomo.travaglini@arm.com GMOCK_INTERNAL_INIT_##value_params {}\ 125113481Sgiacomo.travaglini@arm.com template <typename F>\ 125213481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::ActionInterface<F> {\ 125313481Sgiacomo.travaglini@arm.com public:\ 125413481Sgiacomo.travaglini@arm.com typedef F function_type;\ 125513481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::Result return_type;\ 125613481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 125713481Sgiacomo.travaglini@arm.com args_type;\ 125813481Sgiacomo.travaglini@arm.com explicit gmock_Impl GMOCK_INTERNAL_INIT_##value_params {}\ 125913481Sgiacomo.travaglini@arm.com virtual return_type Perform(const args_type& args) {\ 126013481Sgiacomo.travaglini@arm.com return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 126113481Sgiacomo.travaglini@arm.com Perform(this, args);\ 126213481Sgiacomo.travaglini@arm.com }\ 126313481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 126413481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 126513481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 126613481Sgiacomo.travaglini@arm.com typename arg9_type>\ 126713481Sgiacomo.travaglini@arm.com return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 126813481Sgiacomo.travaglini@arm.com arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 126913481Sgiacomo.travaglini@arm.com arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 127013481Sgiacomo.travaglini@arm.com arg9_type arg9) const;\ 127113481Sgiacomo.travaglini@arm.com GMOCK_INTERNAL_DEFN_##value_params\ 127213481Sgiacomo.travaglini@arm.com private:\ 127313481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 127413481Sgiacomo.travaglini@arm.com };\ 127513481Sgiacomo.travaglini@arm.com template <typename F> operator ::testing::Action<F>() const {\ 127613481Sgiacomo.travaglini@arm.com return ::testing::Action<F>(\ 127713481Sgiacomo.travaglini@arm.com new gmock_Impl<F>(GMOCK_INTERNAL_LIST_##value_params));\ 127813481Sgiacomo.travaglini@arm.com }\ 127913481Sgiacomo.travaglini@arm.com GMOCK_INTERNAL_DEFN_##value_params\ 128013481Sgiacomo.travaglini@arm.com private:\ 128113481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(GMOCK_ACTION_CLASS_(name, value_params));\ 128213481Sgiacomo.travaglini@arm.com };\ 128313481Sgiacomo.travaglini@arm.com template <GMOCK_INTERNAL_DECL_##template_params\ 128413481Sgiacomo.travaglini@arm.com GMOCK_INTERNAL_DECL_TYPE_##value_params>\ 128513481Sgiacomo.travaglini@arm.com inline GMOCK_ACTION_CLASS_(name, value_params)<\ 128613481Sgiacomo.travaglini@arm.com GMOCK_INTERNAL_LIST_##template_params\ 128713481Sgiacomo.travaglini@arm.com GMOCK_INTERNAL_LIST_TYPE_##value_params> name(\ 128813481Sgiacomo.travaglini@arm.com GMOCK_INTERNAL_DECL_##value_params) {\ 128913481Sgiacomo.travaglini@arm.com return GMOCK_ACTION_CLASS_(name, value_params)<\ 129013481Sgiacomo.travaglini@arm.com GMOCK_INTERNAL_LIST_##template_params\ 129113481Sgiacomo.travaglini@arm.com GMOCK_INTERNAL_LIST_TYPE_##value_params>(\ 129213481Sgiacomo.travaglini@arm.com GMOCK_INTERNAL_LIST_##value_params);\ 129313481Sgiacomo.travaglini@arm.com }\ 129413481Sgiacomo.travaglini@arm.com template <GMOCK_INTERNAL_DECL_##template_params\ 129513481Sgiacomo.travaglini@arm.com GMOCK_INTERNAL_DECL_TYPE_##value_params>\ 129613481Sgiacomo.travaglini@arm.com template <typename F>\ 129713481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 129813481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 129913481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 130013481Sgiacomo.travaglini@arm.com typename arg9_type>\ 130113481Sgiacomo.travaglini@arm.com typename ::testing::internal::Function<F>::Result\ 130213481Sgiacomo.travaglini@arm.com GMOCK_ACTION_CLASS_(name, value_params)<\ 130313481Sgiacomo.travaglini@arm.com GMOCK_INTERNAL_LIST_##template_params\ 130413481Sgiacomo.travaglini@arm.com GMOCK_INTERNAL_LIST_TYPE_##value_params>::gmock_Impl<F>::\ 130513481Sgiacomo.travaglini@arm.com gmock_PerformImpl(\ 130613481Sgiacomo.travaglini@arm.com GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 130713481Sgiacomo.travaglini@arm.com 130813481Sgiacomo.travaglini@arm.com#define ACTION(name)\ 130913481Sgiacomo.travaglini@arm.com class name##Action {\ 131013481Sgiacomo.travaglini@arm.com public:\ 131113481Sgiacomo.travaglini@arm.com name##Action() {}\ 131213481Sgiacomo.travaglini@arm.com template <typename F>\ 131313481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::ActionInterface<F> {\ 131413481Sgiacomo.travaglini@arm.com public:\ 131513481Sgiacomo.travaglini@arm.com typedef F function_type;\ 131613481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::Result return_type;\ 131713481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 131813481Sgiacomo.travaglini@arm.com args_type;\ 131913481Sgiacomo.travaglini@arm.com gmock_Impl() {}\ 132013481Sgiacomo.travaglini@arm.com virtual return_type Perform(const args_type& args) {\ 132113481Sgiacomo.travaglini@arm.com return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 132213481Sgiacomo.travaglini@arm.com Perform(this, args);\ 132313481Sgiacomo.travaglini@arm.com }\ 132413481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 132513481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 132613481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 132713481Sgiacomo.travaglini@arm.com typename arg9_type>\ 132813481Sgiacomo.travaglini@arm.com return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 132913481Sgiacomo.travaglini@arm.com arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 133013481Sgiacomo.travaglini@arm.com arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 133113481Sgiacomo.travaglini@arm.com arg9_type arg9) const;\ 133213481Sgiacomo.travaglini@arm.com private:\ 133313481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 133413481Sgiacomo.travaglini@arm.com };\ 133513481Sgiacomo.travaglini@arm.com template <typename F> operator ::testing::Action<F>() const {\ 133613481Sgiacomo.travaglini@arm.com return ::testing::Action<F>(new gmock_Impl<F>());\ 133713481Sgiacomo.travaglini@arm.com }\ 133813481Sgiacomo.travaglini@arm.com private:\ 133913481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##Action);\ 134013481Sgiacomo.travaglini@arm.com };\ 134113481Sgiacomo.travaglini@arm.com inline name##Action name() {\ 134213481Sgiacomo.travaglini@arm.com return name##Action();\ 134313481Sgiacomo.travaglini@arm.com }\ 134413481Sgiacomo.travaglini@arm.com template <typename F>\ 134513481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 134613481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 134713481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 134813481Sgiacomo.travaglini@arm.com typename arg9_type>\ 134913481Sgiacomo.travaglini@arm.com typename ::testing::internal::Function<F>::Result\ 135013481Sgiacomo.travaglini@arm.com name##Action::gmock_Impl<F>::gmock_PerformImpl(\ 135113481Sgiacomo.travaglini@arm.com GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 135213481Sgiacomo.travaglini@arm.com 135313481Sgiacomo.travaglini@arm.com#define ACTION_P(name, p0)\ 135413481Sgiacomo.travaglini@arm.com template <typename p0##_type>\ 135513481Sgiacomo.travaglini@arm.com class name##ActionP {\ 135613481Sgiacomo.travaglini@arm.com public:\ 135713481Sgiacomo.travaglini@arm.com explicit name##ActionP(p0##_type gmock_p0) : p0(gmock_p0) {}\ 135813481Sgiacomo.travaglini@arm.com template <typename F>\ 135913481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::ActionInterface<F> {\ 136013481Sgiacomo.travaglini@arm.com public:\ 136113481Sgiacomo.travaglini@arm.com typedef F function_type;\ 136213481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::Result return_type;\ 136313481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 136413481Sgiacomo.travaglini@arm.com args_type;\ 136513481Sgiacomo.travaglini@arm.com explicit gmock_Impl(p0##_type gmock_p0) : p0(gmock_p0) {}\ 136613481Sgiacomo.travaglini@arm.com virtual return_type Perform(const args_type& args) {\ 136713481Sgiacomo.travaglini@arm.com return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 136813481Sgiacomo.travaglini@arm.com Perform(this, args);\ 136913481Sgiacomo.travaglini@arm.com }\ 137013481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 137113481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 137213481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 137313481Sgiacomo.travaglini@arm.com typename arg9_type>\ 137413481Sgiacomo.travaglini@arm.com return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 137513481Sgiacomo.travaglini@arm.com arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 137613481Sgiacomo.travaglini@arm.com arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 137713481Sgiacomo.travaglini@arm.com arg9_type arg9) const;\ 137813481Sgiacomo.travaglini@arm.com p0##_type p0;\ 137913481Sgiacomo.travaglini@arm.com private:\ 138013481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 138113481Sgiacomo.travaglini@arm.com };\ 138213481Sgiacomo.travaglini@arm.com template <typename F> operator ::testing::Action<F>() const {\ 138313481Sgiacomo.travaglini@arm.com return ::testing::Action<F>(new gmock_Impl<F>(p0));\ 138413481Sgiacomo.travaglini@arm.com }\ 138513481Sgiacomo.travaglini@arm.com p0##_type p0;\ 138613481Sgiacomo.travaglini@arm.com private:\ 138713481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##ActionP);\ 138813481Sgiacomo.travaglini@arm.com };\ 138913481Sgiacomo.travaglini@arm.com template <typename p0##_type>\ 139013481Sgiacomo.travaglini@arm.com inline name##ActionP<p0##_type> name(p0##_type p0) {\ 139113481Sgiacomo.travaglini@arm.com return name##ActionP<p0##_type>(p0);\ 139213481Sgiacomo.travaglini@arm.com }\ 139313481Sgiacomo.travaglini@arm.com template <typename p0##_type>\ 139413481Sgiacomo.travaglini@arm.com template <typename F>\ 139513481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 139613481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 139713481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 139813481Sgiacomo.travaglini@arm.com typename arg9_type>\ 139913481Sgiacomo.travaglini@arm.com typename ::testing::internal::Function<F>::Result\ 140013481Sgiacomo.travaglini@arm.com name##ActionP<p0##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 140113481Sgiacomo.travaglini@arm.com GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 140213481Sgiacomo.travaglini@arm.com 140313481Sgiacomo.travaglini@arm.com#define ACTION_P2(name, p0, p1)\ 140413481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type>\ 140513481Sgiacomo.travaglini@arm.com class name##ActionP2 {\ 140613481Sgiacomo.travaglini@arm.com public:\ 140713481Sgiacomo.travaglini@arm.com name##ActionP2(p0##_type gmock_p0, p1##_type gmock_p1) : p0(gmock_p0), \ 140813481Sgiacomo.travaglini@arm.com p1(gmock_p1) {}\ 140913481Sgiacomo.travaglini@arm.com template <typename F>\ 141013481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::ActionInterface<F> {\ 141113481Sgiacomo.travaglini@arm.com public:\ 141213481Sgiacomo.travaglini@arm.com typedef F function_type;\ 141313481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::Result return_type;\ 141413481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 141513481Sgiacomo.travaglini@arm.com args_type;\ 141613481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1) : p0(gmock_p0), \ 141713481Sgiacomo.travaglini@arm.com p1(gmock_p1) {}\ 141813481Sgiacomo.travaglini@arm.com virtual return_type Perform(const args_type& args) {\ 141913481Sgiacomo.travaglini@arm.com return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 142013481Sgiacomo.travaglini@arm.com Perform(this, args);\ 142113481Sgiacomo.travaglini@arm.com }\ 142213481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 142313481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 142413481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 142513481Sgiacomo.travaglini@arm.com typename arg9_type>\ 142613481Sgiacomo.travaglini@arm.com return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 142713481Sgiacomo.travaglini@arm.com arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 142813481Sgiacomo.travaglini@arm.com arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 142913481Sgiacomo.travaglini@arm.com arg9_type arg9) const;\ 143013481Sgiacomo.travaglini@arm.com p0##_type p0;\ 143113481Sgiacomo.travaglini@arm.com p1##_type p1;\ 143213481Sgiacomo.travaglini@arm.com private:\ 143313481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 143413481Sgiacomo.travaglini@arm.com };\ 143513481Sgiacomo.travaglini@arm.com template <typename F> operator ::testing::Action<F>() const {\ 143613481Sgiacomo.travaglini@arm.com return ::testing::Action<F>(new gmock_Impl<F>(p0, p1));\ 143713481Sgiacomo.travaglini@arm.com }\ 143813481Sgiacomo.travaglini@arm.com p0##_type p0;\ 143913481Sgiacomo.travaglini@arm.com p1##_type p1;\ 144013481Sgiacomo.travaglini@arm.com private:\ 144113481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##ActionP2);\ 144213481Sgiacomo.travaglini@arm.com };\ 144313481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type>\ 144413481Sgiacomo.travaglini@arm.com inline name##ActionP2<p0##_type, p1##_type> name(p0##_type p0, \ 144513481Sgiacomo.travaglini@arm.com p1##_type p1) {\ 144613481Sgiacomo.travaglini@arm.com return name##ActionP2<p0##_type, p1##_type>(p0, p1);\ 144713481Sgiacomo.travaglini@arm.com }\ 144813481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type>\ 144913481Sgiacomo.travaglini@arm.com template <typename F>\ 145013481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 145113481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 145213481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 145313481Sgiacomo.travaglini@arm.com typename arg9_type>\ 145413481Sgiacomo.travaglini@arm.com typename ::testing::internal::Function<F>::Result\ 145513481Sgiacomo.travaglini@arm.com name##ActionP2<p0##_type, p1##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 145613481Sgiacomo.travaglini@arm.com GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 145713481Sgiacomo.travaglini@arm.com 145813481Sgiacomo.travaglini@arm.com#define ACTION_P3(name, p0, p1, p2)\ 145913481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type>\ 146013481Sgiacomo.travaglini@arm.com class name##ActionP3 {\ 146113481Sgiacomo.travaglini@arm.com public:\ 146213481Sgiacomo.travaglini@arm.com name##ActionP3(p0##_type gmock_p0, p1##_type gmock_p1, \ 146313481Sgiacomo.travaglini@arm.com p2##_type gmock_p2) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2) {}\ 146413481Sgiacomo.travaglini@arm.com template <typename F>\ 146513481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::ActionInterface<F> {\ 146613481Sgiacomo.travaglini@arm.com public:\ 146713481Sgiacomo.travaglini@arm.com typedef F function_type;\ 146813481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::Result return_type;\ 146913481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 147013481Sgiacomo.travaglini@arm.com args_type;\ 147113481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, \ 147213481Sgiacomo.travaglini@arm.com p2##_type gmock_p2) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2) {}\ 147313481Sgiacomo.travaglini@arm.com virtual return_type Perform(const args_type& args) {\ 147413481Sgiacomo.travaglini@arm.com return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 147513481Sgiacomo.travaglini@arm.com Perform(this, args);\ 147613481Sgiacomo.travaglini@arm.com }\ 147713481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 147813481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 147913481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 148013481Sgiacomo.travaglini@arm.com typename arg9_type>\ 148113481Sgiacomo.travaglini@arm.com return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 148213481Sgiacomo.travaglini@arm.com arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 148313481Sgiacomo.travaglini@arm.com arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 148413481Sgiacomo.travaglini@arm.com arg9_type arg9) const;\ 148513481Sgiacomo.travaglini@arm.com p0##_type p0;\ 148613481Sgiacomo.travaglini@arm.com p1##_type p1;\ 148713481Sgiacomo.travaglini@arm.com p2##_type p2;\ 148813481Sgiacomo.travaglini@arm.com private:\ 148913481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 149013481Sgiacomo.travaglini@arm.com };\ 149113481Sgiacomo.travaglini@arm.com template <typename F> operator ::testing::Action<F>() const {\ 149213481Sgiacomo.travaglini@arm.com return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2));\ 149313481Sgiacomo.travaglini@arm.com }\ 149413481Sgiacomo.travaglini@arm.com p0##_type p0;\ 149513481Sgiacomo.travaglini@arm.com p1##_type p1;\ 149613481Sgiacomo.travaglini@arm.com p2##_type p2;\ 149713481Sgiacomo.travaglini@arm.com private:\ 149813481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##ActionP3);\ 149913481Sgiacomo.travaglini@arm.com };\ 150013481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type>\ 150113481Sgiacomo.travaglini@arm.com inline name##ActionP3<p0##_type, p1##_type, p2##_type> name(p0##_type p0, \ 150213481Sgiacomo.travaglini@arm.com p1##_type p1, p2##_type p2) {\ 150313481Sgiacomo.travaglini@arm.com return name##ActionP3<p0##_type, p1##_type, p2##_type>(p0, p1, p2);\ 150413481Sgiacomo.travaglini@arm.com }\ 150513481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type>\ 150613481Sgiacomo.travaglini@arm.com template <typename F>\ 150713481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 150813481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 150913481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 151013481Sgiacomo.travaglini@arm.com typename arg9_type>\ 151113481Sgiacomo.travaglini@arm.com typename ::testing::internal::Function<F>::Result\ 151213481Sgiacomo.travaglini@arm.com name##ActionP3<p0##_type, p1##_type, \ 151313481Sgiacomo.travaglini@arm.com p2##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 151413481Sgiacomo.travaglini@arm.com GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 151513481Sgiacomo.travaglini@arm.com 151613481Sgiacomo.travaglini@arm.com#define ACTION_P4(name, p0, p1, p2, p3)\ 151713481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 151813481Sgiacomo.travaglini@arm.com typename p3##_type>\ 151913481Sgiacomo.travaglini@arm.com class name##ActionP4 {\ 152013481Sgiacomo.travaglini@arm.com public:\ 152113481Sgiacomo.travaglini@arm.com name##ActionP4(p0##_type gmock_p0, p1##_type gmock_p1, \ 152213481Sgiacomo.travaglini@arm.com p2##_type gmock_p2, p3##_type gmock_p3) : p0(gmock_p0), p1(gmock_p1), \ 152313481Sgiacomo.travaglini@arm.com p2(gmock_p2), p3(gmock_p3) {}\ 152413481Sgiacomo.travaglini@arm.com template <typename F>\ 152513481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::ActionInterface<F> {\ 152613481Sgiacomo.travaglini@arm.com public:\ 152713481Sgiacomo.travaglini@arm.com typedef F function_type;\ 152813481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::Result return_type;\ 152913481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 153013481Sgiacomo.travaglini@arm.com args_type;\ 153113481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 153213481Sgiacomo.travaglini@arm.com p3##_type gmock_p3) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 153313481Sgiacomo.travaglini@arm.com p3(gmock_p3) {}\ 153413481Sgiacomo.travaglini@arm.com virtual return_type Perform(const args_type& args) {\ 153513481Sgiacomo.travaglini@arm.com return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 153613481Sgiacomo.travaglini@arm.com Perform(this, args);\ 153713481Sgiacomo.travaglini@arm.com }\ 153813481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 153913481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 154013481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 154113481Sgiacomo.travaglini@arm.com typename arg9_type>\ 154213481Sgiacomo.travaglini@arm.com return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 154313481Sgiacomo.travaglini@arm.com arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 154413481Sgiacomo.travaglini@arm.com arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 154513481Sgiacomo.travaglini@arm.com arg9_type arg9) const;\ 154613481Sgiacomo.travaglini@arm.com p0##_type p0;\ 154713481Sgiacomo.travaglini@arm.com p1##_type p1;\ 154813481Sgiacomo.travaglini@arm.com p2##_type p2;\ 154913481Sgiacomo.travaglini@arm.com p3##_type p3;\ 155013481Sgiacomo.travaglini@arm.com private:\ 155113481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 155213481Sgiacomo.travaglini@arm.com };\ 155313481Sgiacomo.travaglini@arm.com template <typename F> operator ::testing::Action<F>() const {\ 155413481Sgiacomo.travaglini@arm.com return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3));\ 155513481Sgiacomo.travaglini@arm.com }\ 155613481Sgiacomo.travaglini@arm.com p0##_type p0;\ 155713481Sgiacomo.travaglini@arm.com p1##_type p1;\ 155813481Sgiacomo.travaglini@arm.com p2##_type p2;\ 155913481Sgiacomo.travaglini@arm.com p3##_type p3;\ 156013481Sgiacomo.travaglini@arm.com private:\ 156113481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##ActionP4);\ 156213481Sgiacomo.travaglini@arm.com };\ 156313481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 156413481Sgiacomo.travaglini@arm.com typename p3##_type>\ 156513481Sgiacomo.travaglini@arm.com inline name##ActionP4<p0##_type, p1##_type, p2##_type, \ 156613481Sgiacomo.travaglini@arm.com p3##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \ 156713481Sgiacomo.travaglini@arm.com p3##_type p3) {\ 156813481Sgiacomo.travaglini@arm.com return name##ActionP4<p0##_type, p1##_type, p2##_type, p3##_type>(p0, p1, \ 156913481Sgiacomo.travaglini@arm.com p2, p3);\ 157013481Sgiacomo.travaglini@arm.com }\ 157113481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 157213481Sgiacomo.travaglini@arm.com typename p3##_type>\ 157313481Sgiacomo.travaglini@arm.com template <typename F>\ 157413481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 157513481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 157613481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 157713481Sgiacomo.travaglini@arm.com typename arg9_type>\ 157813481Sgiacomo.travaglini@arm.com typename ::testing::internal::Function<F>::Result\ 157913481Sgiacomo.travaglini@arm.com name##ActionP4<p0##_type, p1##_type, p2##_type, \ 158013481Sgiacomo.travaglini@arm.com p3##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 158113481Sgiacomo.travaglini@arm.com GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 158213481Sgiacomo.travaglini@arm.com 158313481Sgiacomo.travaglini@arm.com#define ACTION_P5(name, p0, p1, p2, p3, p4)\ 158413481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 158513481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type>\ 158613481Sgiacomo.travaglini@arm.com class name##ActionP5 {\ 158713481Sgiacomo.travaglini@arm.com public:\ 158813481Sgiacomo.travaglini@arm.com name##ActionP5(p0##_type gmock_p0, p1##_type gmock_p1, \ 158913481Sgiacomo.travaglini@arm.com p2##_type gmock_p2, p3##_type gmock_p3, \ 159013481Sgiacomo.travaglini@arm.com p4##_type gmock_p4) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 159113481Sgiacomo.travaglini@arm.com p3(gmock_p3), p4(gmock_p4) {}\ 159213481Sgiacomo.travaglini@arm.com template <typename F>\ 159313481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::ActionInterface<F> {\ 159413481Sgiacomo.travaglini@arm.com public:\ 159513481Sgiacomo.travaglini@arm.com typedef F function_type;\ 159613481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::Result return_type;\ 159713481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 159813481Sgiacomo.travaglini@arm.com args_type;\ 159913481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 160013481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4) : p0(gmock_p0), \ 160113481Sgiacomo.travaglini@arm.com p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), p4(gmock_p4) {}\ 160213481Sgiacomo.travaglini@arm.com virtual return_type Perform(const args_type& args) {\ 160313481Sgiacomo.travaglini@arm.com return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 160413481Sgiacomo.travaglini@arm.com Perform(this, args);\ 160513481Sgiacomo.travaglini@arm.com }\ 160613481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 160713481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 160813481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 160913481Sgiacomo.travaglini@arm.com typename arg9_type>\ 161013481Sgiacomo.travaglini@arm.com return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 161113481Sgiacomo.travaglini@arm.com arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 161213481Sgiacomo.travaglini@arm.com arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 161313481Sgiacomo.travaglini@arm.com arg9_type arg9) const;\ 161413481Sgiacomo.travaglini@arm.com p0##_type p0;\ 161513481Sgiacomo.travaglini@arm.com p1##_type p1;\ 161613481Sgiacomo.travaglini@arm.com p2##_type p2;\ 161713481Sgiacomo.travaglini@arm.com p3##_type p3;\ 161813481Sgiacomo.travaglini@arm.com p4##_type p4;\ 161913481Sgiacomo.travaglini@arm.com private:\ 162013481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 162113481Sgiacomo.travaglini@arm.com };\ 162213481Sgiacomo.travaglini@arm.com template <typename F> operator ::testing::Action<F>() const {\ 162313481Sgiacomo.travaglini@arm.com return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4));\ 162413481Sgiacomo.travaglini@arm.com }\ 162513481Sgiacomo.travaglini@arm.com p0##_type p0;\ 162613481Sgiacomo.travaglini@arm.com p1##_type p1;\ 162713481Sgiacomo.travaglini@arm.com p2##_type p2;\ 162813481Sgiacomo.travaglini@arm.com p3##_type p3;\ 162913481Sgiacomo.travaglini@arm.com p4##_type p4;\ 163013481Sgiacomo.travaglini@arm.com private:\ 163113481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##ActionP5);\ 163213481Sgiacomo.travaglini@arm.com };\ 163313481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 163413481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type>\ 163513481Sgiacomo.travaglini@arm.com inline name##ActionP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 163613481Sgiacomo.travaglini@arm.com p4##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 163713481Sgiacomo.travaglini@arm.com p4##_type p4) {\ 163813481Sgiacomo.travaglini@arm.com return name##ActionP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 163913481Sgiacomo.travaglini@arm.com p4##_type>(p0, p1, p2, p3, p4);\ 164013481Sgiacomo.travaglini@arm.com }\ 164113481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 164213481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type>\ 164313481Sgiacomo.travaglini@arm.com template <typename F>\ 164413481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 164513481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 164613481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 164713481Sgiacomo.travaglini@arm.com typename arg9_type>\ 164813481Sgiacomo.travaglini@arm.com typename ::testing::internal::Function<F>::Result\ 164913481Sgiacomo.travaglini@arm.com name##ActionP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 165013481Sgiacomo.travaglini@arm.com p4##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 165113481Sgiacomo.travaglini@arm.com GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 165213481Sgiacomo.travaglini@arm.com 165313481Sgiacomo.travaglini@arm.com#define ACTION_P6(name, p0, p1, p2, p3, p4, p5)\ 165413481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 165513481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type>\ 165613481Sgiacomo.travaglini@arm.com class name##ActionP6 {\ 165713481Sgiacomo.travaglini@arm.com public:\ 165813481Sgiacomo.travaglini@arm.com name##ActionP6(p0##_type gmock_p0, p1##_type gmock_p1, \ 165913481Sgiacomo.travaglini@arm.com p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 166013481Sgiacomo.travaglini@arm.com p5##_type gmock_p5) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 166113481Sgiacomo.travaglini@arm.com p3(gmock_p3), p4(gmock_p4), p5(gmock_p5) {}\ 166213481Sgiacomo.travaglini@arm.com template <typename F>\ 166313481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::ActionInterface<F> {\ 166413481Sgiacomo.travaglini@arm.com public:\ 166513481Sgiacomo.travaglini@arm.com typedef F function_type;\ 166613481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::Result return_type;\ 166713481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 166813481Sgiacomo.travaglini@arm.com args_type;\ 166913481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 167013481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4, \ 167113481Sgiacomo.travaglini@arm.com p5##_type gmock_p5) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 167213481Sgiacomo.travaglini@arm.com p3(gmock_p3), p4(gmock_p4), p5(gmock_p5) {}\ 167313481Sgiacomo.travaglini@arm.com virtual return_type Perform(const args_type& args) {\ 167413481Sgiacomo.travaglini@arm.com return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 167513481Sgiacomo.travaglini@arm.com Perform(this, args);\ 167613481Sgiacomo.travaglini@arm.com }\ 167713481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 167813481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 167913481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 168013481Sgiacomo.travaglini@arm.com typename arg9_type>\ 168113481Sgiacomo.travaglini@arm.com return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 168213481Sgiacomo.travaglini@arm.com arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 168313481Sgiacomo.travaglini@arm.com arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 168413481Sgiacomo.travaglini@arm.com arg9_type arg9) const;\ 168513481Sgiacomo.travaglini@arm.com p0##_type p0;\ 168613481Sgiacomo.travaglini@arm.com p1##_type p1;\ 168713481Sgiacomo.travaglini@arm.com p2##_type p2;\ 168813481Sgiacomo.travaglini@arm.com p3##_type p3;\ 168913481Sgiacomo.travaglini@arm.com p4##_type p4;\ 169013481Sgiacomo.travaglini@arm.com p5##_type p5;\ 169113481Sgiacomo.travaglini@arm.com private:\ 169213481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 169313481Sgiacomo.travaglini@arm.com };\ 169413481Sgiacomo.travaglini@arm.com template <typename F> operator ::testing::Action<F>() const {\ 169513481Sgiacomo.travaglini@arm.com return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5));\ 169613481Sgiacomo.travaglini@arm.com }\ 169713481Sgiacomo.travaglini@arm.com p0##_type p0;\ 169813481Sgiacomo.travaglini@arm.com p1##_type p1;\ 169913481Sgiacomo.travaglini@arm.com p2##_type p2;\ 170013481Sgiacomo.travaglini@arm.com p3##_type p3;\ 170113481Sgiacomo.travaglini@arm.com p4##_type p4;\ 170213481Sgiacomo.travaglini@arm.com p5##_type p5;\ 170313481Sgiacomo.travaglini@arm.com private:\ 170413481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##ActionP6);\ 170513481Sgiacomo.travaglini@arm.com };\ 170613481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 170713481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type>\ 170813481Sgiacomo.travaglini@arm.com inline name##ActionP6<p0##_type, p1##_type, p2##_type, p3##_type, \ 170913481Sgiacomo.travaglini@arm.com p4##_type, p5##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \ 171013481Sgiacomo.travaglini@arm.com p3##_type p3, p4##_type p4, p5##_type p5) {\ 171113481Sgiacomo.travaglini@arm.com return name##ActionP6<p0##_type, p1##_type, p2##_type, p3##_type, \ 171213481Sgiacomo.travaglini@arm.com p4##_type, p5##_type>(p0, p1, p2, p3, p4, p5);\ 171313481Sgiacomo.travaglini@arm.com }\ 171413481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 171513481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type>\ 171613481Sgiacomo.travaglini@arm.com template <typename F>\ 171713481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 171813481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 171913481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 172013481Sgiacomo.travaglini@arm.com typename arg9_type>\ 172113481Sgiacomo.travaglini@arm.com typename ::testing::internal::Function<F>::Result\ 172213481Sgiacomo.travaglini@arm.com name##ActionP6<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 172313481Sgiacomo.travaglini@arm.com p5##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 172413481Sgiacomo.travaglini@arm.com GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 172513481Sgiacomo.travaglini@arm.com 172613481Sgiacomo.travaglini@arm.com#define ACTION_P7(name, p0, p1, p2, p3, p4, p5, p6)\ 172713481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 172813481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 172913481Sgiacomo.travaglini@arm.com typename p6##_type>\ 173013481Sgiacomo.travaglini@arm.com class name##ActionP7 {\ 173113481Sgiacomo.travaglini@arm.com public:\ 173213481Sgiacomo.travaglini@arm.com name##ActionP7(p0##_type gmock_p0, p1##_type gmock_p1, \ 173313481Sgiacomo.travaglini@arm.com p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 173413481Sgiacomo.travaglini@arm.com p5##_type gmock_p5, p6##_type gmock_p6) : p0(gmock_p0), p1(gmock_p1), \ 173513481Sgiacomo.travaglini@arm.com p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), \ 173613481Sgiacomo.travaglini@arm.com p6(gmock_p6) {}\ 173713481Sgiacomo.travaglini@arm.com template <typename F>\ 173813481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::ActionInterface<F> {\ 173913481Sgiacomo.travaglini@arm.com public:\ 174013481Sgiacomo.travaglini@arm.com typedef F function_type;\ 174113481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::Result return_type;\ 174213481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 174313481Sgiacomo.travaglini@arm.com args_type;\ 174413481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 174513481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 174613481Sgiacomo.travaglini@arm.com p6##_type gmock_p6) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 174713481Sgiacomo.travaglini@arm.com p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6) {}\ 174813481Sgiacomo.travaglini@arm.com virtual return_type Perform(const args_type& args) {\ 174913481Sgiacomo.travaglini@arm.com return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 175013481Sgiacomo.travaglini@arm.com Perform(this, args);\ 175113481Sgiacomo.travaglini@arm.com }\ 175213481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 175313481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 175413481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 175513481Sgiacomo.travaglini@arm.com typename arg9_type>\ 175613481Sgiacomo.travaglini@arm.com return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 175713481Sgiacomo.travaglini@arm.com arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 175813481Sgiacomo.travaglini@arm.com arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 175913481Sgiacomo.travaglini@arm.com arg9_type arg9) const;\ 176013481Sgiacomo.travaglini@arm.com p0##_type p0;\ 176113481Sgiacomo.travaglini@arm.com p1##_type p1;\ 176213481Sgiacomo.travaglini@arm.com p2##_type p2;\ 176313481Sgiacomo.travaglini@arm.com p3##_type p3;\ 176413481Sgiacomo.travaglini@arm.com p4##_type p4;\ 176513481Sgiacomo.travaglini@arm.com p5##_type p5;\ 176613481Sgiacomo.travaglini@arm.com p6##_type p6;\ 176713481Sgiacomo.travaglini@arm.com private:\ 176813481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 176913481Sgiacomo.travaglini@arm.com };\ 177013481Sgiacomo.travaglini@arm.com template <typename F> operator ::testing::Action<F>() const {\ 177113481Sgiacomo.travaglini@arm.com return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \ 177213481Sgiacomo.travaglini@arm.com p6));\ 177313481Sgiacomo.travaglini@arm.com }\ 177413481Sgiacomo.travaglini@arm.com p0##_type p0;\ 177513481Sgiacomo.travaglini@arm.com p1##_type p1;\ 177613481Sgiacomo.travaglini@arm.com p2##_type p2;\ 177713481Sgiacomo.travaglini@arm.com p3##_type p3;\ 177813481Sgiacomo.travaglini@arm.com p4##_type p4;\ 177913481Sgiacomo.travaglini@arm.com p5##_type p5;\ 178013481Sgiacomo.travaglini@arm.com p6##_type p6;\ 178113481Sgiacomo.travaglini@arm.com private:\ 178213481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##ActionP7);\ 178313481Sgiacomo.travaglini@arm.com };\ 178413481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 178513481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 178613481Sgiacomo.travaglini@arm.com typename p6##_type>\ 178713481Sgiacomo.travaglini@arm.com inline name##ActionP7<p0##_type, p1##_type, p2##_type, p3##_type, \ 178813481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type> name(p0##_type p0, p1##_type p1, \ 178913481Sgiacomo.travaglini@arm.com p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ 179013481Sgiacomo.travaglini@arm.com p6##_type p6) {\ 179113481Sgiacomo.travaglini@arm.com return name##ActionP7<p0##_type, p1##_type, p2##_type, p3##_type, \ 179213481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type>(p0, p1, p2, p3, p4, p5, p6);\ 179313481Sgiacomo.travaglini@arm.com }\ 179413481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 179513481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 179613481Sgiacomo.travaglini@arm.com typename p6##_type>\ 179713481Sgiacomo.travaglini@arm.com template <typename F>\ 179813481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 179913481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 180013481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 180113481Sgiacomo.travaglini@arm.com typename arg9_type>\ 180213481Sgiacomo.travaglini@arm.com typename ::testing::internal::Function<F>::Result\ 180313481Sgiacomo.travaglini@arm.com name##ActionP7<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 180413481Sgiacomo.travaglini@arm.com p5##_type, p6##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 180513481Sgiacomo.travaglini@arm.com GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 180613481Sgiacomo.travaglini@arm.com 180713481Sgiacomo.travaglini@arm.com#define ACTION_P8(name, p0, p1, p2, p3, p4, p5, p6, p7)\ 180813481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 180913481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 181013481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type>\ 181113481Sgiacomo.travaglini@arm.com class name##ActionP8 {\ 181213481Sgiacomo.travaglini@arm.com public:\ 181313481Sgiacomo.travaglini@arm.com name##ActionP8(p0##_type gmock_p0, p1##_type gmock_p1, \ 181413481Sgiacomo.travaglini@arm.com p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 181513481Sgiacomo.travaglini@arm.com p5##_type gmock_p5, p6##_type gmock_p6, \ 181613481Sgiacomo.travaglini@arm.com p7##_type gmock_p7) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 181713481Sgiacomo.travaglini@arm.com p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ 181813481Sgiacomo.travaglini@arm.com p7(gmock_p7) {}\ 181913481Sgiacomo.travaglini@arm.com template <typename F>\ 182013481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::ActionInterface<F> {\ 182113481Sgiacomo.travaglini@arm.com public:\ 182213481Sgiacomo.travaglini@arm.com typedef F function_type;\ 182313481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::Result return_type;\ 182413481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 182513481Sgiacomo.travaglini@arm.com args_type;\ 182613481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 182713481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 182813481Sgiacomo.travaglini@arm.com p6##_type gmock_p6, p7##_type gmock_p7) : p0(gmock_p0), \ 182913481Sgiacomo.travaglini@arm.com p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), \ 183013481Sgiacomo.travaglini@arm.com p5(gmock_p5), p6(gmock_p6), p7(gmock_p7) {}\ 183113481Sgiacomo.travaglini@arm.com virtual return_type Perform(const args_type& args) {\ 183213481Sgiacomo.travaglini@arm.com return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 183313481Sgiacomo.travaglini@arm.com Perform(this, args);\ 183413481Sgiacomo.travaglini@arm.com }\ 183513481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 183613481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 183713481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 183813481Sgiacomo.travaglini@arm.com typename arg9_type>\ 183913481Sgiacomo.travaglini@arm.com return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 184013481Sgiacomo.travaglini@arm.com arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 184113481Sgiacomo.travaglini@arm.com arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 184213481Sgiacomo.travaglini@arm.com arg9_type arg9) const;\ 184313481Sgiacomo.travaglini@arm.com p0##_type p0;\ 184413481Sgiacomo.travaglini@arm.com p1##_type p1;\ 184513481Sgiacomo.travaglini@arm.com p2##_type p2;\ 184613481Sgiacomo.travaglini@arm.com p3##_type p3;\ 184713481Sgiacomo.travaglini@arm.com p4##_type p4;\ 184813481Sgiacomo.travaglini@arm.com p5##_type p5;\ 184913481Sgiacomo.travaglini@arm.com p6##_type p6;\ 185013481Sgiacomo.travaglini@arm.com p7##_type p7;\ 185113481Sgiacomo.travaglini@arm.com private:\ 185213481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 185313481Sgiacomo.travaglini@arm.com };\ 185413481Sgiacomo.travaglini@arm.com template <typename F> operator ::testing::Action<F>() const {\ 185513481Sgiacomo.travaglini@arm.com return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \ 185613481Sgiacomo.travaglini@arm.com p6, p7));\ 185713481Sgiacomo.travaglini@arm.com }\ 185813481Sgiacomo.travaglini@arm.com p0##_type p0;\ 185913481Sgiacomo.travaglini@arm.com p1##_type p1;\ 186013481Sgiacomo.travaglini@arm.com p2##_type p2;\ 186113481Sgiacomo.travaglini@arm.com p3##_type p3;\ 186213481Sgiacomo.travaglini@arm.com p4##_type p4;\ 186313481Sgiacomo.travaglini@arm.com p5##_type p5;\ 186413481Sgiacomo.travaglini@arm.com p6##_type p6;\ 186513481Sgiacomo.travaglini@arm.com p7##_type p7;\ 186613481Sgiacomo.travaglini@arm.com private:\ 186713481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##ActionP8);\ 186813481Sgiacomo.travaglini@arm.com };\ 186913481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 187013481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 187113481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type>\ 187213481Sgiacomo.travaglini@arm.com inline name##ActionP8<p0##_type, p1##_type, p2##_type, p3##_type, \ 187313481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type, p7##_type> name(p0##_type p0, \ 187413481Sgiacomo.travaglini@arm.com p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ 187513481Sgiacomo.travaglini@arm.com p6##_type p6, p7##_type p7) {\ 187613481Sgiacomo.travaglini@arm.com return name##ActionP8<p0##_type, p1##_type, p2##_type, p3##_type, \ 187713481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type, p7##_type>(p0, p1, p2, p3, p4, p5, \ 187813481Sgiacomo.travaglini@arm.com p6, p7);\ 187913481Sgiacomo.travaglini@arm.com }\ 188013481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 188113481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 188213481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type>\ 188313481Sgiacomo.travaglini@arm.com template <typename F>\ 188413481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 188513481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 188613481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 188713481Sgiacomo.travaglini@arm.com typename arg9_type>\ 188813481Sgiacomo.travaglini@arm.com typename ::testing::internal::Function<F>::Result\ 188913481Sgiacomo.travaglini@arm.com name##ActionP8<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 189013481Sgiacomo.travaglini@arm.com p5##_type, p6##_type, \ 189113481Sgiacomo.travaglini@arm.com p7##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 189213481Sgiacomo.travaglini@arm.com GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 189313481Sgiacomo.travaglini@arm.com 189413481Sgiacomo.travaglini@arm.com#define ACTION_P9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8)\ 189513481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 189613481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 189713481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type, typename p8##_type>\ 189813481Sgiacomo.travaglini@arm.com class name##ActionP9 {\ 189913481Sgiacomo.travaglini@arm.com public:\ 190013481Sgiacomo.travaglini@arm.com name##ActionP9(p0##_type gmock_p0, p1##_type gmock_p1, \ 190113481Sgiacomo.travaglini@arm.com p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 190213481Sgiacomo.travaglini@arm.com p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ 190313481Sgiacomo.travaglini@arm.com p8##_type gmock_p8) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 190413481Sgiacomo.travaglini@arm.com p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \ 190513481Sgiacomo.travaglini@arm.com p8(gmock_p8) {}\ 190613481Sgiacomo.travaglini@arm.com template <typename F>\ 190713481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::ActionInterface<F> {\ 190813481Sgiacomo.travaglini@arm.com public:\ 190913481Sgiacomo.travaglini@arm.com typedef F function_type;\ 191013481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::Result return_type;\ 191113481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 191213481Sgiacomo.travaglini@arm.com args_type;\ 191313481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 191413481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 191513481Sgiacomo.travaglini@arm.com p6##_type gmock_p6, p7##_type gmock_p7, \ 191613481Sgiacomo.travaglini@arm.com p8##_type gmock_p8) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 191713481Sgiacomo.travaglini@arm.com p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ 191813481Sgiacomo.travaglini@arm.com p7(gmock_p7), p8(gmock_p8) {}\ 191913481Sgiacomo.travaglini@arm.com virtual return_type Perform(const args_type& args) {\ 192013481Sgiacomo.travaglini@arm.com return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 192113481Sgiacomo.travaglini@arm.com Perform(this, args);\ 192213481Sgiacomo.travaglini@arm.com }\ 192313481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 192413481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 192513481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 192613481Sgiacomo.travaglini@arm.com typename arg9_type>\ 192713481Sgiacomo.travaglini@arm.com return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 192813481Sgiacomo.travaglini@arm.com arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 192913481Sgiacomo.travaglini@arm.com arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 193013481Sgiacomo.travaglini@arm.com arg9_type arg9) const;\ 193113481Sgiacomo.travaglini@arm.com p0##_type p0;\ 193213481Sgiacomo.travaglini@arm.com p1##_type p1;\ 193313481Sgiacomo.travaglini@arm.com p2##_type p2;\ 193413481Sgiacomo.travaglini@arm.com p3##_type p3;\ 193513481Sgiacomo.travaglini@arm.com p4##_type p4;\ 193613481Sgiacomo.travaglini@arm.com p5##_type p5;\ 193713481Sgiacomo.travaglini@arm.com p6##_type p6;\ 193813481Sgiacomo.travaglini@arm.com p7##_type p7;\ 193913481Sgiacomo.travaglini@arm.com p8##_type p8;\ 194013481Sgiacomo.travaglini@arm.com private:\ 194113481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 194213481Sgiacomo.travaglini@arm.com };\ 194313481Sgiacomo.travaglini@arm.com template <typename F> operator ::testing::Action<F>() const {\ 194413481Sgiacomo.travaglini@arm.com return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \ 194513481Sgiacomo.travaglini@arm.com p6, p7, p8));\ 194613481Sgiacomo.travaglini@arm.com }\ 194713481Sgiacomo.travaglini@arm.com p0##_type p0;\ 194813481Sgiacomo.travaglini@arm.com p1##_type p1;\ 194913481Sgiacomo.travaglini@arm.com p2##_type p2;\ 195013481Sgiacomo.travaglini@arm.com p3##_type p3;\ 195113481Sgiacomo.travaglini@arm.com p4##_type p4;\ 195213481Sgiacomo.travaglini@arm.com p5##_type p5;\ 195313481Sgiacomo.travaglini@arm.com p6##_type p6;\ 195413481Sgiacomo.travaglini@arm.com p7##_type p7;\ 195513481Sgiacomo.travaglini@arm.com p8##_type p8;\ 195613481Sgiacomo.travaglini@arm.com private:\ 195713481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##ActionP9);\ 195813481Sgiacomo.travaglini@arm.com };\ 195913481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 196013481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 196113481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type, typename p8##_type>\ 196213481Sgiacomo.travaglini@arm.com inline name##ActionP9<p0##_type, p1##_type, p2##_type, p3##_type, \ 196313481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type, p7##_type, \ 196413481Sgiacomo.travaglini@arm.com p8##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 196513481Sgiacomo.travaglini@arm.com p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, \ 196613481Sgiacomo.travaglini@arm.com p8##_type p8) {\ 196713481Sgiacomo.travaglini@arm.com return name##ActionP9<p0##_type, p1##_type, p2##_type, p3##_type, \ 196813481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type, p7##_type, p8##_type>(p0, p1, p2, \ 196913481Sgiacomo.travaglini@arm.com p3, p4, p5, p6, p7, p8);\ 197013481Sgiacomo.travaglini@arm.com }\ 197113481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 197213481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 197313481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type, typename p8##_type>\ 197413481Sgiacomo.travaglini@arm.com template <typename F>\ 197513481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 197613481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 197713481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 197813481Sgiacomo.travaglini@arm.com typename arg9_type>\ 197913481Sgiacomo.travaglini@arm.com typename ::testing::internal::Function<F>::Result\ 198013481Sgiacomo.travaglini@arm.com name##ActionP9<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 198113481Sgiacomo.travaglini@arm.com p5##_type, p6##_type, p7##_type, \ 198213481Sgiacomo.travaglini@arm.com p8##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 198313481Sgiacomo.travaglini@arm.com GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 198413481Sgiacomo.travaglini@arm.com 198513481Sgiacomo.travaglini@arm.com#define ACTION_P10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)\ 198613481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 198713481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 198813481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type, typename p8##_type, \ 198913481Sgiacomo.travaglini@arm.com typename p9##_type>\ 199013481Sgiacomo.travaglini@arm.com class name##ActionP10 {\ 199113481Sgiacomo.travaglini@arm.com public:\ 199213481Sgiacomo.travaglini@arm.com name##ActionP10(p0##_type gmock_p0, p1##_type gmock_p1, \ 199313481Sgiacomo.travaglini@arm.com p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 199413481Sgiacomo.travaglini@arm.com p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ 199513481Sgiacomo.travaglini@arm.com p8##_type gmock_p8, p9##_type gmock_p9) : p0(gmock_p0), p1(gmock_p1), \ 199613481Sgiacomo.travaglini@arm.com p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ 199713481Sgiacomo.travaglini@arm.com p7(gmock_p7), p8(gmock_p8), p9(gmock_p9) {}\ 199813481Sgiacomo.travaglini@arm.com template <typename F>\ 199913481Sgiacomo.travaglini@arm.com class gmock_Impl : public ::testing::ActionInterface<F> {\ 200013481Sgiacomo.travaglini@arm.com public:\ 200113481Sgiacomo.travaglini@arm.com typedef F function_type;\ 200213481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::Result return_type;\ 200313481Sgiacomo.travaglini@arm.com typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 200413481Sgiacomo.travaglini@arm.com args_type;\ 200513481Sgiacomo.travaglini@arm.com gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 200613481Sgiacomo.travaglini@arm.com p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 200713481Sgiacomo.travaglini@arm.com p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \ 200813481Sgiacomo.travaglini@arm.com p9##_type gmock_p9) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 200913481Sgiacomo.travaglini@arm.com p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ 201013481Sgiacomo.travaglini@arm.com p7(gmock_p7), p8(gmock_p8), p9(gmock_p9) {}\ 201113481Sgiacomo.travaglini@arm.com virtual return_type Perform(const args_type& args) {\ 201213481Sgiacomo.travaglini@arm.com return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 201313481Sgiacomo.travaglini@arm.com Perform(this, args);\ 201413481Sgiacomo.travaglini@arm.com }\ 201513481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 201613481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 201713481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 201813481Sgiacomo.travaglini@arm.com typename arg9_type>\ 201913481Sgiacomo.travaglini@arm.com return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 202013481Sgiacomo.travaglini@arm.com arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 202113481Sgiacomo.travaglini@arm.com arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 202213481Sgiacomo.travaglini@arm.com arg9_type arg9) const;\ 202313481Sgiacomo.travaglini@arm.com p0##_type p0;\ 202413481Sgiacomo.travaglini@arm.com p1##_type p1;\ 202513481Sgiacomo.travaglini@arm.com p2##_type p2;\ 202613481Sgiacomo.travaglini@arm.com p3##_type p3;\ 202713481Sgiacomo.travaglini@arm.com p4##_type p4;\ 202813481Sgiacomo.travaglini@arm.com p5##_type p5;\ 202913481Sgiacomo.travaglini@arm.com p6##_type p6;\ 203013481Sgiacomo.travaglini@arm.com p7##_type p7;\ 203113481Sgiacomo.travaglini@arm.com p8##_type p8;\ 203213481Sgiacomo.travaglini@arm.com p9##_type p9;\ 203313481Sgiacomo.travaglini@arm.com private:\ 203413481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 203513481Sgiacomo.travaglini@arm.com };\ 203613481Sgiacomo.travaglini@arm.com template <typename F> operator ::testing::Action<F>() const {\ 203713481Sgiacomo.travaglini@arm.com return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \ 203813481Sgiacomo.travaglini@arm.com p6, p7, p8, p9));\ 203913481Sgiacomo.travaglini@arm.com }\ 204013481Sgiacomo.travaglini@arm.com p0##_type p0;\ 204113481Sgiacomo.travaglini@arm.com p1##_type p1;\ 204213481Sgiacomo.travaglini@arm.com p2##_type p2;\ 204313481Sgiacomo.travaglini@arm.com p3##_type p3;\ 204413481Sgiacomo.travaglini@arm.com p4##_type p4;\ 204513481Sgiacomo.travaglini@arm.com p5##_type p5;\ 204613481Sgiacomo.travaglini@arm.com p6##_type p6;\ 204713481Sgiacomo.travaglini@arm.com p7##_type p7;\ 204813481Sgiacomo.travaglini@arm.com p8##_type p8;\ 204913481Sgiacomo.travaglini@arm.com p9##_type p9;\ 205013481Sgiacomo.travaglini@arm.com private:\ 205113481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_ASSIGN_(name##ActionP10);\ 205213481Sgiacomo.travaglini@arm.com };\ 205313481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 205413481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 205513481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type, typename p8##_type, \ 205613481Sgiacomo.travaglini@arm.com typename p9##_type>\ 205713481Sgiacomo.travaglini@arm.com inline name##ActionP10<p0##_type, p1##_type, p2##_type, p3##_type, \ 205813481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \ 205913481Sgiacomo.travaglini@arm.com p9##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 206013481Sgiacomo.travaglini@arm.com p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \ 206113481Sgiacomo.travaglini@arm.com p9##_type p9) {\ 206213481Sgiacomo.travaglini@arm.com return name##ActionP10<p0##_type, p1##_type, p2##_type, p3##_type, \ 206313481Sgiacomo.travaglini@arm.com p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, p9##_type>(p0, \ 206413481Sgiacomo.travaglini@arm.com p1, p2, p3, p4, p5, p6, p7, p8, p9);\ 206513481Sgiacomo.travaglini@arm.com }\ 206613481Sgiacomo.travaglini@arm.com template <typename p0##_type, typename p1##_type, typename p2##_type, \ 206713481Sgiacomo.travaglini@arm.com typename p3##_type, typename p4##_type, typename p5##_type, \ 206813481Sgiacomo.travaglini@arm.com typename p6##_type, typename p7##_type, typename p8##_type, \ 206913481Sgiacomo.travaglini@arm.com typename p9##_type>\ 207013481Sgiacomo.travaglini@arm.com template <typename F>\ 207113481Sgiacomo.travaglini@arm.com template <typename arg0_type, typename arg1_type, typename arg2_type, \ 207213481Sgiacomo.travaglini@arm.com typename arg3_type, typename arg4_type, typename arg5_type, \ 207313481Sgiacomo.travaglini@arm.com typename arg6_type, typename arg7_type, typename arg8_type, \ 207413481Sgiacomo.travaglini@arm.com typename arg9_type>\ 207513481Sgiacomo.travaglini@arm.com typename ::testing::internal::Function<F>::Result\ 207613481Sgiacomo.travaglini@arm.com name##ActionP10<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 207713481Sgiacomo.travaglini@arm.com p5##_type, p6##_type, p7##_type, p8##_type, \ 207813481Sgiacomo.travaglini@arm.com p9##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 207913481Sgiacomo.travaglini@arm.com GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 208013481Sgiacomo.travaglini@arm.com 208113481Sgiacomo.travaglini@arm.comnamespace testing { 208213481Sgiacomo.travaglini@arm.com 208313481Sgiacomo.travaglini@arm.com 208413481Sgiacomo.travaglini@arm.com// The ACTION*() macros trigger warning C4100 (unreferenced formal 208513481Sgiacomo.travaglini@arm.com// parameter) in MSVC with -W4. Unfortunately they cannot be fixed in 208613481Sgiacomo.travaglini@arm.com// the macro definition, as the warnings are generated when the macro 208713481Sgiacomo.travaglini@arm.com// is expanded and macro expansion cannot contain #pragma. Therefore 208813481Sgiacomo.travaglini@arm.com// we suppress them here. 208913481Sgiacomo.travaglini@arm.com#ifdef _MSC_VER 209013481Sgiacomo.travaglini@arm.com# pragma warning(push) 209113481Sgiacomo.travaglini@arm.com# pragma warning(disable:4100) 209213481Sgiacomo.travaglini@arm.com#endif 209313481Sgiacomo.travaglini@arm.com 209413481Sgiacomo.travaglini@arm.com// Various overloads for InvokeArgument<N>(). 209513481Sgiacomo.travaglini@arm.com// 209613481Sgiacomo.travaglini@arm.com// The InvokeArgument<N>(a1, a2, ..., a_k) action invokes the N-th 209713481Sgiacomo.travaglini@arm.com// (0-based) argument, which must be a k-ary callable, of the mock 209813481Sgiacomo.travaglini@arm.com// function, with arguments a1, a2, ..., a_k. 209913481Sgiacomo.travaglini@arm.com// 210013481Sgiacomo.travaglini@arm.com// Notes: 210113481Sgiacomo.travaglini@arm.com// 210213481Sgiacomo.travaglini@arm.com// 1. The arguments are passed by value by default. If you need to 210313481Sgiacomo.travaglini@arm.com// pass an argument by reference, wrap it inside ByRef(). For 210413481Sgiacomo.travaglini@arm.com// example, 210513481Sgiacomo.travaglini@arm.com// 210613481Sgiacomo.travaglini@arm.com// InvokeArgument<1>(5, string("Hello"), ByRef(foo)) 210713481Sgiacomo.travaglini@arm.com// 210813481Sgiacomo.travaglini@arm.com// passes 5 and string("Hello") by value, and passes foo by 210913481Sgiacomo.travaglini@arm.com// reference. 211013481Sgiacomo.travaglini@arm.com// 211113481Sgiacomo.travaglini@arm.com// 2. If the callable takes an argument by reference but ByRef() is 211213481Sgiacomo.travaglini@arm.com// not used, it will receive the reference to a copy of the value, 211313481Sgiacomo.travaglini@arm.com// instead of the original value. For example, when the 0-th 211413481Sgiacomo.travaglini@arm.com// argument of the mock function takes a const string&, the action 211513481Sgiacomo.travaglini@arm.com// 211613481Sgiacomo.travaglini@arm.com// InvokeArgument<0>(string("Hello")) 211713481Sgiacomo.travaglini@arm.com// 211813481Sgiacomo.travaglini@arm.com// makes a copy of the temporary string("Hello") object and passes a 211913481Sgiacomo.travaglini@arm.com// reference of the copy, instead of the original temporary object, 212013481Sgiacomo.travaglini@arm.com// to the callable. This makes it easy for a user to define an 212113481Sgiacomo.travaglini@arm.com// InvokeArgument action from temporary values and have it performed 212213481Sgiacomo.travaglini@arm.com// later. 212313481Sgiacomo.travaglini@arm.com 212413481Sgiacomo.travaglini@arm.comnamespace internal { 212513481Sgiacomo.travaglini@arm.comnamespace invoke_argument { 212613481Sgiacomo.travaglini@arm.com 212713481Sgiacomo.travaglini@arm.com// Appears in InvokeArgumentAdl's argument list to help avoid 212813481Sgiacomo.travaglini@arm.com// accidental calls to user functions of the same name. 212913481Sgiacomo.travaglini@arm.comstruct AdlTag {}; 213013481Sgiacomo.travaglini@arm.com 213113481Sgiacomo.travaglini@arm.com// InvokeArgumentAdl - a helper for InvokeArgument. 213213481Sgiacomo.travaglini@arm.com// The basic overloads are provided here for generic functors. 213313481Sgiacomo.travaglini@arm.com// Overloads for other custom-callables are provided in the 213413481Sgiacomo.travaglini@arm.com// internal/custom/callback-actions.h header. 213513481Sgiacomo.travaglini@arm.com 213613481Sgiacomo.travaglini@arm.comtemplate <typename R, typename F> 213713481Sgiacomo.travaglini@arm.comR InvokeArgumentAdl(AdlTag, F f) { 213813481Sgiacomo.travaglini@arm.com return f(); 213913481Sgiacomo.travaglini@arm.com} 214013481Sgiacomo.travaglini@arm.comtemplate <typename R, typename F, typename A1> 214113481Sgiacomo.travaglini@arm.comR InvokeArgumentAdl(AdlTag, F f, A1 a1) { 214213481Sgiacomo.travaglini@arm.com return f(a1); 214313481Sgiacomo.travaglini@arm.com} 214413481Sgiacomo.travaglini@arm.comtemplate <typename R, typename F, typename A1, typename A2> 214513481Sgiacomo.travaglini@arm.comR InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2) { 214613481Sgiacomo.travaglini@arm.com return f(a1, a2); 214713481Sgiacomo.travaglini@arm.com} 214813481Sgiacomo.travaglini@arm.comtemplate <typename R, typename F, typename A1, typename A2, typename A3> 214913481Sgiacomo.travaglini@arm.comR InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3) { 215013481Sgiacomo.travaglini@arm.com return f(a1, a2, a3); 215113481Sgiacomo.travaglini@arm.com} 215213481Sgiacomo.travaglini@arm.comtemplate <typename R, typename F, typename A1, typename A2, typename A3, 215313481Sgiacomo.travaglini@arm.com typename A4> 215413481Sgiacomo.travaglini@arm.comR InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4) { 215513481Sgiacomo.travaglini@arm.com return f(a1, a2, a3, a4); 215613481Sgiacomo.travaglini@arm.com} 215713481Sgiacomo.travaglini@arm.comtemplate <typename R, typename F, typename A1, typename A2, typename A3, 215813481Sgiacomo.travaglini@arm.com typename A4, typename A5> 215913481Sgiacomo.travaglini@arm.comR InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { 216013481Sgiacomo.travaglini@arm.com return f(a1, a2, a3, a4, a5); 216113481Sgiacomo.travaglini@arm.com} 216213481Sgiacomo.travaglini@arm.comtemplate <typename R, typename F, typename A1, typename A2, typename A3, 216313481Sgiacomo.travaglini@arm.com typename A4, typename A5, typename A6> 216413481Sgiacomo.travaglini@arm.comR InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { 216513481Sgiacomo.travaglini@arm.com return f(a1, a2, a3, a4, a5, a6); 216613481Sgiacomo.travaglini@arm.com} 216713481Sgiacomo.travaglini@arm.comtemplate <typename R, typename F, typename A1, typename A2, typename A3, 216813481Sgiacomo.travaglini@arm.com typename A4, typename A5, typename A6, typename A7> 216913481Sgiacomo.travaglini@arm.comR InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, 217013481Sgiacomo.travaglini@arm.com A7 a7) { 217113481Sgiacomo.travaglini@arm.com return f(a1, a2, a3, a4, a5, a6, a7); 217213481Sgiacomo.travaglini@arm.com} 217313481Sgiacomo.travaglini@arm.comtemplate <typename R, typename F, typename A1, typename A2, typename A3, 217413481Sgiacomo.travaglini@arm.com typename A4, typename A5, typename A6, typename A7, typename A8> 217513481Sgiacomo.travaglini@arm.comR InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, 217613481Sgiacomo.travaglini@arm.com A7 a7, A8 a8) { 217713481Sgiacomo.travaglini@arm.com return f(a1, a2, a3, a4, a5, a6, a7, a8); 217813481Sgiacomo.travaglini@arm.com} 217913481Sgiacomo.travaglini@arm.comtemplate <typename R, typename F, typename A1, typename A2, typename A3, 218013481Sgiacomo.travaglini@arm.com typename A4, typename A5, typename A6, typename A7, typename A8, 218113481Sgiacomo.travaglini@arm.com typename A9> 218213481Sgiacomo.travaglini@arm.comR InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, 218313481Sgiacomo.travaglini@arm.com A7 a7, A8 a8, A9 a9) { 218413481Sgiacomo.travaglini@arm.com return f(a1, a2, a3, a4, a5, a6, a7, a8, a9); 218513481Sgiacomo.travaglini@arm.com} 218613481Sgiacomo.travaglini@arm.comtemplate <typename R, typename F, typename A1, typename A2, typename A3, 218713481Sgiacomo.travaglini@arm.com typename A4, typename A5, typename A6, typename A7, typename A8, 218813481Sgiacomo.travaglini@arm.com typename A9, typename A10> 218913481Sgiacomo.travaglini@arm.comR InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, 219013481Sgiacomo.travaglini@arm.com A7 a7, A8 a8, A9 a9, A10 a10) { 219113481Sgiacomo.travaglini@arm.com return f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); 219213481Sgiacomo.travaglini@arm.com} 219313481Sgiacomo.travaglini@arm.com} // namespace invoke_argument 219413481Sgiacomo.travaglini@arm.com} // namespace internal 219513481Sgiacomo.travaglini@arm.com 219613481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(InvokeArgument, 219713481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(int, k), 219813481Sgiacomo.travaglini@arm.com AND_0_VALUE_PARAMS()) { 219913481Sgiacomo.travaglini@arm.com using internal::invoke_argument::InvokeArgumentAdl; 220013481Sgiacomo.travaglini@arm.com return InvokeArgumentAdl<return_type>( 220113481Sgiacomo.travaglini@arm.com internal::invoke_argument::AdlTag(), 220213481Sgiacomo.travaglini@arm.com ::testing::get<k>(args)); 220313481Sgiacomo.travaglini@arm.com} 220413481Sgiacomo.travaglini@arm.com 220513481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(InvokeArgument, 220613481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(int, k), 220713481Sgiacomo.travaglini@arm.com AND_1_VALUE_PARAMS(p0)) { 220813481Sgiacomo.travaglini@arm.com using internal::invoke_argument::InvokeArgumentAdl; 220913481Sgiacomo.travaglini@arm.com return InvokeArgumentAdl<return_type>( 221013481Sgiacomo.travaglini@arm.com internal::invoke_argument::AdlTag(), 221113481Sgiacomo.travaglini@arm.com ::testing::get<k>(args), p0); 221213481Sgiacomo.travaglini@arm.com} 221313481Sgiacomo.travaglini@arm.com 221413481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(InvokeArgument, 221513481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(int, k), 221613481Sgiacomo.travaglini@arm.com AND_2_VALUE_PARAMS(p0, p1)) { 221713481Sgiacomo.travaglini@arm.com using internal::invoke_argument::InvokeArgumentAdl; 221813481Sgiacomo.travaglini@arm.com return InvokeArgumentAdl<return_type>( 221913481Sgiacomo.travaglini@arm.com internal::invoke_argument::AdlTag(), 222013481Sgiacomo.travaglini@arm.com ::testing::get<k>(args), p0, p1); 222113481Sgiacomo.travaglini@arm.com} 222213481Sgiacomo.travaglini@arm.com 222313481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(InvokeArgument, 222413481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(int, k), 222513481Sgiacomo.travaglini@arm.com AND_3_VALUE_PARAMS(p0, p1, p2)) { 222613481Sgiacomo.travaglini@arm.com using internal::invoke_argument::InvokeArgumentAdl; 222713481Sgiacomo.travaglini@arm.com return InvokeArgumentAdl<return_type>( 222813481Sgiacomo.travaglini@arm.com internal::invoke_argument::AdlTag(), 222913481Sgiacomo.travaglini@arm.com ::testing::get<k>(args), p0, p1, p2); 223013481Sgiacomo.travaglini@arm.com} 223113481Sgiacomo.travaglini@arm.com 223213481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(InvokeArgument, 223313481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(int, k), 223413481Sgiacomo.travaglini@arm.com AND_4_VALUE_PARAMS(p0, p1, p2, p3)) { 223513481Sgiacomo.travaglini@arm.com using internal::invoke_argument::InvokeArgumentAdl; 223613481Sgiacomo.travaglini@arm.com return InvokeArgumentAdl<return_type>( 223713481Sgiacomo.travaglini@arm.com internal::invoke_argument::AdlTag(), 223813481Sgiacomo.travaglini@arm.com ::testing::get<k>(args), p0, p1, p2, p3); 223913481Sgiacomo.travaglini@arm.com} 224013481Sgiacomo.travaglini@arm.com 224113481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(InvokeArgument, 224213481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(int, k), 224313481Sgiacomo.travaglini@arm.com AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)) { 224413481Sgiacomo.travaglini@arm.com using internal::invoke_argument::InvokeArgumentAdl; 224513481Sgiacomo.travaglini@arm.com return InvokeArgumentAdl<return_type>( 224613481Sgiacomo.travaglini@arm.com internal::invoke_argument::AdlTag(), 224713481Sgiacomo.travaglini@arm.com ::testing::get<k>(args), p0, p1, p2, p3, p4); 224813481Sgiacomo.travaglini@arm.com} 224913481Sgiacomo.travaglini@arm.com 225013481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(InvokeArgument, 225113481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(int, k), 225213481Sgiacomo.travaglini@arm.com AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)) { 225313481Sgiacomo.travaglini@arm.com using internal::invoke_argument::InvokeArgumentAdl; 225413481Sgiacomo.travaglini@arm.com return InvokeArgumentAdl<return_type>( 225513481Sgiacomo.travaglini@arm.com internal::invoke_argument::AdlTag(), 225613481Sgiacomo.travaglini@arm.com ::testing::get<k>(args), p0, p1, p2, p3, p4, p5); 225713481Sgiacomo.travaglini@arm.com} 225813481Sgiacomo.travaglini@arm.com 225913481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(InvokeArgument, 226013481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(int, k), 226113481Sgiacomo.travaglini@arm.com AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)) { 226213481Sgiacomo.travaglini@arm.com using internal::invoke_argument::InvokeArgumentAdl; 226313481Sgiacomo.travaglini@arm.com return InvokeArgumentAdl<return_type>( 226413481Sgiacomo.travaglini@arm.com internal::invoke_argument::AdlTag(), 226513481Sgiacomo.travaglini@arm.com ::testing::get<k>(args), p0, p1, p2, p3, p4, p5, p6); 226613481Sgiacomo.travaglini@arm.com} 226713481Sgiacomo.travaglini@arm.com 226813481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(InvokeArgument, 226913481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(int, k), 227013481Sgiacomo.travaglini@arm.com AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)) { 227113481Sgiacomo.travaglini@arm.com using internal::invoke_argument::InvokeArgumentAdl; 227213481Sgiacomo.travaglini@arm.com return InvokeArgumentAdl<return_type>( 227313481Sgiacomo.travaglini@arm.com internal::invoke_argument::AdlTag(), 227413481Sgiacomo.travaglini@arm.com ::testing::get<k>(args), p0, p1, p2, p3, p4, p5, p6, p7); 227513481Sgiacomo.travaglini@arm.com} 227613481Sgiacomo.travaglini@arm.com 227713481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(InvokeArgument, 227813481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(int, k), 227913481Sgiacomo.travaglini@arm.com AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8)) { 228013481Sgiacomo.travaglini@arm.com using internal::invoke_argument::InvokeArgumentAdl; 228113481Sgiacomo.travaglini@arm.com return InvokeArgumentAdl<return_type>( 228213481Sgiacomo.travaglini@arm.com internal::invoke_argument::AdlTag(), 228313481Sgiacomo.travaglini@arm.com ::testing::get<k>(args), p0, p1, p2, p3, p4, p5, p6, p7, p8); 228413481Sgiacomo.travaglini@arm.com} 228513481Sgiacomo.travaglini@arm.com 228613481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(InvokeArgument, 228713481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(int, k), 228813481Sgiacomo.travaglini@arm.com AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) { 228913481Sgiacomo.travaglini@arm.com using internal::invoke_argument::InvokeArgumentAdl; 229013481Sgiacomo.travaglini@arm.com return InvokeArgumentAdl<return_type>( 229113481Sgiacomo.travaglini@arm.com internal::invoke_argument::AdlTag(), 229213481Sgiacomo.travaglini@arm.com ::testing::get<k>(args), p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); 229313481Sgiacomo.travaglini@arm.com} 229413481Sgiacomo.travaglini@arm.com 229513481Sgiacomo.travaglini@arm.com// Various overloads for ReturnNew<T>(). 229613481Sgiacomo.travaglini@arm.com// 229713481Sgiacomo.travaglini@arm.com// The ReturnNew<T>(a1, a2, ..., a_k) action returns a pointer to a new 229813481Sgiacomo.travaglini@arm.com// instance of type T, constructed on the heap with constructor arguments 229913481Sgiacomo.travaglini@arm.com// a1, a2, ..., and a_k. The caller assumes ownership of the returned value. 230013481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(ReturnNew, 230113481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(typename, T), 230213481Sgiacomo.travaglini@arm.com AND_0_VALUE_PARAMS()) { 230313481Sgiacomo.travaglini@arm.com return new T(); 230413481Sgiacomo.travaglini@arm.com} 230513481Sgiacomo.travaglini@arm.com 230613481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(ReturnNew, 230713481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(typename, T), 230813481Sgiacomo.travaglini@arm.com AND_1_VALUE_PARAMS(p0)) { 230913481Sgiacomo.travaglini@arm.com return new T(p0); 231013481Sgiacomo.travaglini@arm.com} 231113481Sgiacomo.travaglini@arm.com 231213481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(ReturnNew, 231313481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(typename, T), 231413481Sgiacomo.travaglini@arm.com AND_2_VALUE_PARAMS(p0, p1)) { 231513481Sgiacomo.travaglini@arm.com return new T(p0, p1); 231613481Sgiacomo.travaglini@arm.com} 231713481Sgiacomo.travaglini@arm.com 231813481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(ReturnNew, 231913481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(typename, T), 232013481Sgiacomo.travaglini@arm.com AND_3_VALUE_PARAMS(p0, p1, p2)) { 232113481Sgiacomo.travaglini@arm.com return new T(p0, p1, p2); 232213481Sgiacomo.travaglini@arm.com} 232313481Sgiacomo.travaglini@arm.com 232413481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(ReturnNew, 232513481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(typename, T), 232613481Sgiacomo.travaglini@arm.com AND_4_VALUE_PARAMS(p0, p1, p2, p3)) { 232713481Sgiacomo.travaglini@arm.com return new T(p0, p1, p2, p3); 232813481Sgiacomo.travaglini@arm.com} 232913481Sgiacomo.travaglini@arm.com 233013481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(ReturnNew, 233113481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(typename, T), 233213481Sgiacomo.travaglini@arm.com AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)) { 233313481Sgiacomo.travaglini@arm.com return new T(p0, p1, p2, p3, p4); 233413481Sgiacomo.travaglini@arm.com} 233513481Sgiacomo.travaglini@arm.com 233613481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(ReturnNew, 233713481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(typename, T), 233813481Sgiacomo.travaglini@arm.com AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)) { 233913481Sgiacomo.travaglini@arm.com return new T(p0, p1, p2, p3, p4, p5); 234013481Sgiacomo.travaglini@arm.com} 234113481Sgiacomo.travaglini@arm.com 234213481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(ReturnNew, 234313481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(typename, T), 234413481Sgiacomo.travaglini@arm.com AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)) { 234513481Sgiacomo.travaglini@arm.com return new T(p0, p1, p2, p3, p4, p5, p6); 234613481Sgiacomo.travaglini@arm.com} 234713481Sgiacomo.travaglini@arm.com 234813481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(ReturnNew, 234913481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(typename, T), 235013481Sgiacomo.travaglini@arm.com AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)) { 235113481Sgiacomo.travaglini@arm.com return new T(p0, p1, p2, p3, p4, p5, p6, p7); 235213481Sgiacomo.travaglini@arm.com} 235313481Sgiacomo.travaglini@arm.com 235413481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(ReturnNew, 235513481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(typename, T), 235613481Sgiacomo.travaglini@arm.com AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8)) { 235713481Sgiacomo.travaglini@arm.com return new T(p0, p1, p2, p3, p4, p5, p6, p7, p8); 235813481Sgiacomo.travaglini@arm.com} 235913481Sgiacomo.travaglini@arm.com 236013481Sgiacomo.travaglini@arm.comACTION_TEMPLATE(ReturnNew, 236113481Sgiacomo.travaglini@arm.com HAS_1_TEMPLATE_PARAMS(typename, T), 236213481Sgiacomo.travaglini@arm.com AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) { 236313481Sgiacomo.travaglini@arm.com return new T(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); 236413481Sgiacomo.travaglini@arm.com} 236513481Sgiacomo.travaglini@arm.com 236613481Sgiacomo.travaglini@arm.com#ifdef _MSC_VER 236713481Sgiacomo.travaglini@arm.com# pragma warning(pop) 236813481Sgiacomo.travaglini@arm.com#endif 236913481Sgiacomo.travaglini@arm.com 237013481Sgiacomo.travaglini@arm.com} // namespace testing 237113481Sgiacomo.travaglini@arm.com 237213481Sgiacomo.travaglini@arm.com// Include any custom actions added by the local installation. 237313481Sgiacomo.travaglini@arm.com// We must include this header at the end to make sure it can use the 237413481Sgiacomo.travaglini@arm.com// declarations from this file. 237513481Sgiacomo.travaglini@arm.com#include "gmock/internal/custom/gmock-generated-actions.h" 237613481Sgiacomo.travaglini@arm.com 237713481Sgiacomo.travaglini@arm.com#endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ 2378