1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This file was GENERATED by a script. DO NOT EDIT BY HAND!!! 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright 2007, Google Inc. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// All rights reserved. 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Redistribution and use in source and binary forms, with or without 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// modification, are permitted provided that the following conditions are 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// met: 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// * Redistributions of source code must retain the above copyright 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// notice, this list of conditions and the following disclaimer. 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// * Redistributions in binary form must reproduce the above 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// copyright notice, this list of conditions and the following disclaimer 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// in the documentation and/or other materials provided with the 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// distribution. 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// * Neither the name of Google Inc. nor the names of its 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// contributors may be used to endorse or promote products derived from 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// this software without specific prior written permission. 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Author: wan@google.com (Zhanyong Wan) 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Google Mock - a framework for writing C++ mock classes. 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This file implements some commonly used variadic actions. 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "gmock/gmock-actions.h" 42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "gmock/internal/gmock-port.h" 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace testing { 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace internal { 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// InvokeHelper<F> knows how to unpack an N-tuple and invoke an N-ary 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// function or method with the unpacked values, where F is a function 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// type that takes N arguments. 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Result, typename ArgumentTuple> 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass InvokeHelper; 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R> 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass InvokeHelper<R, ::std::tr1::tuple<> > { 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function> 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Invoke(Function function, const ::std::tr1::tuple<>&) { 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(); 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <class Class, typename MethodPtr> 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R InvokeMethod(Class* obj_ptr, 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MethodPtr method_ptr, 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ::std::tr1::tuple<>&) { 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return (obj_ptr->*method_ptr)(); 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1> 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass InvokeHelper<R, ::std::tr1::tuple<A1> > { 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function> 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Invoke(Function function, const ::std::tr1::tuple<A1>& args) { 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(get<0>(args)); 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <class Class, typename MethodPtr> 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R InvokeMethod(Class* obj_ptr, 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MethodPtr method_ptr, 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ::std::tr1::tuple<A1>& args) { 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return (obj_ptr->*method_ptr)(get<0>(args)); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2> 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass InvokeHelper<R, ::std::tr1::tuple<A1, A2> > { 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function> 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Invoke(Function function, const ::std::tr1::tuple<A1, A2>& args) { 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(get<0>(args), get<1>(args)); 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <class Class, typename MethodPtr> 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R InvokeMethod(Class* obj_ptr, 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MethodPtr method_ptr, 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ::std::tr1::tuple<A1, A2>& args) { 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args)); 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2, typename A3> 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass InvokeHelper<R, ::std::tr1::tuple<A1, A2, A3> > { 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function> 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Invoke(Function function, const ::std::tr1::tuple<A1, A2, 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A3>& args) { 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(get<0>(args), get<1>(args), get<2>(args)); 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <class Class, typename MethodPtr> 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R InvokeMethod(Class* obj_ptr, 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MethodPtr method_ptr, 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ::std::tr1::tuple<A1, A2, A3>& args) { 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), get<2>(args)); 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2, typename A3, typename A4> 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass InvokeHelper<R, ::std::tr1::tuple<A1, A2, A3, A4> > { 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function> 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Invoke(Function function, const ::std::tr1::tuple<A1, A2, A3, 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A4>& args) { 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(get<0>(args), get<1>(args), get<2>(args), get<3>(args)); 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <class Class, typename MethodPtr> 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R InvokeMethod(Class* obj_ptr, 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MethodPtr method_ptr, 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ::std::tr1::tuple<A1, A2, A3, A4>& args) { 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), get<2>(args), 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<3>(args)); 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A5> 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass InvokeHelper<R, ::std::tr1::tuple<A1, A2, A3, A4, A5> > { 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function> 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Invoke(Function function, const ::std::tr1::tuple<A1, A2, A3, A4, 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A5>& args) { 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(get<0>(args), get<1>(args), get<2>(args), get<3>(args), 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<4>(args)); 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <class Class, typename MethodPtr> 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R InvokeMethod(Class* obj_ptr, 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MethodPtr method_ptr, 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ::std::tr1::tuple<A1, A2, A3, A4, A5>& args) { 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), get<2>(args), 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<3>(args), get<4>(args)); 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A5, typename A6> 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass InvokeHelper<R, ::std::tr1::tuple<A1, A2, A3, A4, A5, A6> > { 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function> 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Invoke(Function function, const ::std::tr1::tuple<A1, A2, A3, A4, 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A5, A6>& args) { 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(get<0>(args), get<1>(args), get<2>(args), get<3>(args), 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<4>(args), get<5>(args)); 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <class Class, typename MethodPtr> 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R InvokeMethod(Class* obj_ptr, 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MethodPtr method_ptr, 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ::std::tr1::tuple<A1, A2, A3, A4, A5, A6>& args) { 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), get<2>(args), 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<3>(args), get<4>(args), get<5>(args)); 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A5, typename A6, typename A7> 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass InvokeHelper<R, ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7> > { 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function> 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Invoke(Function function, const ::std::tr1::tuple<A1, A2, A3, A4, 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A5, A6, A7>& args) { 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(get<0>(args), get<1>(args), get<2>(args), get<3>(args), 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<4>(args), get<5>(args), get<6>(args)); 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <class Class, typename MethodPtr> 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R InvokeMethod(Class* obj_ptr, 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MethodPtr method_ptr, 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A7>& args) { 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), get<2>(args), 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<3>(args), get<4>(args), get<5>(args), get<6>(args)); 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A5, typename A6, typename A7, typename A8> 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass InvokeHelper<R, ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, A8> > { 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function> 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Invoke(Function function, const ::std::tr1::tuple<A1, A2, A3, A4, 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A5, A6, A7, A8>& args) { 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(get<0>(args), get<1>(args), get<2>(args), get<3>(args), 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<4>(args), get<5>(args), get<6>(args), get<7>(args)); 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <class Class, typename MethodPtr> 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R InvokeMethod(Class* obj_ptr, 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MethodPtr method_ptr, 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A8>& args) { 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), get<2>(args), 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<3>(args), get<4>(args), get<5>(args), get<6>(args), get<7>(args)); 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A5, typename A6, typename A7, typename A8, typename A9> 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass InvokeHelper<R, ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9> > { 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function> 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Invoke(Function function, const ::std::tr1::tuple<A1, A2, A3, A4, 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A5, A6, A7, A8, A9>& args) { 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(get<0>(args), get<1>(args), get<2>(args), get<3>(args), 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<4>(args), get<5>(args), get<6>(args), get<7>(args), get<8>(args)); 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <class Class, typename MethodPtr> 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R InvokeMethod(Class* obj_ptr, 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MethodPtr method_ptr, 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, A8, 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A9>& args) { 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), get<2>(args), 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<3>(args), get<4>(args), get<5>(args), get<6>(args), get<7>(args), 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<8>(args)); 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2, typename A3, typename A4, 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A5, typename A6, typename A7, typename A8, typename A9, 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A10> 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass InvokeHelper<R, ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9, 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A10> > { 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function> 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Invoke(Function function, const ::std::tr1::tuple<A1, A2, A3, A4, 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A5, A6, A7, A8, A9, A10>& args) { 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(get<0>(args), get<1>(args), get<2>(args), get<3>(args), 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<4>(args), get<5>(args), get<6>(args), get<7>(args), get<8>(args), 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<9>(args)); 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <class Class, typename MethodPtr> 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R InvokeMethod(Class* obj_ptr, 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MethodPtr method_ptr, 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, A8, 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A9, A10>& args) { 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), get<2>(args), 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<3>(args), get<4>(args), get<5>(args), get<6>(args), get<7>(args), 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<8>(args), get<9>(args)); 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CallableHelper has static methods for invoking "callables", 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// i.e. function pointers and functors. It uses overloading to 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// provide a uniform interface for invoking different kinds of 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// callables. In particular, you can use: 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CallableHelper<R>::Call(callable, a1, a2, ..., an) 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// to invoke an n-ary callable, where R is its return type. If an 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// argument, say a2, needs to be passed by reference, you should write 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ByRef(a2) instead of a2 in the above expression. 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R> 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CallableHelper { 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Calls a nullary callable. 299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function> 300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Call(Function function) { return function(); } 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Calls a unary callable. 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We deliberately pass a1 by value instead of const reference here 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // in case it is a C-string literal. If we had declared the 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // parameter as 'const A1& a1' and write Call(function, "Hi"), the 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // compiler would've thought A1 is 'char[3]', which causes trouble 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // when you need to copy a value of type A1. By declaring the 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // parameter as 'A1 a1', the compiler will correctly infer that A1 310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // is 'const char*' when it sees Call(function, "Hi"). 311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Since this function is defined inline, the compiler can get rid 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // of the copying of the arguments. Therefore the performance won't 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // be hurt. 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function, typename A1> 316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Call(Function function, A1 a1) { return function(a1); } 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Calls a binary callable. 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function, typename A1, typename A2> 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Call(Function function, A1 a1, A2 a2) { 321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(a1, a2); 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Calls a ternary callable. 325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function, typename A1, typename A2, typename A3> 326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Call(Function function, A1 a1, A2 a2, A3 a3) { 327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(a1, a2, a3); 328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Calls a 4-ary callable. 331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function, typename A1, typename A2, typename A3, 332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A4> 333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Call(Function function, A1 a1, A2 a2, A3 a3, A4 a4) { 334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(a1, a2, a3, a4); 335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Calls a 5-ary callable. 338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function, typename A1, typename A2, typename A3, 339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A4, typename A5> 340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Call(Function function, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { 341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(a1, a2, a3, a4, a5); 342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Calls a 6-ary callable. 345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function, typename A1, typename A2, typename A3, 346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A4, typename A5, typename A6> 347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Call(Function function, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { 348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(a1, a2, a3, a4, a5, a6); 349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Calls a 7-ary callable. 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function, typename A1, typename A2, typename A3, 353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A4, typename A5, typename A6, typename A7> 354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Call(Function function, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, 355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A7 a7) { 356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(a1, a2, a3, a4, a5, a6, a7); 357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Calls a 8-ary callable. 360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function, typename A1, typename A2, typename A3, 361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A4, typename A5, typename A6, typename A7, typename A8> 362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Call(Function function, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, 363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A7 a7, A8 a8) { 364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(a1, a2, a3, a4, a5, a6, a7, a8); 365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Calls a 9-ary callable. 368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function, typename A1, typename A2, typename A3, 369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A4, typename A5, typename A6, typename A7, typename A8, 370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A9> 371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Call(Function function, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, 372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A7 a7, A8 a8, A9 a9) { 373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(a1, a2, a3, a4, a5, a6, a7, a8, a9); 374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Calls a 10-ary callable. 377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename Function, typename A1, typename A2, typename A3, 378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A4, typename A5, typename A6, typename A7, typename A8, 379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A9, typename A10> 380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static R Call(Function function, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, 381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A7 a7, A8 a8, A9 a9, A10 a10) { 382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); 383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; // class CallableHelper 386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// An INTERNAL macro for extracting the type of a tuple field. It's 388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// subject to change without notice - DO NOT USE IN USER CODE! 389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_FIELD_(Tuple, N) \ 390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename ::std::tr1::tuple_element<N, Tuple>::type 391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// SelectArgs<Result, ArgumentTuple, k1, k2, ..., k_n>::type is the 393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// type of an n-ary function whose i-th (1-based) argument type is the 394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// k{i}-th (0-based) field of ArgumentTuple, which must be a tuple 395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// type, and whose return type is Result. For example, 396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// SelectArgs<int, ::std::tr1::tuple<bool, char, double, long>, 0, 3>::type 397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// is int(bool, long). 398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// SelectArgs<Result, ArgumentTuple, k1, k2, ..., k_n>::Select(args) 400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// returns the selected fields (k1, k2, ..., k_n) of args as a tuple. 401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// For example, 402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// SelectArgs<int, ::std::tr1::tuple<bool, char, double>, 2, 0>::Select( 403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ::std::tr1::make_tuple(true, 'a', 2.5)) 404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// returns ::std::tr1::tuple (2.5, true). 405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The numbers in list k1, k2, ..., k_n must be >= 0, where n can be 407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// in the range [0, 10]. Duplicates are allowed and they don't have 408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// to be in an ascending or descending order. 409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Result, typename ArgumentTuple, int k1, int k2, int k3, 411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int k4, int k5, int k6, int k7, int k8, int k9, int k10> 412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SelectArgs { 413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), 416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), 417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7), 418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k8), GMOCK_FIELD_(ArgumentTuple, k9), 419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k10)); 420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename Function<type>::ArgumentTuple SelectedArgs; 421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static SelectedArgs Select(const ArgumentTuple& args) { 422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args), 424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<k4>(args), get<k5>(args), get<k6>(args), get<k7>(args), 425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<k8>(args), get<k9>(args), get<k10>(args)); 426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Result, typename ArgumentTuple> 430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SelectArgs<Result, ArgumentTuple, 431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch -1, -1, -1, -1, -1, -1, -1, -1, -1, -1> { 432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef Result type(); 434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename Function<type>::ArgumentTuple SelectedArgs; 435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static SelectedArgs Select(const ArgumentTuple& /* args */) { 436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return SelectedArgs(); 438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Result, typename ArgumentTuple, int k1> 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SelectArgs<Result, ArgumentTuple, 443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch k1, -1, -1, -1, -1, -1, -1, -1, -1, -1> { 444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1)); 446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename Function<type>::ArgumentTuple SelectedArgs; 447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static SelectedArgs Select(const ArgumentTuple& args) { 448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return SelectedArgs(get<k1>(args)); 450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Result, typename ArgumentTuple, int k1, int k2> 454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SelectArgs<Result, ArgumentTuple, 455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch k1, k2, -1, -1, -1, -1, -1, -1, -1, -1> { 456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k2)); 459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename Function<type>::ArgumentTuple SelectedArgs; 460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static SelectedArgs Select(const ArgumentTuple& args) { 461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return SelectedArgs(get<k1>(args), get<k2>(args)); 463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Result, typename ArgumentTuple, int k1, int k2, int k3> 467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SelectArgs<Result, ArgumentTuple, 468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch k1, k2, k3, -1, -1, -1, -1, -1, -1, -1> { 469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3)); 472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename Function<type>::ArgumentTuple SelectedArgs; 473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static SelectedArgs Select(const ArgumentTuple& args) { 474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args)); 476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Result, typename ArgumentTuple, int k1, int k2, int k3, 480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int k4> 481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SelectArgs<Result, ArgumentTuple, 482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch k1, k2, k3, k4, -1, -1, -1, -1, -1, -1> { 483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), 486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k4)); 487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename Function<type>::ArgumentTuple SelectedArgs; 488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static SelectedArgs Select(const ArgumentTuple& args) { 489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args), 491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<k4>(args)); 492c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Result, typename ArgumentTuple, int k1, int k2, int k3, 496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int k4, int k5> 497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SelectArgs<Result, ArgumentTuple, 498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch k1, k2, k3, k4, k5, -1, -1, -1, -1, -1> { 499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), 502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5)); 503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename Function<type>::ArgumentTuple SelectedArgs; 504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static SelectedArgs Select(const ArgumentTuple& args) { 505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args), 507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<k4>(args), get<k5>(args)); 508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Result, typename ArgumentTuple, int k1, int k2, int k3, 512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int k4, int k5, int k6> 513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SelectArgs<Result, ArgumentTuple, 514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch k1, k2, k3, k4, k5, k6, -1, -1, -1, -1> { 515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), 518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), 519c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k6)); 520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename Function<type>::ArgumentTuple SelectedArgs; 521c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static SelectedArgs Select(const ArgumentTuple& args) { 522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args), 524c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<k4>(args), get<k5>(args), get<k6>(args)); 525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Result, typename ArgumentTuple, int k1, int k2, int k3, 529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int k4, int k5, int k6, int k7> 530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SelectArgs<Result, ArgumentTuple, 531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch k1, k2, k3, k4, k5, k6, k7, -1, -1, -1> { 532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), 535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), 536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7)); 537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename Function<type>::ArgumentTuple SelectedArgs; 538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static SelectedArgs Select(const ArgumentTuple& args) { 539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args), 541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<k4>(args), get<k5>(args), get<k6>(args), get<k7>(args)); 542c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Result, typename ArgumentTuple, int k1, int k2, int k3, 546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int k4, int k5, int k6, int k7, int k8> 547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SelectArgs<Result, ArgumentTuple, 548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch k1, k2, k3, k4, k5, k6, k7, k8, -1, -1> { 549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), 552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), 553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7), 554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k8)); 555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename Function<type>::ArgumentTuple SelectedArgs; 556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static SelectedArgs Select(const ArgumentTuple& args) { 557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args), 559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<k4>(args), get<k5>(args), get<k6>(args), get<k7>(args), 560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<k8>(args)); 561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 562c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 563c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 564c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Result, typename ArgumentTuple, int k1, int k2, int k3, 565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int k4, int k5, int k6, int k7, int k8, int k9> 566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SelectArgs<Result, ArgumentTuple, 567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch k1, k2, k3, k4, k5, k6, k7, k8, k9, -1> { 568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), 570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), 571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), 572c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7), 573c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_FIELD_(ArgumentTuple, k8), GMOCK_FIELD_(ArgumentTuple, k9)); 574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename Function<type>::ArgumentTuple SelectedArgs; 575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static SelectedArgs Select(const ArgumentTuple& args) { 576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 577c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return SelectedArgs(get<k1>(args), get<k2>(args), get<k3>(args), 578c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<k4>(args), get<k5>(args), get<k6>(args), get<k7>(args), 579c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<k8>(args), get<k9>(args)); 580c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 581c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 582c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 583c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#undef GMOCK_FIELD_ 584c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 585c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Implements the WithArgs action. 586c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename InnerAction, int k1 = -1, int k2 = -1, int k3 = -1, 587c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int k4 = -1, int k5 = -1, int k6 = -1, int k7 = -1, int k8 = -1, 588c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int k9 = -1, int k10 = -1> 589c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass WithArgsAction { 590c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 591c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit WithArgsAction(const InnerAction& action) : action_(action) {} 592c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 593c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F> 594c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch operator Action<F>() const { return MakeAction(new Impl<F>(action_)); } 595c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 596c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 597c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F> 598c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class Impl : public ActionInterface<F> { 599c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 600c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename Function<F>::Result Result; 601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename Function<F>::ArgumentTuple ArgumentTuple; 602c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 603c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit Impl(const InnerAction& action) : action_(action) {} 604c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 605c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual Result Perform(const ArgumentTuple& args) { 606c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return action_.Perform(SelectArgs<Result, ArgumentTuple, k1, k2, k3, k4, 607c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch k5, k6, k7, k8, k9, k10>::Select(args)); 608c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 609c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 610c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 611c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename SelectArgs<Result, ArgumentTuple, 612c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch k1, k2, k3, k4, k5, k6, k7, k8, k9, k10>::type InnerFunctionType; 613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 614c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Action<InnerFunctionType> action_; 615c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 616c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 617c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const InnerAction action_; 618c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 619c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(WithArgsAction); 620c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 621c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 622c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A macro from the ACTION* family (defined later in this file) 623c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// defines an action that can be used in a mock function. Typically, 624c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// these actions only care about a subset of the arguments of the mock 625c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// function. For example, if such an action only uses the second 626c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// argument, it can be used in any mock function that takes >= 2 627c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// arguments where the type of the second argument is compatible. 628c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 629c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Therefore, the action implementation must be prepared to take more 630c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// arguments than it needs. The ExcessiveArg type is used to 631c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// represent those excessive arguments. In order to keep the compiler 632c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// error messages tractable, we define it in the testing namespace 633c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// instead of testing::internal. However, this is an INTERNAL TYPE 634c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// and subject to change without notice, so a user MUST NOT USE THIS 635c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TYPE DIRECTLY. 636c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct ExcessiveArg {}; 637c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 638c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A helper class needed for implementing the ACTION* macros. 639c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Result, class Impl> 640c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ActionHelper { 641c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 642c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static Result Perform(Impl* impl, const ::std::tr1::tuple<>& args) { 643c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 644c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return impl->template gmock_PerformImpl<>(args, ExcessiveArg(), 645c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 646c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 647c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg()); 648c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 649c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 650c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename A0> 651c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static Result Perform(Impl* impl, const ::std::tr1::tuple<A0>& args) { 652c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 653c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return impl->template gmock_PerformImpl<A0>(args, get<0>(args), 654c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 655c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 656c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg()); 657c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 658c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 659c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename A0, typename A1> 660c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static Result Perform(Impl* impl, const ::std::tr1::tuple<A0, A1>& args) { 661c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 662c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return impl->template gmock_PerformImpl<A0, A1>(args, get<0>(args), 663c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<1>(args), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 664c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 665c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg()); 666c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 667c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 668c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename A0, typename A1, typename A2> 669c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static Result Perform(Impl* impl, const ::std::tr1::tuple<A0, A1, A2>& args) { 670c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 671c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return impl->template gmock_PerformImpl<A0, A1, A2>(args, get<0>(args), 672c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<1>(args), get<2>(args), ExcessiveArg(), ExcessiveArg(), 673c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 674c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg()); 675c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 676c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 677c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename A0, typename A1, typename A2, typename A3> 678c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static Result Perform(Impl* impl, const ::std::tr1::tuple<A0, A1, A2, 679c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A3>& args) { 680c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 681c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return impl->template gmock_PerformImpl<A0, A1, A2, A3>(args, get<0>(args), 682c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<1>(args), get<2>(args), get<3>(args), ExcessiveArg(), 683c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 684c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg()); 685c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 686c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 687c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename A0, typename A1, typename A2, typename A3, typename A4> 688c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static Result Perform(Impl* impl, const ::std::tr1::tuple<A0, A1, A2, A3, 689c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A4>& args) { 690c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 691c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4>(args, 692c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<0>(args), get<1>(args), get<2>(args), get<3>(args), get<4>(args), 693c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 694c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg()); 695c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 696c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 697c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename A0, typename A1, typename A2, typename A3, typename A4, 698c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A5> 699c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static Result Perform(Impl* impl, const ::std::tr1::tuple<A0, A1, A2, A3, A4, 700c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A5>& args) { 701c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 702c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5>(args, 703c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<0>(args), get<1>(args), get<2>(args), get<3>(args), get<4>(args), 704c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<5>(args), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), 705c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg()); 706c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 707c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 708c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename A0, typename A1, typename A2, typename A3, typename A4, 709c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A5, typename A6> 710c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static Result Perform(Impl* impl, const ::std::tr1::tuple<A0, A1, A2, A3, A4, 711c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A5, A6>& args) { 712c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 713c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6>(args, 714c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<0>(args), get<1>(args), get<2>(args), get<3>(args), get<4>(args), 715c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<5>(args), get<6>(args), ExcessiveArg(), ExcessiveArg(), 716c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg()); 717c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 718c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 719c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename A0, typename A1, typename A2, typename A3, typename A4, 720c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A5, typename A6, typename A7> 721c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static Result Perform(Impl* impl, const ::std::tr1::tuple<A0, A1, A2, A3, A4, 722c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A5, A6, A7>& args) { 723c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 724c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6, 725c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A7>(args, get<0>(args), get<1>(args), get<2>(args), get<3>(args), 726c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<4>(args), get<5>(args), get<6>(args), get<7>(args), ExcessiveArg(), 727c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg()); 728c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 729c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 730c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename A0, typename A1, typename A2, typename A3, typename A4, 731c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A5, typename A6, typename A7, typename A8> 732c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static Result Perform(Impl* impl, const ::std::tr1::tuple<A0, A1, A2, A3, A4, 733c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A5, A6, A7, A8>& args) { 734c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 735c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6, A7, 736c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A8>(args, get<0>(args), get<1>(args), get<2>(args), get<3>(args), 737c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<4>(args), get<5>(args), get<6>(args), get<7>(args), get<8>(args), 738c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExcessiveArg()); 739c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 740c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 741c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename A0, typename A1, typename A2, typename A3, typename A4, 742c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename A5, typename A6, typename A7, typename A8, typename A9> 743c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static Result Perform(Impl* impl, const ::std::tr1::tuple<A0, A1, A2, A3, A4, 744c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A5, A6, A7, A8, A9>& args) { 745c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch using ::std::tr1::get; 746c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6, A7, A8, 747c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch A9>(args, get<0>(args), get<1>(args), get<2>(args), get<3>(args), 748c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<4>(args), get<5>(args), get<6>(args), get<7>(args), get<8>(args), 749c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch get<9>(args)); 750c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 751c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 752c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 753c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace internal 754c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 755c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Various overloads for Invoke(). 756c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 757c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// WithArgs<N1, N2, ..., Nk>(an_action) creates an action that passes 758c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the selected arguments of the mock function to an_action and 759c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// performs it. It serves as an adaptor between actions with 760c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// different argument lists. C++ doesn't support default arguments for 761c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// function templates, so we have to overload it. 762c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <int k1, typename InnerAction> 763c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::WithArgsAction<InnerAction, k1> 764c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochWithArgs(const InnerAction& action) { 765c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::WithArgsAction<InnerAction, k1>(action); 766c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 767c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 768c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <int k1, int k2, typename InnerAction> 769c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::WithArgsAction<InnerAction, k1, k2> 770c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochWithArgs(const InnerAction& action) { 771c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::WithArgsAction<InnerAction, k1, k2>(action); 772c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 773c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 774c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <int k1, int k2, int k3, typename InnerAction> 775c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::WithArgsAction<InnerAction, k1, k2, k3> 776c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochWithArgs(const InnerAction& action) { 777c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::WithArgsAction<InnerAction, k1, k2, k3>(action); 778c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 779c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 780c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <int k1, int k2, int k3, int k4, typename InnerAction> 781c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::WithArgsAction<InnerAction, k1, k2, k3, k4> 782c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochWithArgs(const InnerAction& action) { 783c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::WithArgsAction<InnerAction, k1, k2, k3, k4>(action); 784c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 785c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 786c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <int k1, int k2, int k3, int k4, int k5, typename InnerAction> 787c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5> 788c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochWithArgs(const InnerAction& action) { 789c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5>(action); 790c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 791c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 792c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <int k1, int k2, int k3, int k4, int k5, int k6, typename InnerAction> 793c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6> 794c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochWithArgs(const InnerAction& action) { 795c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6>(action); 796c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 797c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 798c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <int k1, int k2, int k3, int k4, int k5, int k6, int k7, 799c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename InnerAction> 800c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7> 801c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochWithArgs(const InnerAction& action) { 802c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, 803c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch k7>(action); 804c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 805c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 806c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <int k1, int k2, int k3, int k4, int k5, int k6, int k7, int k8, 807c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename InnerAction> 808c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7, k8> 809c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochWithArgs(const InnerAction& action) { 810c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7, 811c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch k8>(action); 812c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 813c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 814c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <int k1, int k2, int k3, int k4, int k5, int k6, int k7, int k8, 815c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int k9, typename InnerAction> 816c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7, k8, k9> 817c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochWithArgs(const InnerAction& action) { 818c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7, k8, 819c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch k9>(action); 820c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 821c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 822c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <int k1, int k2, int k3, int k4, int k5, int k6, int k7, int k8, 823c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int k9, int k10, typename InnerAction> 824c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7, k8, 825c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch k9, k10> 826c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochWithArgs(const InnerAction& action) { 827c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::WithArgsAction<InnerAction, k1, k2, k3, k4, k5, k6, k7, k8, 828c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch k9, k10>(action); 829c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 830c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 831c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Creates an action that does actions a1, a2, ..., sequentially in 832c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// each invocation. 833c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Action1, typename Action2> 834c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::DoBothAction<Action1, Action2> 835c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochDoAll(Action1 a1, Action2 a2) { 836c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::DoBothAction<Action1, Action2>(a1, a2); 837c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 838c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 839c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Action1, typename Action2, typename Action3> 840c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::DoBothAction<Action1, internal::DoBothAction<Action2, 841c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Action3> > 842c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochDoAll(Action1 a1, Action2 a2, Action3 a3) { 843c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return DoAll(a1, DoAll(a2, a3)); 844c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 845c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 846c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Action1, typename Action2, typename Action3, 847c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename Action4> 848c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::DoBothAction<Action1, internal::DoBothAction<Action2, 849c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch internal::DoBothAction<Action3, Action4> > > 850c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochDoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4) { 851c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return DoAll(a1, DoAll(a2, a3, a4)); 852c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 853c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 854c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Action1, typename Action2, typename Action3, 855c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename Action4, typename Action5> 856c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::DoBothAction<Action1, internal::DoBothAction<Action2, 857c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch internal::DoBothAction<Action3, internal::DoBothAction<Action4, 858c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Action5> > > > 859c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochDoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5) { 860c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return DoAll(a1, DoAll(a2, a3, a4, a5)); 861c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 862c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 863c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Action1, typename Action2, typename Action3, 864c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename Action4, typename Action5, typename Action6> 865c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::DoBothAction<Action1, internal::DoBothAction<Action2, 866c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch internal::DoBothAction<Action3, internal::DoBothAction<Action4, 867c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch internal::DoBothAction<Action5, Action6> > > > > 868c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochDoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6) { 869c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return DoAll(a1, DoAll(a2, a3, a4, a5, a6)); 870c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 871c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 872c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Action1, typename Action2, typename Action3, 873c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename Action4, typename Action5, typename Action6, typename Action7> 874c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::DoBothAction<Action1, internal::DoBothAction<Action2, 875c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch internal::DoBothAction<Action3, internal::DoBothAction<Action4, 876c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch internal::DoBothAction<Action5, internal::DoBothAction<Action6, 877c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Action7> > > > > > 878c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochDoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, 879c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Action7 a7) { 880c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return DoAll(a1, DoAll(a2, a3, a4, a5, a6, a7)); 881c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 882c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 883c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Action1, typename Action2, typename Action3, 884c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename Action4, typename Action5, typename Action6, typename Action7, 885c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename Action8> 886c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::DoBothAction<Action1, internal::DoBothAction<Action2, 887c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch internal::DoBothAction<Action3, internal::DoBothAction<Action4, 888c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch internal::DoBothAction<Action5, internal::DoBothAction<Action6, 889c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch internal::DoBothAction<Action7, Action8> > > > > > > 890c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochDoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, 891c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Action7 a7, Action8 a8) { 892c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return DoAll(a1, DoAll(a2, a3, a4, a5, a6, a7, a8)); 893c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 894c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 895c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Action1, typename Action2, typename Action3, 896c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename Action4, typename Action5, typename Action6, typename Action7, 897c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename Action8, typename Action9> 898c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::DoBothAction<Action1, internal::DoBothAction<Action2, 899c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch internal::DoBothAction<Action3, internal::DoBothAction<Action4, 900c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch internal::DoBothAction<Action5, internal::DoBothAction<Action6, 901c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch internal::DoBothAction<Action7, internal::DoBothAction<Action8, 902c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Action9> > > > > > > > 903c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochDoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, 904c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Action7 a7, Action8 a8, Action9 a9) { 905c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return DoAll(a1, DoAll(a2, a3, a4, a5, a6, a7, a8, a9)); 906c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 907c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 908c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Action1, typename Action2, typename Action3, 909c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename Action4, typename Action5, typename Action6, typename Action7, 910c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename Action8, typename Action9, typename Action10> 911c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline internal::DoBothAction<Action1, internal::DoBothAction<Action2, 912c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch internal::DoBothAction<Action3, internal::DoBothAction<Action4, 913c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch internal::DoBothAction<Action5, internal::DoBothAction<Action6, 914c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch internal::DoBothAction<Action7, internal::DoBothAction<Action8, 915c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch internal::DoBothAction<Action9, Action10> > > > > > > > > 916c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochDoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, 917c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Action7 a7, Action8 a8, Action9 a9, Action10 a10) { 918c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return DoAll(a1, DoAll(a2, a3, a4, a5, a6, a7, a8, a9, a10)); 919c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 920c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 921c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace testing 922c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 923c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The ACTION* family of macros can be used in a namespace scope to 924c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// define custom actions easily. The syntax: 925c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 926c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ACTION(name) { statements; } 927c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 928c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// will define an action with the given name that executes the 929c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// statements. The value returned by the statements will be used as 930c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the return value of the action. Inside the statements, you can 931c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// refer to the K-th (0-based) argument of the mock function by 932c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 'argK', and refer to its type by 'argK_type'. For example: 933c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 934c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ACTION(IncrementArg1) { 935c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// arg1_type temp = arg1; 936c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// return ++(*temp); 937c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// } 938c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 939c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// allows you to write 940c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 941c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ...WillOnce(IncrementArg1()); 942c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 943c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// You can also refer to the entire argument tuple and its type by 944c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 'args' and 'args_type', and refer to the mock function type and its 945c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// return type by 'function_type' and 'return_type'. 946c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 947c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Note that you don't need to specify the types of the mock function 948c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// arguments. However rest assured that your code is still type-safe: 949c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// you'll get a compiler error if *arg1 doesn't support the ++ 950c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// operator, or if the type of ++(*arg1) isn't compatible with the 951c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// mock function's return type, for example. 952c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 953c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Sometimes you'll want to parameterize the action. For that you can use 954c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// another macro: 955c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 956c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ACTION_P(name, param_name) { statements; } 957c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 958c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// For example: 959c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 960c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ACTION_P(Add, n) { return arg0 + n; } 961c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 962c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// will allow you to write: 963c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 964c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ...WillOnce(Add(5)); 965c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 966c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Note that you don't need to provide the type of the parameter 967c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// either. If you need to reference the type of a parameter named 968c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 'foo', you can write 'foo_type'. For example, in the body of 969c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ACTION_P(Add, n) above, you can write 'n_type' to refer to the type 970c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// of 'n'. 971c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 972c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// We also provide ACTION_P2, ACTION_P3, ..., up to ACTION_P10 to support 973c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// multi-parameter actions. 974c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 975c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// For the purpose of typing, you can view 976c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 977c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ACTION_Pk(Foo, p1, ..., pk) { ... } 978c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 979c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// as shorthand for 980c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 981c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// template <typename p1_type, ..., typename pk_type> 982c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// FooActionPk<p1_type, ..., pk_type> Foo(p1_type p1, ..., pk_type pk) { ... } 983c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 984c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// In particular, you can provide the template type arguments 985c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// explicitly when invoking Foo(), as in Foo<long, bool>(5, false); 986c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// although usually you can rely on the compiler to infer the types 987c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// for you automatically. You can assign the result of expression 988c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Foo(p1, ..., pk) to a variable of type FooActionPk<p1_type, ..., 989c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// pk_type>. This can be useful when composing actions. 990c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 991c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// You can also overload actions with different numbers of parameters: 992c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 993c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ACTION_P(Plus, a) { ... } 994c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ACTION_P2(Plus, a, b) { ... } 995c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 996c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// While it's tempting to always use the ACTION* macros when defining 997c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// a new action, you should also consider implementing ActionInterface 998c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// or using MakePolymorphicAction() instead, especially if you need to 999c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// use the action a lot. While these approaches require more work, 1000c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// they give you more control on the types of the mock function 1001c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// arguments and the action parameters, which in general leads to 1002c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// better compiler error messages that pay off in the long run. They 1003c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// also allow overloading actions based on parameter types (as opposed 1004c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// to just based on the number of parameters). 1005c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1006c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CAVEAT: 1007c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1008c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ACTION*() can only be used in a namespace scope. The reason is 1009c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// that C++ doesn't yet allow function-local types to be used to 1010c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// instantiate templates. The up-coming C++0x standard will fix this. 1011c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Once that's done, we'll consider supporting using ACTION*() inside 1012c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// a function. 1013c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1014c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// MORE INFORMATION: 1015c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1016c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// To learn more about using these macros, please search for 'ACTION' 1017c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// on http://code.google.com/p/googlemock/wiki/CookBook. 1018c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1019c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// An internal macro needed for implementing ACTION*(). 1020c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_\ 1021c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const args_type& args GTEST_ATTRIBUTE_UNUSED_,\ 1022c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg0_type arg0 GTEST_ATTRIBUTE_UNUSED_,\ 1023c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg1_type arg1 GTEST_ATTRIBUTE_UNUSED_,\ 1024c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg2_type arg2 GTEST_ATTRIBUTE_UNUSED_,\ 1025c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg3_type arg3 GTEST_ATTRIBUTE_UNUSED_,\ 1026c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg4_type arg4 GTEST_ATTRIBUTE_UNUSED_,\ 1027c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg5_type arg5 GTEST_ATTRIBUTE_UNUSED_,\ 1028c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg6_type arg6 GTEST_ATTRIBUTE_UNUSED_,\ 1029c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg7_type arg7 GTEST_ATTRIBUTE_UNUSED_,\ 1030c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg8_type arg8 GTEST_ATTRIBUTE_UNUSED_,\ 1031c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg9_type arg9 GTEST_ATTRIBUTE_UNUSED_ 1032c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1033c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Sometimes you want to give an action explicit template parameters 1034c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// that cannot be inferred from its value parameters. ACTION() and 1035c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ACTION_P*() don't support that. ACTION_TEMPLATE() remedies that 1036c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// and can be viewed as an extension to ACTION() and ACTION_P*(). 1037c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1038c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The syntax: 1039c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1040c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ACTION_TEMPLATE(ActionName, 1041c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// HAS_m_TEMPLATE_PARAMS(kind1, name1, ..., kind_m, name_m), 1042c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// AND_n_VALUE_PARAMS(p1, ..., p_n)) { statements; } 1043c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1044c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// defines an action template that takes m explicit template 1045c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// parameters and n value parameters. name_i is the name of the i-th 1046c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// template parameter, and kind_i specifies whether it's a typename, 1047c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// an integral constant, or a template. p_i is the name of the i-th 1048c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// value parameter. 1049c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1050c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Example: 1051c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1052c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// // DuplicateArg<k, T>(output) converts the k-th argument of the mock 1053c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// // function to type T and copies it to *output. 1054c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ACTION_TEMPLATE(DuplicateArg, 1055c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// HAS_2_TEMPLATE_PARAMS(int, k, typename, T), 1056c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// AND_1_VALUE_PARAMS(output)) { 1057c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// *output = T(std::tr1::get<k>(args)); 1058c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// } 1059c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ... 1060c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// int n; 1061c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// EXPECT_CALL(mock, Foo(_, _)) 1062c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// .WillOnce(DuplicateArg<1, unsigned char>(&n)); 1063c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1064c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// To create an instance of an action template, write: 1065c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1066c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ActionName<t1, ..., t_m>(v1, ..., v_n) 1067c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1068c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// where the ts are the template arguments and the vs are the value 1069c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// arguments. The value argument types are inferred by the compiler. 1070c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// If you want to explicitly specify the value argument types, you can 1071c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// provide additional template arguments: 1072c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1073c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ActionName<t1, ..., t_m, u1, ..., u_k>(v1, ..., v_n) 1074c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1075c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// where u_i is the desired type of v_i. 1076c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1077c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ACTION_TEMPLATE and ACTION/ACTION_P* can be overloaded on the 1078c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// number of value parameters, but not on the number of template 1079c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// parameters. Without the restriction, the meaning of the following 1080c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// is unclear: 1081c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1082c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// OverloadedAction<int, bool>(x); 1083c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1084c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Are we using a single-template-parameter action where 'bool' refers 1085c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// to the type of x, or are we using a two-template-parameter action 1086c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// where the compiler is asked to infer the type of x? 1087c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1088c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Implementation notes: 1089c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1090c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// GMOCK_INTERNAL_*_HAS_m_TEMPLATE_PARAMS and 1091c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// GMOCK_INTERNAL_*_AND_n_VALUE_PARAMS are internal macros for 1092c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// implementing ACTION_TEMPLATE. The main trick we use is to create 1093c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// new macro invocations when expanding a macro. For example, we have 1094c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1095c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// #define ACTION_TEMPLATE(name, template_params, value_params) 1096c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ... GMOCK_INTERNAL_DECL_##template_params ... 1097c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1098c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// which causes ACTION_TEMPLATE(..., HAS_1_TEMPLATE_PARAMS(typename, T), ...) 1099c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// to expand to 1100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ... GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS(typename, T) ... 1102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Since GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS is a macro, the 1104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// preprocessor will continue to expand it to 1105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ... typename T ... 1107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This technique conforms to the C++ standard and is portable. It 1109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// allows us to implement action templates using O(N) code, where N is 1110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the maximum number of template/value parameters supported. Without 1111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// using it, we'd have to devote O(N^2) amount of code to implement all 1112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// combinations of m and n. 1113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Declares the template parameters. 1115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS(kind0, name0) kind0 name0 1116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, \ 1117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name1) kind0 name0, kind1 name1 1118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 1119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind2, name2) kind0 name0, kind1 name1, kind2 name2 1120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 1121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind2, name2, kind3, name3) kind0 name0, kind1 name1, kind2 name2, \ 1122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind3 name3 1123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_HAS_5_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 1124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind2, name2, kind3, name3, kind4, name4) kind0 name0, kind1 name1, \ 1125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind2 name2, kind3 name3, kind4 name4 1126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 1127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind2, name2, kind3, name3, kind4, name4, kind5, name5) kind0 name0, \ 1128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5 1129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_HAS_7_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 1130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ 1131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name6) kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, \ 1132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind5 name5, kind6 name6 1133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_HAS_8_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 1134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ 1135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind7, name7) kind0 name0, kind1 name1, kind2 name2, kind3 name3, \ 1136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind4 name4, kind5 name5, kind6 name6, kind7 name7 1137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_HAS_9_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 1138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ 1139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind7, name7, kind8, name8) kind0 name0, kind1 name1, kind2 name2, \ 1140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind3 name3, kind4 name4, kind5 name5, kind6 name6, kind7 name7, \ 1141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind8 name8 1142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_HAS_10_TEMPLATE_PARAMS(kind0, name0, kind1, \ 1143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name1, kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ 1144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name6, kind7, name7, kind8, name8, kind9, name9) kind0 name0, \ 1145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5, \ 1146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind6 name6, kind7 name7, kind8 name8, kind9 name9 1147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Lists the template parameters. 1149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_HAS_1_TEMPLATE_PARAMS(kind0, name0) name0 1150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, \ 1151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name1) name0, name1 1152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 1153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind2, name2) name0, name1, name2 1154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 1155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind2, name2, kind3, name3) name0, name1, name2, name3 1156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_HAS_5_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 1157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind2, name2, kind3, name3, kind4, name4) name0, name1, name2, name3, \ 1158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name4 1159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 1160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind2, name2, kind3, name3, kind4, name4, kind5, name5) name0, name1, \ 1161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name2, name3, name4, name5 1162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_HAS_7_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 1163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ 1164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name6) name0, name1, name2, name3, name4, name5, name6 1165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_HAS_8_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 1166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ 1167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind7, name7) name0, name1, name2, name3, name4, name5, name6, name7 1168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_HAS_9_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 1169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ 1170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kind7, name7, kind8, name8) name0, name1, name2, name3, name4, name5, \ 1171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name6, name7, name8 1172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_HAS_10_TEMPLATE_PARAMS(kind0, name0, kind1, \ 1173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name1, kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ 1174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name6, kind7, name7, kind8, name8, kind9, name9) name0, name1, name2, \ 1175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name3, name4, name5, name6, name7, name8, name9 1176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Declares the types of value parameters. 1178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_TYPE_AND_0_VALUE_PARAMS() 1179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_TYPE_AND_1_VALUE_PARAMS(p0) , typename p0##_type 1180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_TYPE_AND_2_VALUE_PARAMS(p0, p1) , \ 1181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p0##_type, typename p1##_type 1182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) , \ 1183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p0##_type, typename p1##_type, typename p2##_type 1184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) , \ 1185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p0##_type, typename p1##_type, typename p2##_type, \ 1186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type 1187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) , \ 1188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p0##_type, typename p1##_type, typename p2##_type, \ 1189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type 1190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) , \ 1191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p0##_type, typename p1##_type, typename p2##_type, \ 1192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type 1193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 1194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6) , typename p0##_type, typename p1##_type, typename p2##_type, \ 1195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type, \ 1196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p6##_type 1197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 1198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6, p7) , typename p0##_type, typename p1##_type, typename p2##_type, \ 1199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type, \ 1200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p6##_type, typename p7##_type 1201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 1202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6, p7, p8) , typename p0##_type, typename p1##_type, typename p2##_type, \ 1203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type, \ 1204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p6##_type, typename p7##_type, typename p8##_type 1205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 1206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6, p7, p8, p9) , typename p0##_type, typename p1##_type, \ 1207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p2##_type, typename p3##_type, typename p4##_type, \ 1208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p5##_type, typename p6##_type, typename p7##_type, \ 1209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p8##_type, typename p9##_type 1210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Initializes the value parameters. 1212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_INIT_AND_0_VALUE_PARAMS()\ 1213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch () 1214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_INIT_AND_1_VALUE_PARAMS(p0)\ 1215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (p0##_type gmock_p0) : p0(gmock_p0) 1216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_INIT_AND_2_VALUE_PARAMS(p0, p1)\ 1217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (p0##_type gmock_p0, p1##_type gmock_p1) : p0(gmock_p0), p1(gmock_p1) 1218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_INIT_AND_3_VALUE_PARAMS(p0, p1, p2)\ 1219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (p0##_type gmock_p0, p1##_type gmock_p1, \ 1220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type gmock_p2) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2) 1221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_INIT_AND_4_VALUE_PARAMS(p0, p1, p2, p3)\ 1222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 1223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type gmock_p3) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 1224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3(gmock_p3) 1225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_INIT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)\ 1226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 1227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type gmock_p3, p4##_type gmock_p4) : p0(gmock_p0), p1(gmock_p1), \ 1228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2(gmock_p2), p3(gmock_p3), p4(gmock_p4) 1229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_INIT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)\ 1230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 1231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type gmock_p3, p4##_type gmock_p4, \ 1232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type gmock_p5) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 1233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3(gmock_p3), p4(gmock_p4), p5(gmock_p5) 1234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_INIT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)\ 1235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 1236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 1237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type gmock_p6) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 1238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6) 1239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_INIT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)\ 1240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 1241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 1242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type gmock_p6, p7##_type gmock_p7) : p0(gmock_p0), p1(gmock_p1), \ 1243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ 1244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7(gmock_p7) 1245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_INIT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 1246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7, p8)\ 1247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 1248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 1249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type gmock_p6, p7##_type gmock_p7, \ 1250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p8##_type gmock_p8) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 1251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \ 1252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p8(gmock_p8) 1253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_INIT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 1254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7, p8, p9)\ 1255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 1256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 1257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \ 1258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p9##_type gmock_p9) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 1259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \ 1260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p8(gmock_p8), p9(gmock_p9) 1261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Declares the fields for storing the value parameters. 1263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DEFN_AND_0_VALUE_PARAMS() 1264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DEFN_AND_1_VALUE_PARAMS(p0) p0##_type p0; 1265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DEFN_AND_2_VALUE_PARAMS(p0, p1) p0##_type p0; \ 1266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1; 1267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DEFN_AND_3_VALUE_PARAMS(p0, p1, p2) p0##_type p0; \ 1268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1; p2##_type p2; 1269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DEFN_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0##_type p0; \ 1270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1; p2##_type p2; p3##_type p3; 1271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DEFN_AND_5_VALUE_PARAMS(p0, p1, p2, p3, \ 1272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; 1273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DEFN_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, \ 1274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \ 1275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type p5; 1276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DEFN_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 1277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \ 1278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type p5; p6##_type p6; 1279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DEFN_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 1280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \ 1281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type p5; p6##_type p6; p7##_type p7; 1282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DEFN_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 1283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7, p8) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; \ 1284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4; p5##_type p5; p6##_type p6; p7##_type p7; p8##_type p8; 1285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DEFN_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 1286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7, p8, p9) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; \ 1287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4; p5##_type p5; p6##_type p6; p7##_type p7; p8##_type p8; \ 1288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p9##_type p9; 1289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Lists the value parameters. 1291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_AND_0_VALUE_PARAMS() 1292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_AND_1_VALUE_PARAMS(p0) p0 1293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_AND_2_VALUE_PARAMS(p0, p1) p0, p1 1294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_AND_3_VALUE_PARAMS(p0, p1, p2) p0, p1, p2 1295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0, p1, p2, p3 1296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) p0, p1, \ 1297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2, p3, p4 1298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) p0, \ 1299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1, p2, p3, p4, p5 1300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 1301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6) p0, p1, p2, p3, p4, p5, p6 1302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 1303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7) p0, p1, p2, p3, p4, p5, p6, p7 1304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 1305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7, p8) p0, p1, p2, p3, p4, p5, p6, p7, p8 1306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 1307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7, p8, p9) p0, p1, p2, p3, p4, p5, p6, p7, p8, p9 1308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Lists the value parameter types. 1310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_TYPE_AND_0_VALUE_PARAMS() 1311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_TYPE_AND_1_VALUE_PARAMS(p0) , p0##_type 1312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_TYPE_AND_2_VALUE_PARAMS(p0, p1) , p0##_type, \ 1313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type 1314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) , p0##_type, \ 1315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type, p2##_type 1316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) , \ 1317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type, p1##_type, p2##_type, p3##_type 1318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) , \ 1319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type, p1##_type, p2##_type, p3##_type, p4##_type 1320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) , \ 1321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type 1322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 1323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, \ 1324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type 1325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 1326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6, p7) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 1327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type, p6##_type, p7##_type 1328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 1329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6, p7, p8) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 1330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type, p6##_type, p7##_type, p8##_type 1331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_LIST_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 1332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6, p7, p8, p9) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 1333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type, p6##_type, p7##_type, p8##_type, p9##_type 1334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Declares the value parameters. 1336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_AND_0_VALUE_PARAMS() 1337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_AND_1_VALUE_PARAMS(p0) p0##_type p0 1338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_AND_2_VALUE_PARAMS(p0, p1) p0##_type p0, \ 1339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1 1340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_AND_3_VALUE_PARAMS(p0, p1, p2) p0##_type p0, \ 1341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1, p2##_type p2 1342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0##_type p0, \ 1343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1, p2##_type p2, p3##_type p3 1344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_AND_5_VALUE_PARAMS(p0, p1, p2, p3, \ 1345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4 1346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, \ 1347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ 1348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type p5 1349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 1350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ 1351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type p5, p6##_type p6 1352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 1353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ 1354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type p5, p6##_type p6, p7##_type p7 1355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 1356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7, p8) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 1357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8 1358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_DECL_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 1359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7, p8, p9) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 1360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \ 1361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p9##_type p9 1362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The suffix of the class template implementing the action template. 1364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_COUNT_AND_0_VALUE_PARAMS() 1365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_COUNT_AND_1_VALUE_PARAMS(p0) P 1366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_COUNT_AND_2_VALUE_PARAMS(p0, p1) P2 1367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_COUNT_AND_3_VALUE_PARAMS(p0, p1, p2) P3 1368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_COUNT_AND_4_VALUE_PARAMS(p0, p1, p2, p3) P4 1369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_COUNT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) P5 1370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_COUNT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) P6 1371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_COUNT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6) P7 1372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_COUNT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 1373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7) P8 1374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_COUNT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 1375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7, p8) P9 1376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_INTERNAL_COUNT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 1377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7, p8, p9) P10 1378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The name of the class template implementing the action template. 1380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GMOCK_ACTION_CLASS_(name, value_params)\ 1381dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen GTEST_CONCAT_TOKEN_(name##Action, GMOCK_INTERNAL_COUNT_##value_params) 1382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define ACTION_TEMPLATE(name, template_params, value_params)\ 1384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <GMOCK_INTERNAL_DECL_##template_params\ 1385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_INTERNAL_DECL_TYPE_##value_params>\ 1386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class GMOCK_ACTION_CLASS_(name, value_params) {\ 1387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_ACTION_CLASS_(name, value_params)\ 1389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_INTERNAL_INIT_##value_params {}\ 1390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class gmock_Impl : public ::testing::ActionInterface<F> {\ 1392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef F function_type;\ 1394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::Result return_type;\ 1395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 1396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args_type;\ 1397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit gmock_Impl GMOCK_INTERNAL_INIT_##value_params {}\ 1398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual return_type Perform(const args_type& args) {\ 1399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 1400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Perform(this, args);\ 1401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 1407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 1408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 1409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg9_type arg9) const;\ 1410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_INTERNAL_DEFN_##value_params\ 1411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F> operator ::testing::Action<F>() const {\ 1415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::Action<F>(\ 1416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new gmock_Impl<F>(GMOCK_INTERNAL_LIST_##value_params));\ 1417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_INTERNAL_DEFN_##value_params\ 1419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(GMOCK_ACTION_CLASS_(name, value_params));\ 1421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <GMOCK_INTERNAL_DECL_##template_params\ 1423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_INTERNAL_DECL_TYPE_##value_params>\ 1424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch inline GMOCK_ACTION_CLASS_(name, value_params)<\ 1425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_INTERNAL_LIST_##template_params\ 1426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_INTERNAL_LIST_TYPE_##value_params> name(\ 1427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_INTERNAL_DECL_##value_params) {\ 1428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GMOCK_ACTION_CLASS_(name, value_params)<\ 1429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_INTERNAL_LIST_##template_params\ 1430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_INTERNAL_LIST_TYPE_##value_params>(\ 1431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_INTERNAL_LIST_##value_params);\ 1432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <GMOCK_INTERNAL_DECL_##template_params\ 1434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_INTERNAL_DECL_TYPE_##value_params>\ 1435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type,\ 1437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type,\ 1438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type,\ 1439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename ::testing::internal::Function<F>::Result\ 1441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_ACTION_CLASS_(name, value_params)<\ 1442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_INTERNAL_LIST_##template_params\ 1443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_INTERNAL_LIST_TYPE_##value_params>::gmock_Impl<F>::\ 1444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_PerformImpl(\ 1445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 1446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define ACTION(name)\ 1448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class name##Action {\ 1449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##Action() {}\ 1451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class gmock_Impl : public ::testing::ActionInterface<F> {\ 1453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef F function_type;\ 1455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::Result return_type;\ 1456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 1457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args_type;\ 1458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_Impl() {}\ 1459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual return_type Perform(const args_type& args) {\ 1460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 1461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Perform(this, args);\ 1462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 1468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 1469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 1470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg9_type arg9) const;\ 1471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F> operator ::testing::Action<F>() const {\ 1475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::Action<F>(new gmock_Impl<F>());\ 1476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(name##Action);\ 1479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch inline name##Action name() {\ 1481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return name##Action();\ 1482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename ::testing::internal::Function<F>::Result\ 1489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##Action::gmock_Impl<F>::gmock_PerformImpl(\ 1490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 1491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1492c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define ACTION_P(name, p0)\ 1493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type>\ 1494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class name##ActionP {\ 1495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP(p0##_type gmock_p0) : p0(gmock_p0) {}\ 1497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class gmock_Impl : public ::testing::ActionInterface<F> {\ 1499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef F function_type;\ 1501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::Result return_type;\ 1502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 1503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args_type;\ 1504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit gmock_Impl(p0##_type gmock_p0) : p0(gmock_p0) {}\ 1505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual return_type Perform(const args_type& args) {\ 1506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 1507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Perform(this, args);\ 1508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 1514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 1515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 1516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg9_type arg9) const;\ 1517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 1518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1519c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1521c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F> operator ::testing::Action<F>() const {\ 1522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::Action<F>(new gmock_Impl<F>(p0));\ 1523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1524c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 1525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(name##ActionP);\ 1527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type>\ 1529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch inline name##ActionP<p0##_type> name(p0##_type p0) {\ 1530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return name##ActionP<p0##_type>(p0);\ 1531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type>\ 1533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename ::testing::internal::Function<F>::Result\ 1539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP<p0##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 1540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 1541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1542c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define ACTION_P2(name, p0, p1)\ 1543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type>\ 1544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class name##ActionP2 {\ 1545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP2(p0##_type gmock_p0, p1##_type gmock_p1) : p0(gmock_p0), \ 1547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1(gmock_p1) {}\ 1548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class gmock_Impl : public ::testing::ActionInterface<F> {\ 1550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef F function_type;\ 1552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::Result return_type;\ 1553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 1554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args_type;\ 1555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1) : p0(gmock_p0), \ 1556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1(gmock_p1) {}\ 1557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual return_type Perform(const args_type& args) {\ 1558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 1559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Perform(this, args);\ 1560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1562c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1563c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1564c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 1566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 1567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 1568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg9_type arg9) const;\ 1569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 1570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 1571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1572c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1573c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F> operator ::testing::Action<F>() const {\ 1575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::Action<F>(new gmock_Impl<F>(p0, p1));\ 1576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1577c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 1578c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 1579c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1580c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(name##ActionP2);\ 1581c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1582c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type>\ 1583c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch inline name##ActionP2<p0##_type, p1##_type> name(p0##_type p0, \ 1584c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1) {\ 1585c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return name##ActionP2<p0##_type, p1##_type>(p0, p1);\ 1586c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1587c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type>\ 1588c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1589c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1590c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1591c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1592c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1593c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename ::testing::internal::Function<F>::Result\ 1594c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP2<p0##_type, p1##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 1595c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 1596c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1597c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define ACTION_P3(name, p0, p1, p2)\ 1598c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type>\ 1599c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class name##ActionP3 {\ 1600c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP3(p0##_type gmock_p0, p1##_type gmock_p1, \ 1602c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type gmock_p2) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2) {}\ 1603c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1604c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class gmock_Impl : public ::testing::ActionInterface<F> {\ 1605c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1606c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef F function_type;\ 1607c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::Result return_type;\ 1608c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 1609c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args_type;\ 1610c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, \ 1611c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type gmock_p2) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2) {}\ 1612c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual return_type Perform(const args_type& args) {\ 1613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 1614c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Perform(this, args);\ 1615c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1616c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1617c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1618c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1619c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1620c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 1621c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 1622c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 1623c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg9_type arg9) const;\ 1624c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 1625c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 1626c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type p2;\ 1627c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1628c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1629c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1630c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F> operator ::testing::Action<F>() const {\ 1631c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2));\ 1632c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1633c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 1634c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 1635c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type p2;\ 1636c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1637c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(name##ActionP3);\ 1638c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1639c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type>\ 1640c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch inline name##ActionP3<p0##_type, p1##_type, p2##_type> name(p0##_type p0, \ 1641c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1, p2##_type p2) {\ 1642c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return name##ActionP3<p0##_type, p1##_type, p2##_type>(p0, p1, p2);\ 1643c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1644c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type>\ 1645c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1646c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1647c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1648c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1649c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1650c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename ::testing::internal::Function<F>::Result\ 1651c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP3<p0##_type, p1##_type, \ 1652c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 1653c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 1654c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1655c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define ACTION_P4(name, p0, p1, p2, p3)\ 1656c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1657c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type>\ 1658c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class name##ActionP4 {\ 1659c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1660c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP4(p0##_type gmock_p0, p1##_type gmock_p1, \ 1661c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type gmock_p2, p3##_type gmock_p3) : p0(gmock_p0), p1(gmock_p1), \ 1662c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2(gmock_p2), p3(gmock_p3) {}\ 1663c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1664c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class gmock_Impl : public ::testing::ActionInterface<F> {\ 1665c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1666c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef F function_type;\ 1667c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::Result return_type;\ 1668c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 1669c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args_type;\ 1670c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 1671c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type gmock_p3) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 1672c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3(gmock_p3) {}\ 1673c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual return_type Perform(const args_type& args) {\ 1674c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 1675c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Perform(this, args);\ 1676c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1677c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1678c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1679c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1680c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1681c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 1682c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 1683c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 1684c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg9_type arg9) const;\ 1685c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 1686c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 1687c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type p2;\ 1688c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type p3;\ 1689c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1690c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1691c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1692c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F> operator ::testing::Action<F>() const {\ 1693c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3));\ 1694c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1695c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 1696c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 1697c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type p2;\ 1698c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type p3;\ 1699c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1700c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(name##ActionP4);\ 1701c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1702c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1703c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type>\ 1704c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch inline name##ActionP4<p0##_type, p1##_type, p2##_type, \ 1705c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \ 1706c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type p3) {\ 1707c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return name##ActionP4<p0##_type, p1##_type, p2##_type, p3##_type>(p0, p1, \ 1708c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2, p3);\ 1709c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1710c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1711c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type>\ 1712c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1713c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1714c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1715c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1716c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1717c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename ::testing::internal::Function<F>::Result\ 1718c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP4<p0##_type, p1##_type, p2##_type, \ 1719c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 1720c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 1721c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1722c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define ACTION_P5(name, p0, p1, p2, p3, p4)\ 1723c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1724c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type>\ 1725c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class name##ActionP5 {\ 1726c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1727c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP5(p0##_type gmock_p0, p1##_type gmock_p1, \ 1728c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type gmock_p2, p3##_type gmock_p3, \ 1729c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type gmock_p4) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 1730c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3(gmock_p3), p4(gmock_p4) {}\ 1731c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1732c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class gmock_Impl : public ::testing::ActionInterface<F> {\ 1733c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1734c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef F function_type;\ 1735c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::Result return_type;\ 1736c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 1737c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args_type;\ 1738c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 1739c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type gmock_p3, p4##_type gmock_p4) : p0(gmock_p0), \ 1740c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), p4(gmock_p4) {}\ 1741c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual return_type Perform(const args_type& args) {\ 1742c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 1743c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Perform(this, args);\ 1744c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1745c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1746c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1747c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1748c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1749c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 1750c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 1751c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 1752c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg9_type arg9) const;\ 1753c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 1754c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 1755c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type p2;\ 1756c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type p3;\ 1757c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4;\ 1758c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1759c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1760c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1761c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F> operator ::testing::Action<F>() const {\ 1762c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4));\ 1763c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1764c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 1765c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 1766c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type p2;\ 1767c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type p3;\ 1768c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4;\ 1769c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1770c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(name##ActionP5);\ 1771c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1772c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1773c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type>\ 1774c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch inline name##ActionP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 1775c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 1776c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4) {\ 1777c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return name##ActionP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 1778c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type>(p0, p1, p2, p3, p4);\ 1779c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1780c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1781c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type>\ 1782c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1783c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1784c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1785c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1786c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1787c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename ::testing::internal::Function<F>::Result\ 1788c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 1789c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 1790c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 1791c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1792c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define ACTION_P6(name, p0, p1, p2, p3, p4, p5)\ 1793c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1794c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type>\ 1795c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class name##ActionP6 {\ 1796c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1797c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP6(p0##_type gmock_p0, p1##_type gmock_p1, \ 1798c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 1799c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type gmock_p5) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 1800c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3(gmock_p3), p4(gmock_p4), p5(gmock_p5) {}\ 1801c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1802c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class gmock_Impl : public ::testing::ActionInterface<F> {\ 1803c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1804c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef F function_type;\ 1805c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::Result return_type;\ 1806c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 1807c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args_type;\ 1808c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 1809c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type gmock_p3, p4##_type gmock_p4, \ 1810c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type gmock_p5) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 1811c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3(gmock_p3), p4(gmock_p4), p5(gmock_p5) {}\ 1812c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual return_type Perform(const args_type& args) {\ 1813c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 1814c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Perform(this, args);\ 1815c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1816c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1817c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1818c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1819c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1820c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 1821c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 1822c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 1823c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg9_type arg9) const;\ 1824c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 1825c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 1826c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type p2;\ 1827c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type p3;\ 1828c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4;\ 1829c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type p5;\ 1830c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1831c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1832c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1833c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F> operator ::testing::Action<F>() const {\ 1834c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5));\ 1835c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1836c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 1837c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 1838c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type p2;\ 1839c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type p3;\ 1840c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4;\ 1841c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type p5;\ 1842c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1843c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(name##ActionP6);\ 1844c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1845c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1846c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type>\ 1847c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch inline name##ActionP6<p0##_type, p1##_type, p2##_type, p3##_type, \ 1848c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type, p5##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \ 1849c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type p3, p4##_type p4, p5##_type p5) {\ 1850c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return name##ActionP6<p0##_type, p1##_type, p2##_type, p3##_type, \ 1851c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type, p5##_type>(p0, p1, p2, p3, p4, p5);\ 1852c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1853c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1854c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type>\ 1855c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1856c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1857c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1858c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1859c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1860c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename ::testing::internal::Function<F>::Result\ 1861c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP6<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 1862c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 1863c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 1864c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1865c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define ACTION_P7(name, p0, p1, p2, p3, p4, p5, p6)\ 1866c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1867c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type, \ 1868c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p6##_type>\ 1869c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class name##ActionP7 {\ 1870c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1871c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP7(p0##_type gmock_p0, p1##_type gmock_p1, \ 1872c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 1873c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type gmock_p5, p6##_type gmock_p6) : p0(gmock_p0), p1(gmock_p1), \ 1874c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), \ 1875c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6(gmock_p6) {}\ 1876c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1877c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class gmock_Impl : public ::testing::ActionInterface<F> {\ 1878c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1879c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef F function_type;\ 1880c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::Result return_type;\ 1881c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 1882c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args_type;\ 1883c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 1884c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 1885c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type gmock_p6) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 1886c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6) {}\ 1887c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual return_type Perform(const args_type& args) {\ 1888c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 1889c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Perform(this, args);\ 1890c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1891c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1892c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1893c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1894c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1895c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 1896c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 1897c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 1898c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg9_type arg9) const;\ 1899c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 1900c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 1901c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type p2;\ 1902c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type p3;\ 1903c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4;\ 1904c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type p5;\ 1905c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type p6;\ 1906c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1907c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1908c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1909c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F> operator ::testing::Action<F>() const {\ 1910c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \ 1911c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6));\ 1912c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1913c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 1914c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 1915c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type p2;\ 1916c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type p3;\ 1917c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4;\ 1918c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type p5;\ 1919c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type p6;\ 1920c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1921c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(name##ActionP7);\ 1922c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1923c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1924c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type, \ 1925c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p6##_type>\ 1926c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch inline name##ActionP7<p0##_type, p1##_type, p2##_type, p3##_type, \ 1927c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type, p5##_type, p6##_type> name(p0##_type p0, p1##_type p1, \ 1928c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ 1929c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type p6) {\ 1930c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return name##ActionP7<p0##_type, p1##_type, p2##_type, p3##_type, \ 1931c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type, p5##_type, p6##_type>(p0, p1, p2, p3, p4, p5, p6);\ 1932c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1933c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1934c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type, \ 1935c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p6##_type>\ 1936c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1937c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1938c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1939c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1940c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1941c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename ::testing::internal::Function<F>::Result\ 1942c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP7<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 1943c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type, p6##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 1944c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 1945c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1946c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define ACTION_P8(name, p0, p1, p2, p3, p4, p5, p6, p7)\ 1947c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1948c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type, \ 1949c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p6##_type, typename p7##_type>\ 1950c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class name##ActionP8 {\ 1951c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1952c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP8(p0##_type gmock_p0, p1##_type gmock_p1, \ 1953c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 1954c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type gmock_p5, p6##_type gmock_p6, \ 1955c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7##_type gmock_p7) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 1956c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ 1957c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7(gmock_p7) {}\ 1958c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 1959c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class gmock_Impl : public ::testing::ActionInterface<F> {\ 1960c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 1961c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef F function_type;\ 1962c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::Result return_type;\ 1963c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 1964c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args_type;\ 1965c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 1966c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 1967c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type gmock_p6, p7##_type gmock_p7) : p0(gmock_p0), \ 1968c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), \ 1969c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5(gmock_p5), p6(gmock_p6), p7(gmock_p7) {}\ 1970c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual return_type Perform(const args_type& args) {\ 1971c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 1972c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Perform(this, args);\ 1973c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1974c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 1975c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 1976c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 1977c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 1978c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 1979c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 1980c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 1981c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg9_type arg9) const;\ 1982c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 1983c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 1984c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type p2;\ 1985c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type p3;\ 1986c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4;\ 1987c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type p5;\ 1988c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type p6;\ 1989c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7##_type p7;\ 1990c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 1991c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1992c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 1993c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F> operator ::testing::Action<F>() const {\ 1994c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \ 1995c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6, p7));\ 1996c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 1997c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 1998c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 1999c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type p2;\ 2000c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type p3;\ 2001c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4;\ 2002c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type p5;\ 2003c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type p6;\ 2004c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7##_type p7;\ 2005c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 2006c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(name##ActionP8);\ 2007c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 2008c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 2009c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type, \ 2010c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p6##_type, typename p7##_type>\ 2011c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch inline name##ActionP8<p0##_type, p1##_type, p2##_type, p3##_type, \ 2012c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type, p5##_type, p6##_type, p7##_type> name(p0##_type p0, \ 2013c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ 2014c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type p6, p7##_type p7) {\ 2015c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return name##ActionP8<p0##_type, p1##_type, p2##_type, p3##_type, \ 2016c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type, p5##_type, p6##_type, p7##_type>(p0, p1, p2, p3, p4, p5, \ 2017c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6, p7);\ 2018c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 2019c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 2020c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type, \ 2021c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p6##_type, typename p7##_type>\ 2022c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 2023c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 2024c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 2025c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 2026c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 2027c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename ::testing::internal::Function<F>::Result\ 2028c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP8<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 2029c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type, p6##_type, \ 2030c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 2031c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 2032c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2033c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define ACTION_P9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8)\ 2034c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 2035c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type, \ 2036c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p6##_type, typename p7##_type, typename p8##_type>\ 2037c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class name##ActionP9 {\ 2038c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 2039c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP9(p0##_type gmock_p0, p1##_type gmock_p1, \ 2040c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 2041c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ 2042c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p8##_type gmock_p8) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 2043c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \ 2044c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p8(gmock_p8) {}\ 2045c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 2046c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class gmock_Impl : public ::testing::ActionInterface<F> {\ 2047c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 2048c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef F function_type;\ 2049c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::Result return_type;\ 2050c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 2051c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args_type;\ 2052c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 2053c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 2054c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type gmock_p6, p7##_type gmock_p7, \ 2055c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p8##_type gmock_p8) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 2056c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ 2057c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7(gmock_p7), p8(gmock_p8) {}\ 2058c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual return_type Perform(const args_type& args) {\ 2059c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 2060c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Perform(this, args);\ 2061c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 2062c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 2063c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 2064c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 2065c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 2066c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 2067c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 2068c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 2069c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg9_type arg9) const;\ 2070c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 2071c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 2072c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type p2;\ 2073c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type p3;\ 2074c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4;\ 2075c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type p5;\ 2076c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type p6;\ 2077c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7##_type p7;\ 2078c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p8##_type p8;\ 2079c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 2080c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 2081c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 2082c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F> operator ::testing::Action<F>() const {\ 2083c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \ 2084c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6, p7, p8));\ 2085c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 2086c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 2087c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 2088c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type p2;\ 2089c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type p3;\ 2090c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4;\ 2091c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type p5;\ 2092c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type p6;\ 2093c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7##_type p7;\ 2094c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p8##_type p8;\ 2095c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 2096c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(name##ActionP9);\ 2097c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 2098c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 2099c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type, \ 2100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p6##_type, typename p7##_type, typename p8##_type>\ 2101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch inline name##ActionP9<p0##_type, p1##_type, p2##_type, p3##_type, \ 2102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type, p5##_type, p6##_type, p7##_type, \ 2103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p8##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 2104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, \ 2105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p8##_type p8) {\ 2106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return name##ActionP9<p0##_type, p1##_type, p2##_type, p3##_type, \ 2107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type, p5##_type, p6##_type, p7##_type, p8##_type>(p0, p1, p2, \ 2108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3, p4, p5, p6, p7, p8);\ 2109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 2110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 2111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type, \ 2112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p6##_type, typename p7##_type, typename p8##_type>\ 2113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 2114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 2115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 2116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 2117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 2118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename ::testing::internal::Function<F>::Result\ 2119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP9<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 2120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type, p6##_type, p7##_type, \ 2121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p8##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 2122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 2123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define ACTION_P10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)\ 2125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 2126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type, \ 2127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p6##_type, typename p7##_type, typename p8##_type, \ 2128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p9##_type>\ 2129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class name##ActionP10 {\ 2130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 2131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP10(p0##_type gmock_p0, p1##_type gmock_p1, \ 2132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 2133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ 2134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p8##_type gmock_p8, p9##_type gmock_p9) : p0(gmock_p0), p1(gmock_p1), \ 2135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ 2136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7(gmock_p7), p8(gmock_p8), p9(gmock_p9) {}\ 2137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 2138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class gmock_Impl : public ::testing::ActionInterface<F> {\ 2139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:\ 2140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef F function_type;\ 2141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::Result return_type;\ 2142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef typename ::testing::internal::Function<F>::ArgumentTuple\ 2143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args_type;\ 2144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 2145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 2146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \ 2147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p9##_type gmock_p9) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 2148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ 2149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7(gmock_p7), p8(gmock_p8), p9(gmock_p9) {}\ 2150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual return_type Perform(const args_type& args) {\ 2151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ 2152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Perform(this, args);\ 2153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 2154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 2155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 2156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 2157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 2158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ 2159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ 2160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ 2161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arg9_type arg9) const;\ 2162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 2163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 2164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type p2;\ 2165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type p3;\ 2166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4;\ 2167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type p5;\ 2168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type p6;\ 2169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7##_type p7;\ 2170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p8##_type p8;\ 2171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p9##_type p9;\ 2172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 2173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 2174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 2175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F> operator ::testing::Action<F>() const {\ 2176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \ 2177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6, p7, p8, p9));\ 2178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 2179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p0##_type p0;\ 2180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1##_type p1;\ 2181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p2##_type p2;\ 2182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p3##_type p3;\ 2183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4;\ 2184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type p5;\ 2185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p6##_type p6;\ 2186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p7##_type p7;\ 2187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p8##_type p8;\ 2188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p9##_type p9;\ 2189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:\ 2190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_DISALLOW_ASSIGN_(name##ActionP10);\ 2191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch };\ 2192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 2193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type, \ 2194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p6##_type, typename p7##_type, typename p8##_type, \ 2195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p9##_type>\ 2196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch inline name##ActionP10<p0##_type, p1##_type, p2##_type, p3##_type, \ 2197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \ 2198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p9##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 2199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \ 2200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p9##_type p9) {\ 2201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return name##ActionP10<p0##_type, p1##_type, p2##_type, p3##_type, \ 2202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, p9##_type>(p0, \ 2203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p1, p2, p3, p4, p5, p6, p7, p8, p9);\ 2204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }\ 2205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename p0##_type, typename p1##_type, typename p2##_type, \ 2206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p3##_type, typename p4##_type, typename p5##_type, \ 2207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p6##_type, typename p7##_type, typename p8##_type, \ 2208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename p9##_type>\ 2209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename F>\ 2210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch template <typename arg0_type, typename arg1_type, typename arg2_type, \ 2211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg3_type, typename arg4_type, typename arg5_type, \ 2212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg6_type, typename arg7_type, typename arg8_type, \ 2213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename arg9_type>\ 2214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typename ::testing::internal::Function<F>::Result\ 2215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name##ActionP10<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 2216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p5##_type, p6##_type, p7##_type, p8##_type, \ 2217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p9##_type>::gmock_Impl<F>::gmock_PerformImpl(\ 2218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const 2219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TODO(wan@google.com): move the following to a different .h file 2221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// such that we don't have to run 'pump' every time the code is 2222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// updated. 2223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace testing { 2224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The ACTION*() macros trigger warning C4100 (unreferenced formal 2226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// parameter) in MSVC with -W4. Unfortunately they cannot be fixed in 2227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the macro definition, as the warnings are generated when the macro 2228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// is expanded and macro expansion cannot contain #pragma. Therefore 2229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// we suppress them here. 2230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef _MSC_VER 2231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen# pragma warning(push) 2232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen# pragma warning(disable:4100) 2233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 2234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Various overloads for InvokeArgument<N>(). 2236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The InvokeArgument<N>(a1, a2, ..., a_k) action invokes the N-th 2238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// (0-based) argument, which must be a k-ary callable, of the mock 2239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// function, with arguments a1, a2, ..., a_k. 2240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Notes: 2242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1. The arguments are passed by value by default. If you need to 2244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// pass an argument by reference, wrap it inside ByRef(). For 2245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// example, 2246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// InvokeArgument<1>(5, string("Hello"), ByRef(foo)) 2248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// passes 5 and string("Hello") by value, and passes foo by 2250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// reference. 2251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2. If the callable takes an argument by reference but ByRef() is 2253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// not used, it will receive the reference to a copy of the value, 2254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// instead of the original value. For example, when the 0-th 2255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// argument of the mock function takes a const string&, the action 2256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// InvokeArgument<0>(string("Hello")) 2258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// makes a copy of the temporary string("Hello") object and passes a 2260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// reference of the copy, instead of the original temporary object, 2261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// to the callable. This makes it easy for a user to define an 2262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// InvokeArgument action from temporary values and have it performed 2263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// later. 2264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2265c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(InvokeArgument, 2266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(int, k), 2267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_0_VALUE_PARAMS()) { 2268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::CallableHelper<return_type>::Call( 2269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ::std::tr1::get<k>(args)); 2270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2272c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(InvokeArgument, 2273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(int, k), 2274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_1_VALUE_PARAMS(p0)) { 2275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::CallableHelper<return_type>::Call( 2276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ::std::tr1::get<k>(args), p0); 2277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2279c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(InvokeArgument, 2280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(int, k), 2281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_2_VALUE_PARAMS(p0, p1)) { 2282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::CallableHelper<return_type>::Call( 2283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ::std::tr1::get<k>(args), p0, p1); 2284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2286c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(InvokeArgument, 2287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(int, k), 2288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_3_VALUE_PARAMS(p0, p1, p2)) { 2289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::CallableHelper<return_type>::Call( 2290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ::std::tr1::get<k>(args), p0, p1, p2); 2291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2293c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(InvokeArgument, 2294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(int, k), 2295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_4_VALUE_PARAMS(p0, p1, p2, p3)) { 2296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::CallableHelper<return_type>::Call( 2297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ::std::tr1::get<k>(args), p0, p1, p2, p3); 2298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2300c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(InvokeArgument, 2301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(int, k), 2302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)) { 2303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::CallableHelper<return_type>::Call( 2304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ::std::tr1::get<k>(args), p0, p1, p2, p3, p4); 2305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2307c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(InvokeArgument, 2308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(int, k), 2309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)) { 2310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::CallableHelper<return_type>::Call( 2311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ::std::tr1::get<k>(args), p0, p1, p2, p3, p4, p5); 2312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2314c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(InvokeArgument, 2315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(int, k), 2316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)) { 2317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::CallableHelper<return_type>::Call( 2318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ::std::tr1::get<k>(args), p0, p1, p2, p3, p4, p5, p6); 2319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2321c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(InvokeArgument, 2322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(int, k), 2323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)) { 2324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::CallableHelper<return_type>::Call( 2325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ::std::tr1::get<k>(args), p0, p1, p2, p3, p4, p5, p6, p7); 2326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2328c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(InvokeArgument, 2329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(int, k), 2330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8)) { 2331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::CallableHelper<return_type>::Call( 2332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ::std::tr1::get<k>(args), p0, p1, p2, p3, p4, p5, p6, p7, p8); 2333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2335c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(InvokeArgument, 2336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(int, k), 2337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) { 2338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return internal::CallableHelper<return_type>::Call( 2339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ::std::tr1::get<k>(args), p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); 2340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Various overloads for ReturnNew<T>(). 2343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The ReturnNew<T>(a1, a2, ..., a_k) action returns a pointer to a new 2345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// instance of type T, constructed on the heap with constructor arguments 2346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// a1, a2, ..., and a_k. The caller assumes ownership of the returned value. 2347c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(ReturnNew, 2348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(typename, T), 2349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_0_VALUE_PARAMS()) { 2350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return new T(); 2351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2353c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(ReturnNew, 2354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(typename, T), 2355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_1_VALUE_PARAMS(p0)) { 2356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return new T(p0); 2357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2359c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(ReturnNew, 2360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(typename, T), 2361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_2_VALUE_PARAMS(p0, p1)) { 2362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return new T(p0, p1); 2363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2365c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(ReturnNew, 2366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(typename, T), 2367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_3_VALUE_PARAMS(p0, p1, p2)) { 2368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return new T(p0, p1, p2); 2369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2371c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(ReturnNew, 2372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(typename, T), 2373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_4_VALUE_PARAMS(p0, p1, p2, p3)) { 2374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return new T(p0, p1, p2, p3); 2375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2377c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(ReturnNew, 2378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(typename, T), 2379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)) { 2380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return new T(p0, p1, p2, p3, p4); 2381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2383c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(ReturnNew, 2384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(typename, T), 2385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)) { 2386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return new T(p0, p1, p2, p3, p4, p5); 2387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2389c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(ReturnNew, 2390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(typename, T), 2391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)) { 2392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return new T(p0, p1, p2, p3, p4, p5, p6); 2393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2395c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(ReturnNew, 2396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(typename, T), 2397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)) { 2398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return new T(p0, p1, p2, p3, p4, p5, p6, p7); 2399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2401c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(ReturnNew, 2402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(typename, T), 2403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8)) { 2404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return new T(p0, p1, p2, p3, p4, p5, p6, p7, p8); 2405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2407c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION_TEMPLATE(ReturnNew, 2408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HAS_1_TEMPLATE_PARAMS(typename, T), 2409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) { 2410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return new T(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); 2411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 2412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef _MSC_VER 2414ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen# pragma warning(pop) 2415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 2416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace testing 2418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ 2420