146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// This file was GENERATED by command: 246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// pump.py gmock-generated-matchers.h.pump 346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// DO NOT EDIT BY HAND!!! 4dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 5dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Copyright 2008, Google Inc. 6dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// All rights reserved. 7dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 8dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Redistribution and use in source and binary forms, with or without 9dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// modification, are permitted provided that the following conditions are 10dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// met: 11dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 12dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// * Redistributions of source code must retain the above copyright 13dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// notice, this list of conditions and the following disclaimer. 14dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// * Redistributions in binary form must reproduce the above 15dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// copyright notice, this list of conditions and the following disclaimer 16dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// in the documentation and/or other materials provided with the 17dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// distribution. 18dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// * Neither the name of Google Inc. nor the names of its 19dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// contributors may be used to endorse or promote products derived from 20dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// this software without specific prior written permission. 21dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 22dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 23dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 24dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 25dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 26dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 27dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 28dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 29dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 30dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 31dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 32dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 34dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Google Mock - a framework for writing C++ mock classes. 35dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 36dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// This file implements some commonly used variadic matchers. 37dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 38dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_ 39dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_ 40dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 41dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#include <sstream> 42dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#include <string> 43dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#include <vector> 4446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#include "gmock/gmock-matchers.h" 45dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 46dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixternamespace testing { 47dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixternamespace internal { 48dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 49dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// The type of the i-th (0-based) field of Tuple. 50dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GMOCK_FIELD_TYPE_(Tuple, i) \ 51dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename ::std::tr1::tuple_element<i, Tuple>::type 52dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 53dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// TupleFields<Tuple, k0, ..., kn> is for selecting fields from a 54dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// tuple of type Tuple. It has two members: 55dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 56dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// type: a tuple type whose i-th field is the ki-th field of Tuple. 57dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// GetSelectedFields(t): returns fields k0, ..., and kn of t as a tuple. 58dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 59dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// For example, in class TupleFields<tuple<bool, char, int>, 2, 0>, we have: 60dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 61dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// type is tuple<int, bool>, and 62dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// GetSelectedFields(make_tuple(true, 'a', 42)) is (42, true). 63dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 64dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <class Tuple, int k0 = -1, int k1 = -1, int k2 = -1, int k3 = -1, 65dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int k4 = -1, int k5 = -1, int k6 = -1, int k7 = -1, int k8 = -1, 66dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int k9 = -1> 67dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass TupleFields; 68dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 69dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// This generic version is used when there are 10 selectors. 70dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <class Tuple, int k0, int k1, int k2, int k3, int k4, int k5, int k6, 71dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int k7, int k8, int k9> 72dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass TupleFields { 73dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 74dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 75dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2), 76dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4), 77dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k5), GMOCK_FIELD_TYPE_(Tuple, k6), 78dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k7), GMOCK_FIELD_TYPE_(Tuple, k8), 79dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k9)> type; 80dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter static type GetSelectedFields(const Tuple& t) { 81dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter using ::std::tr1::get; 82dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t), 83dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter get<k5>(t), get<k6>(t), get<k7>(t), get<k8>(t), get<k9>(t)); 84dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 85dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 86dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 87dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// The following specialization is used for 0 ~ 9 selectors. 88dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 89dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <class Tuple> 90dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass TupleFields<Tuple, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1> { 91dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 92dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef ::std::tr1::tuple<> type; 9346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan static type GetSelectedFields(const Tuple& /* t */) { 94dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter using ::std::tr1::get; 95dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return type(); 96dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 97dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 98dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 99dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <class Tuple, int k0> 100dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass TupleFields<Tuple, k0, -1, -1, -1, -1, -1, -1, -1, -1, -1> { 101dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 102dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0)> type; 103dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter static type GetSelectedFields(const Tuple& t) { 104dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter using ::std::tr1::get; 105dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return type(get<k0>(t)); 106dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 107dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 108dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 109dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <class Tuple, int k0, int k1> 110dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass TupleFields<Tuple, k0, k1, -1, -1, -1, -1, -1, -1, -1, -1> { 111dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 112dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 113dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k1)> type; 114dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter static type GetSelectedFields(const Tuple& t) { 115dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter using ::std::tr1::get; 116dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return type(get<k0>(t), get<k1>(t)); 117dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 118dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 119dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 120dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <class Tuple, int k0, int k1, int k2> 121dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass TupleFields<Tuple, k0, k1, k2, -1, -1, -1, -1, -1, -1, -1> { 122dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 123dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 124dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2)> type; 125dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter static type GetSelectedFields(const Tuple& t) { 126dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter using ::std::tr1::get; 127dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return type(get<k0>(t), get<k1>(t), get<k2>(t)); 128dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 129dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 130dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 131dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <class Tuple, int k0, int k1, int k2, int k3> 132dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass TupleFields<Tuple, k0, k1, k2, k3, -1, -1, -1, -1, -1, -1> { 133dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 134dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 135dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2), 136dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k3)> type; 137dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter static type GetSelectedFields(const Tuple& t) { 138dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter using ::std::tr1::get; 139dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t)); 140dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 141dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 142dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 143dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <class Tuple, int k0, int k1, int k2, int k3, int k4> 144dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass TupleFields<Tuple, k0, k1, k2, k3, k4, -1, -1, -1, -1, -1> { 145dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 146dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 147dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2), 148dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4)> type; 149dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter static type GetSelectedFields(const Tuple& t) { 150dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter using ::std::tr1::get; 151dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t)); 152dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 153dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 154dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 155dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <class Tuple, int k0, int k1, int k2, int k3, int k4, int k5> 156dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass TupleFields<Tuple, k0, k1, k2, k3, k4, k5, -1, -1, -1, -1> { 157dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 158dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 159dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2), 160dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4), 161dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k5)> type; 162dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter static type GetSelectedFields(const Tuple& t) { 163dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter using ::std::tr1::get; 164dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t), 165dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter get<k5>(t)); 166dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 167dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 168dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 169dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <class Tuple, int k0, int k1, int k2, int k3, int k4, int k5, int k6> 170dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass TupleFields<Tuple, k0, k1, k2, k3, k4, k5, k6, -1, -1, -1> { 171dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 172dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 173dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2), 174dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4), 175dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k5), GMOCK_FIELD_TYPE_(Tuple, k6)> type; 176dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter static type GetSelectedFields(const Tuple& t) { 177dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter using ::std::tr1::get; 178dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t), 179dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter get<k5>(t), get<k6>(t)); 180dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 181dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 182dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 183dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <class Tuple, int k0, int k1, int k2, int k3, int k4, int k5, int k6, 184dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int k7> 185dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass TupleFields<Tuple, k0, k1, k2, k3, k4, k5, k6, k7, -1, -1> { 186dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 187dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 188dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2), 189dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4), 190dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k5), GMOCK_FIELD_TYPE_(Tuple, k6), 191dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k7)> type; 192dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter static type GetSelectedFields(const Tuple& t) { 193dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter using ::std::tr1::get; 194dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t), 195dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter get<k5>(t), get<k6>(t), get<k7>(t)); 196dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 197dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 198dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 199dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <class Tuple, int k0, int k1, int k2, int k3, int k4, int k5, int k6, 200dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int k7, int k8> 201dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass TupleFields<Tuple, k0, k1, k2, k3, k4, k5, k6, k7, k8, -1> { 202dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 203dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0), 204dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2), 205dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4), 206dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k5), GMOCK_FIELD_TYPE_(Tuple, k6), 207dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter GMOCK_FIELD_TYPE_(Tuple, k7), GMOCK_FIELD_TYPE_(Tuple, k8)> type; 208dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter static type GetSelectedFields(const Tuple& t) { 209dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter using ::std::tr1::get; 210dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t), 211dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter get<k5>(t), get<k6>(t), get<k7>(t), get<k8>(t)); 212dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 213dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 214dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 215dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#undef GMOCK_FIELD_TYPE_ 216dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 217dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Implements the Args() matcher. 218dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <class ArgsTuple, int k0 = -1, int k1 = -1, int k2 = -1, int k3 = -1, 219dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int k4 = -1, int k5 = -1, int k6 = -1, int k7 = -1, int k8 = -1, 220dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int k9 = -1> 221dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass ArgsMatcherImpl : public MatcherInterface<ArgsTuple> { 222dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 223dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // ArgsTuple may have top-level const or reference modifiers. 22446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef GTEST_REMOVE_REFERENCE_AND_CONST_(ArgsTuple) RawArgsTuple; 225dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef typename internal::TupleFields<RawArgsTuple, k0, k1, k2, k3, k4, k5, 226dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter k6, k7, k8, k9>::type SelectedArgs; 227dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef Matcher<const SelectedArgs&> MonomorphicInnerMatcher; 228dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 229dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename InnerMatcher> 230dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter explicit ArgsMatcherImpl(const InnerMatcher& inner_matcher) 231dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter : inner_matcher_(SafeMatcherCast<const SelectedArgs&>(inner_matcher)) {} 232dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 23346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual bool MatchAndExplain(ArgsTuple args, 23446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MatchResultListener* listener) const { 23546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const SelectedArgs& selected_args = GetSelectedArgs(args); 23646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan if (!listener->IsInterested()) 23746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return inner_matcher_.Matches(selected_args); 23846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 23946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan PrintIndices(listener->stream()); 24046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *listener << "are " << PrintToString(selected_args); 24146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 24246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan StringMatchResultListener inner_listener; 24346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const bool match = inner_matcher_.MatchAndExplain(selected_args, 24446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan &inner_listener); 24546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan PrintIfNotEmpty(inner_listener.str(), listener->stream()); 24646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return match; 247dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 248dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 249dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual void DescribeTo(::std::ostream* os) const { 25046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *os << "are a tuple "; 251dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter PrintIndices(os); 252dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter inner_matcher_.DescribeTo(os); 253dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 254dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 255dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual void DescribeNegationTo(::std::ostream* os) const { 25646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *os << "are a tuple "; 257dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter PrintIndices(os); 258dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter inner_matcher_.DescribeNegationTo(os); 259dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 260dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 261dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter private: 262dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter static SelectedArgs GetSelectedArgs(ArgsTuple args) { 263dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return TupleFields<RawArgsTuple, k0, k1, k2, k3, k4, k5, k6, k7, k8, 264dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter k9>::GetSelectedFields(args); 265dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 266dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 267dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter // Prints the indices of the selected fields. 268dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter static void PrintIndices(::std::ostream* os) { 26946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *os << "whose fields ("; 270dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const int indices[10] = { k0, k1, k2, k3, k4, k5, k6, k7, k8, k9 }; 271dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter for (int i = 0; i < 10; i++) { 272dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter if (indices[i] < 0) 273dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter break; 274dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 275dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter if (i >= 1) 276dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter *os << ", "; 277dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 278dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter *os << "#" << indices[i]; 279dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 280dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter *os << ") "; 281dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 282dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 283dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const MonomorphicInnerMatcher inner_matcher_; 28446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 28546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(ArgsMatcherImpl); 286dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 287dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 288dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <class InnerMatcher, int k0 = -1, int k1 = -1, int k2 = -1, 289dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int k3 = -1, int k4 = -1, int k5 = -1, int k6 = -1, int k7 = -1, 290dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int k8 = -1, int k9 = -1> 291dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass ArgsMatcher { 292dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 293dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter explicit ArgsMatcher(const InnerMatcher& inner_matcher) 294dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter : inner_matcher_(inner_matcher) {} 295dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 296dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename ArgsTuple> 297dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator Matcher<ArgsTuple>() const { 298dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return MakeMatcher(new ArgsMatcherImpl<ArgsTuple, k0, k1, k2, k3, k4, k5, 299dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter k6, k7, k8, k9>(inner_matcher_)); 300dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 301dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 302dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter private: 30346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const InnerMatcher inner_matcher_; 304dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 30546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(ArgsMatcher); 306dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 307dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 30846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Implements ElementsAre() of 1-10 arguments. 309dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 310dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1> 311dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass ElementsAreMatcher1 { 312dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 313dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter explicit ElementsAreMatcher1(const T1& e1) : e1_(e1) {} 314dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 315dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename Container> 316dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator Matcher<Container>() const { 31746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer; 318dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef typename internal::StlContainerView<RawContainer>::type::value_type 319dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Element; 320dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 32146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // Nokia's Symbian Compiler has a nasty bug where the object put 32246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // in a one-element local array is not destructed when the array 32346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // goes out of scope. This leads to obvious badness as we've 32446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // added the linked_ptr in it to our other linked_ptrs list. 32546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // Hence we implement ElementsAreMatcher1 specially to avoid using 32646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan // a local array. 32746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const Matcher<const Element&> matcher = 32846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan MatcherCast<const Element&>(e1_); 32946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return MakeMatcher(new ElementsAreMatcherImpl<Container>(&matcher, 1)); 330dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 331dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 332dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter private: 333dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T1& e1_; 33446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 33546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(ElementsAreMatcher1); 336dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 337dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 338dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2> 339dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass ElementsAreMatcher2 { 340dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 341dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ElementsAreMatcher2(const T1& e1, const T2& e2) : e1_(e1), e2_(e2) {} 342dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 343dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename Container> 344dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator Matcher<Container>() const { 34546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer; 346dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef typename internal::StlContainerView<RawContainer>::type::value_type 347dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Element; 348dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 349dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const Matcher<const Element&> matchers[] = { 350dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e1_), 351dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e2_), 352dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }; 353dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 354dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return MakeMatcher(new ElementsAreMatcherImpl<Container>(matchers, 2)); 355dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 356dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 357dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter private: 358dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T1& e1_; 359dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T2& e2_; 36046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 36146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(ElementsAreMatcher2); 362dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 363dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 364dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2, typename T3> 365dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass ElementsAreMatcher3 { 366dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 367dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ElementsAreMatcher3(const T1& e1, const T2& e2, const T3& e3) : e1_(e1), 368dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter e2_(e2), e3_(e3) {} 369dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 370dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename Container> 371dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator Matcher<Container>() const { 37246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer; 373dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef typename internal::StlContainerView<RawContainer>::type::value_type 374dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Element; 375dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 376dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const Matcher<const Element&> matchers[] = { 377dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e1_), 378dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e2_), 379dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e3_), 380dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }; 381dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 382dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return MakeMatcher(new ElementsAreMatcherImpl<Container>(matchers, 3)); 383dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 384dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 385dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter private: 386dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T1& e1_; 387dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T2& e2_; 388dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T3& e3_; 38946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 39046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(ElementsAreMatcher3); 391dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 392dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 393dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2, typename T3, typename T4> 394dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass ElementsAreMatcher4 { 395dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 396dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ElementsAreMatcher4(const T1& e1, const T2& e2, const T3& e3, 397dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T4& e4) : e1_(e1), e2_(e2), e3_(e3), e4_(e4) {} 398dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 399dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename Container> 400dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator Matcher<Container>() const { 40146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer; 402dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef typename internal::StlContainerView<RawContainer>::type::value_type 403dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Element; 404dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 405dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const Matcher<const Element&> matchers[] = { 406dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e1_), 407dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e2_), 408dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e3_), 409dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e4_), 410dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }; 411dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 412dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return MakeMatcher(new ElementsAreMatcherImpl<Container>(matchers, 4)); 413dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 414dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 415dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter private: 416dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T1& e1_; 417dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T2& e2_; 418dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T3& e3_; 419dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T4& e4_; 42046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 42146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(ElementsAreMatcher4); 422dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 423dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 424dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5> 425dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass ElementsAreMatcher5 { 426dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 427dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ElementsAreMatcher5(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 428dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5) : e1_(e1), e2_(e2), e3_(e3), e4_(e4), e5_(e5) {} 429dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 430dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename Container> 431dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator Matcher<Container>() const { 43246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer; 433dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef typename internal::StlContainerView<RawContainer>::type::value_type 434dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Element; 435dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 436dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const Matcher<const Element&> matchers[] = { 437dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e1_), 438dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e2_), 439dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e3_), 440dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e4_), 441dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e5_), 442dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }; 443dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 444dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return MakeMatcher(new ElementsAreMatcherImpl<Container>(matchers, 5)); 445dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 446dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 447dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter private: 448dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T1& e1_; 449dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T2& e2_; 450dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T3& e3_; 451dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T4& e4_; 452dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5_; 45346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 45446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(ElementsAreMatcher5); 455dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 456dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 457dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 458dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename T6> 459dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass ElementsAreMatcher6 { 460dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 461dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ElementsAreMatcher6(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 462dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5, const T6& e6) : e1_(e1), e2_(e2), e3_(e3), e4_(e4), 463dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter e5_(e5), e6_(e6) {} 464dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 465dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename Container> 466dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator Matcher<Container>() const { 46746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer; 468dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef typename internal::StlContainerView<RawContainer>::type::value_type 469dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Element; 470dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 471dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const Matcher<const Element&> matchers[] = { 472dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e1_), 473dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e2_), 474dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e3_), 475dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e4_), 476dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e5_), 477dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e6_), 478dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }; 479dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 480dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return MakeMatcher(new ElementsAreMatcherImpl<Container>(matchers, 6)); 481dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 482dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 483dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter private: 484dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T1& e1_; 485dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T2& e2_; 486dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T3& e3_; 487dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T4& e4_; 488dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5_; 489dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T6& e6_; 49046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 49146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(ElementsAreMatcher6); 492dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 493dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 494dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 495dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename T6, typename T7> 496dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass ElementsAreMatcher7 { 497dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 498dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ElementsAreMatcher7(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 499dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5, const T6& e6, const T7& e7) : e1_(e1), e2_(e2), e3_(e3), 500dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter e4_(e4), e5_(e5), e6_(e6), e7_(e7) {} 501dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 502dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename Container> 503dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator Matcher<Container>() const { 50446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer; 505dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef typename internal::StlContainerView<RawContainer>::type::value_type 506dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Element; 507dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 508dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const Matcher<const Element&> matchers[] = { 509dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e1_), 510dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e2_), 511dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e3_), 512dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e4_), 513dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e5_), 514dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e6_), 515dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e7_), 516dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }; 517dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 518dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return MakeMatcher(new ElementsAreMatcherImpl<Container>(matchers, 7)); 519dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 520dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 521dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter private: 522dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T1& e1_; 523dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T2& e2_; 524dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T3& e3_; 525dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T4& e4_; 526dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5_; 527dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T6& e6_; 528dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T7& e7_; 52946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 53046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(ElementsAreMatcher7); 531dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 532dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 533dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 534dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename T6, typename T7, typename T8> 535dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass ElementsAreMatcher8 { 536dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 537dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ElementsAreMatcher8(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 538dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5, const T6& e6, const T7& e7, const T8& e8) : e1_(e1), 539dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter e2_(e2), e3_(e3), e4_(e4), e5_(e5), e6_(e6), e7_(e7), e8_(e8) {} 540dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 541dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename Container> 542dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator Matcher<Container>() const { 54346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer; 544dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef typename internal::StlContainerView<RawContainer>::type::value_type 545dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Element; 546dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 547dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const Matcher<const Element&> matchers[] = { 548dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e1_), 549dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e2_), 550dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e3_), 551dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e4_), 552dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e5_), 553dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e6_), 554dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e7_), 555dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e8_), 556dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }; 557dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 558dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return MakeMatcher(new ElementsAreMatcherImpl<Container>(matchers, 8)); 559dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 560dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 561dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter private: 562dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T1& e1_; 563dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T2& e2_; 564dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T3& e3_; 565dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T4& e4_; 566dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5_; 567dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T6& e6_; 568dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T7& e7_; 569dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T8& e8_; 57046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 57146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(ElementsAreMatcher8); 572dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 573dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 574dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 575dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename T6, typename T7, typename T8, typename T9> 576dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass ElementsAreMatcher9 { 577dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 578dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ElementsAreMatcher9(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 579dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5, const T6& e6, const T7& e7, const T8& e8, 580dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T9& e9) : e1_(e1), e2_(e2), e3_(e3), e4_(e4), e5_(e5), e6_(e6), 581dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter e7_(e7), e8_(e8), e9_(e9) {} 582dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 583dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename Container> 584dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator Matcher<Container>() const { 58546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer; 586dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef typename internal::StlContainerView<RawContainer>::type::value_type 587dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Element; 588dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 589dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const Matcher<const Element&> matchers[] = { 590dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e1_), 591dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e2_), 592dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e3_), 593dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e4_), 594dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e5_), 595dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e6_), 596dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e7_), 597dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e8_), 598dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e9_), 599dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }; 600dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 601dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return MakeMatcher(new ElementsAreMatcherImpl<Container>(matchers, 9)); 602dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 603dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 604dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter private: 605dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T1& e1_; 606dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T2& e2_; 607dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T3& e3_; 608dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T4& e4_; 609dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5_; 610dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T6& e6_; 611dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T7& e7_; 612dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T8& e8_; 613dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T9& e9_; 61446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 61546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(ElementsAreMatcher9); 616dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 617dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 618dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 619dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename T6, typename T7, typename T8, typename T9, typename T10> 620dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass ElementsAreMatcher10 { 621dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public: 622dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ElementsAreMatcher10(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 623dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5, const T6& e6, const T7& e7, const T8& e8, const T9& e9, 624dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T10& e10) : e1_(e1), e2_(e2), e3_(e3), e4_(e4), e5_(e5), e6_(e6), 625dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter e7_(e7), e8_(e8), e9_(e9), e10_(e10) {} 626dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 627dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename Container> 628dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator Matcher<Container>() const { 62946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer; 630dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typedef typename internal::StlContainerView<RawContainer>::type::value_type 631dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Element; 632dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 633dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const Matcher<const Element&> matchers[] = { 634dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e1_), 635dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e2_), 636dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e3_), 637dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e4_), 638dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e5_), 639dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e6_), 640dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e7_), 641dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e8_), 642dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e9_), 643dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter MatcherCast<const Element&>(e10_), 644dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }; 645dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 646dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return MakeMatcher(new ElementsAreMatcherImpl<Container>(matchers, 10)); 647dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter } 648dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 649dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter private: 650dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T1& e1_; 651dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T2& e2_; 652dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T3& e3_; 653dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T4& e4_; 654dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5_; 655dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T6& e6_; 656dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T7& e7_; 657dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T8& e8_; 658dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T9& e9_; 659dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T10& e10_; 66046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 66146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(ElementsAreMatcher10); 662dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 663dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 66446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// A set of metafunctions for computing the result type of AllOf. 66546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// AllOf(m1, ..., mN) returns 66646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// AllOfResultN<decltype(m1), ..., decltype(mN)>::type. 667dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 66846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Although AllOf isn't defined for one argument, AllOfResult1 is defined 66946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// to simplify the implementation. 67046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1> 67146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AllOfResult1 { 67246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef M1 type; 67346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 674dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 67546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2> 67646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AllOfResult2 { 67746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef BothOfMatcher< 67846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult1<M1>::type, 67946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult1<M2>::type 68046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 68146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 682dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 68346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3> 68446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AllOfResult3 { 68546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef BothOfMatcher< 68646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult1<M1>::type, 68746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult2<M2, M3>::type 68846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 68946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 69046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 69146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4> 69246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AllOfResult4 { 69346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef BothOfMatcher< 69446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult2<M1, M2>::type, 69546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult2<M3, M4>::type 69646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 69746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 69846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 69946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5> 70046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AllOfResult5 { 70146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef BothOfMatcher< 70246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult2<M1, M2>::type, 70346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult3<M3, M4, M5>::type 70446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 70546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 70646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 70746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 70846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6> 70946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AllOfResult6 { 71046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef BothOfMatcher< 71146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult3<M1, M2, M3>::type, 71246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult3<M4, M5, M6>::type 71346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 71446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 71546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 71646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 71746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6, typename M7> 71846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AllOfResult7 { 71946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef BothOfMatcher< 72046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult3<M1, M2, M3>::type, 72146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult4<M4, M5, M6, M7>::type 72246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 72346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 72446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 72546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 72646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6, typename M7, typename M8> 72746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AllOfResult8 { 72846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef BothOfMatcher< 72946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult4<M1, M2, M3, M4>::type, 73046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult4<M5, M6, M7, M8>::type 73146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 73246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 73346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 73446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 73546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6, typename M7, typename M8, typename M9> 73646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AllOfResult9 { 73746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef BothOfMatcher< 73846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult4<M1, M2, M3, M4>::type, 73946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult5<M5, M6, M7, M8, M9>::type 74046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 74146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 74246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 74346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 74446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6, typename M7, typename M8, typename M9, typename M10> 74546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AllOfResult10 { 74646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef BothOfMatcher< 74746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult5<M1, M2, M3, M4, M5>::type, 74846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AllOfResult5<M6, M7, M8, M9, M10>::type 74946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 75046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 75146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 75246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// A set of metafunctions for computing the result type of AnyOf. 75346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// AnyOf(m1, ..., mN) returns 75446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// AnyOfResultN<decltype(m1), ..., decltype(mN)>::type. 75546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 75646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Although AnyOf isn't defined for one argument, AnyOfResult1 is defined 75746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// to simplify the implementation. 75846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1> 75946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AnyOfResult1 { 76046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef M1 type; 76146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 76246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 76346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2> 76446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AnyOfResult2 { 76546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef EitherOfMatcher< 76646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult1<M1>::type, 76746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult1<M2>::type 76846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 76946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 77046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 77146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3> 77246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AnyOfResult3 { 77346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef EitherOfMatcher< 77446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult1<M1>::type, 77546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult2<M2, M3>::type 77646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 77746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 77846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 77946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4> 78046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AnyOfResult4 { 78146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef EitherOfMatcher< 78246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult2<M1, M2>::type, 78346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult2<M3, M4>::type 78446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 78546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 78646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 78746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5> 78846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AnyOfResult5 { 78946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef EitherOfMatcher< 79046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult2<M1, M2>::type, 79146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult3<M3, M4, M5>::type 79246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 79346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 79446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 79546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 79646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6> 79746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AnyOfResult6 { 79846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef EitherOfMatcher< 79946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult3<M1, M2, M3>::type, 80046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult3<M4, M5, M6>::type 80146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 80246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 80346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 80446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 80546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6, typename M7> 80646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AnyOfResult7 { 80746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef EitherOfMatcher< 80846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult3<M1, M2, M3>::type, 80946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult4<M4, M5, M6, M7>::type 81046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 81146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 81246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 81346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 81446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6, typename M7, typename M8> 81546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AnyOfResult8 { 81646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef EitherOfMatcher< 81746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult4<M1, M2, M3, M4>::type, 81846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult4<M5, M6, M7, M8>::type 81946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 82046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 82146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 82246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 82346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6, typename M7, typename M8, typename M9> 82446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AnyOfResult9 { 82546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef EitherOfMatcher< 82646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult4<M1, M2, M3, M4>::type, 82746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult5<M5, M6, M7, M8, M9>::type 82846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 82946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan}; 83046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 83146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 83246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6, typename M7, typename M8, typename M9, typename M10> 83346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanstruct AnyOfResult10 { 83446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typedef EitherOfMatcher< 83546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult5<M1, M2, M3, M4, M5>::type, 83646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename AnyOfResult5<M6, M7, M8, M9, M10>::type 83746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan > type; 838dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}; 839dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 840dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} // namespace internal 841dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 842dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Args<N1, N2, ..., Nk>(a_matcher) matches a tuple if the selected 843dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// fields of it matches a_matcher. C++ doesn't support default 844dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// arguments for function templates, so we have to overload it. 845dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename InnerMatcher> 846dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ArgsMatcher<InnerMatcher> 847dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterArgs(const InnerMatcher& matcher) { 848dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ArgsMatcher<InnerMatcher>(matcher); 849dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 850dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 851dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <int k1, typename InnerMatcher> 852dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ArgsMatcher<InnerMatcher, k1> 853dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterArgs(const InnerMatcher& matcher) { 854dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ArgsMatcher<InnerMatcher, k1>(matcher); 855dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 856dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 857dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <int k1, int k2, typename InnerMatcher> 858dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ArgsMatcher<InnerMatcher, k1, k2> 859dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterArgs(const InnerMatcher& matcher) { 860dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ArgsMatcher<InnerMatcher, k1, k2>(matcher); 861dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 862dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 863dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <int k1, int k2, int k3, typename InnerMatcher> 864dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ArgsMatcher<InnerMatcher, k1, k2, k3> 865dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterArgs(const InnerMatcher& matcher) { 866dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ArgsMatcher<InnerMatcher, k1, k2, k3>(matcher); 867dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 868dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 869dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <int k1, int k2, int k3, int k4, typename InnerMatcher> 870dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4> 871dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterArgs(const InnerMatcher& matcher) { 872dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4>(matcher); 873dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 874dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 875dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <int k1, int k2, int k3, int k4, int k5, typename InnerMatcher> 876dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5> 877dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterArgs(const InnerMatcher& matcher) { 878dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5>(matcher); 879dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 880dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 881dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <int k1, int k2, int k3, int k4, int k5, int k6, typename InnerMatcher> 882dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6> 883dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterArgs(const InnerMatcher& matcher) { 884dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6>(matcher); 885dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 886dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 887dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <int k1, int k2, int k3, int k4, int k5, int k6, int k7, 888dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename InnerMatcher> 889dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7> 890dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterArgs(const InnerMatcher& matcher) { 891dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, 892dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter k7>(matcher); 893dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 894dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 895dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <int k1, int k2, int k3, int k4, int k5, int k6, int k7, int k8, 896dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename InnerMatcher> 897dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7, k8> 898dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterArgs(const InnerMatcher& matcher) { 899dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7, 900dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter k8>(matcher); 901dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 902dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 903dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <int k1, int k2, int k3, int k4, int k5, int k6, int k7, int k8, 904dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int k9, typename InnerMatcher> 905dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7, k8, k9> 906dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterArgs(const InnerMatcher& matcher) { 907dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7, k8, 908dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter k9>(matcher); 909dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 910dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 911dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <int k1, int k2, int k3, int k4, int k5, int k6, int k7, int k8, 912dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter int k9, int k10, typename InnerMatcher> 913dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7, k8, k9, 914dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter k10> 915dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterArgs(const InnerMatcher& matcher) { 916dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7, k8, 917dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter k9, k10>(matcher); 918dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 919dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 920dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// ElementsAre(e0, e1, ..., e_n) matches an STL-style container with 921dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// (n + 1) elements, where the i-th element in the container must 922dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// match the i-th argument in the list. Each argument of 923dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// ElementsAre() can be either a value or a matcher. We support up to 924dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 10 arguments. 925dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 926dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// NOTE: Since ElementsAre() cares about the order of the elements, it 927dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// must not be used with containers whose elements's order is 928dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// undefined (e.g. hash_map). 929dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 930dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ElementsAreMatcher0 ElementsAre() { 931dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ElementsAreMatcher0(); 932dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 933dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 934dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1> 935dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ElementsAreMatcher1<T1> ElementsAre(const T1& e1) { 936dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ElementsAreMatcher1<T1>(e1); 937dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 938dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 939dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2> 940dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ElementsAreMatcher2<T1, T2> ElementsAre(const T1& e1, 941dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T2& e2) { 942dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ElementsAreMatcher2<T1, T2>(e1, e2); 943dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 944dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 945dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2, typename T3> 946dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ElementsAreMatcher3<T1, T2, T3> ElementsAre(const T1& e1, 947dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T2& e2, const T3& e3) { 948dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ElementsAreMatcher3<T1, T2, T3>(e1, e2, e3); 949dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 950dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 951dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2, typename T3, typename T4> 952dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ElementsAreMatcher4<T1, T2, T3, T4> ElementsAre(const T1& e1, 953dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T2& e2, const T3& e3, const T4& e4) { 954dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ElementsAreMatcher4<T1, T2, T3, T4>(e1, e2, e3, e4); 955dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 956dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 957dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5> 958dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ElementsAreMatcher5<T1, T2, T3, T4, 959dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter T5> ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 960dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5) { 961dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ElementsAreMatcher5<T1, T2, T3, T4, T5>(e1, e2, e3, e4, e5); 962dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 963dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 964dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 965dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename T6> 966dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ElementsAreMatcher6<T1, T2, T3, T4, T5, 967dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter T6> ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 968dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5, const T6& e6) { 969dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ElementsAreMatcher6<T1, T2, T3, T4, T5, T6>(e1, e2, e3, e4, 970dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter e5, e6); 971dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 972dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 973dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 974dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename T6, typename T7> 975dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ElementsAreMatcher7<T1, T2, T3, T4, T5, T6, 976dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter T7> ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 977dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5, const T6& e6, const T7& e7) { 978dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ElementsAreMatcher7<T1, T2, T3, T4, T5, T6, T7>(e1, e2, e3, 979dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter e4, e5, e6, e7); 980dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 981dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 982dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 983dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename T6, typename T7, typename T8> 984dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ElementsAreMatcher8<T1, T2, T3, T4, T5, T6, T7, 985dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter T8> ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 986dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5, const T6& e6, const T7& e7, const T8& e8) { 987dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ElementsAreMatcher8<T1, T2, T3, T4, T5, T6, T7, T8>(e1, e2, 988dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter e3, e4, e5, e6, e7, e8); 989dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 990dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 991dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 992dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename T6, typename T7, typename T8, typename T9> 993dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ElementsAreMatcher9<T1, T2, T3, T4, T5, T6, T7, T8, 994dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter T9> ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 995dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5, const T6& e6, const T7& e7, const T8& e8, const T9& e9) { 996dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ElementsAreMatcher9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(e1, 997dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter e2, e3, e4, e5, e6, e7, e8, e9); 998dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 999dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1000dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1001dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename T6, typename T7, typename T8, typename T9, typename T10> 1002dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ElementsAreMatcher10<T1, T2, T3, T4, T5, T6, T7, T8, T9, 1003dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter T10> ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, 1004dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T5& e5, const T6& e6, const T7& e7, const T8& e8, const T9& e9, 1005dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T10& e10) { 1006dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ElementsAreMatcher10<T1, T2, T3, T4, T5, T6, T7, T8, T9, 1007dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter T10>(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10); 1008dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1009dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1010dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// ElementsAreArray(array) and ElementAreArray(array, count) are like 1011dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// ElementsAre(), except that they take an array of values or 1012dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// matchers. The former form infers the size of 'array', which must 1013dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// be a static C-style array. In the latter form, 'array' can either 1014dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// be a static array or a pointer to a dynamically created array. 1015dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1016dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T> 1017dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ElementsAreArrayMatcher<T> ElementsAreArray( 1018dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter const T* first, size_t count) { 1019dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ElementsAreArrayMatcher<T>(first, count); 1020dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1021dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1022dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtertemplate <typename T, size_t N> 1023dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterinline internal::ElementsAreArrayMatcher<T> 1024dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterElementsAreArray(const T (&array)[N]) { 1025dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return internal::ElementsAreArrayMatcher<T>(array, N); 1026dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} 1027dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 102846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// AllOf(m1, m2, ..., mk) matches any value that matches all of the given 102946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// sub-matchers. AllOf is called fully qualified to prevent ADL from firing. 103046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 103146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2> 103246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AllOfResult2<M1, M2>::type 103346108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAllOf(M1 m1, M2 m2) { 103446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AllOfResult2<M1, M2>::type( 103546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan m1, 103646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan m2); 103746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 103846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 103946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3> 104046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AllOfResult3<M1, M2, M3>::type 104146108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAllOf(M1 m1, M2 m2, M3 m3) { 104246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AllOfResult3<M1, M2, M3>::type( 104346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan m1, 104446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AllOf(m2, m3)); 104546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 104646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 104746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4> 104846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AllOfResult4<M1, M2, M3, M4>::type 104946108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAllOf(M1 m1, M2 m2, M3 m3, M4 m4) { 105046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AllOfResult4<M1, M2, M3, M4>::type( 105146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AllOf(m1, m2), 105246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AllOf(m3, m4)); 105346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 105446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 105546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5> 105646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AllOfResult5<M1, M2, M3, M4, M5>::type 105746108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5) { 105846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AllOfResult5<M1, M2, M3, M4, M5>::type( 105946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AllOf(m1, m2), 106046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AllOf(m3, m4, m5)); 106146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 106246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 106346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 106446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6> 106546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AllOfResult6<M1, M2, M3, M4, M5, M6>::type 106646108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6) { 106746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AllOfResult6<M1, M2, M3, M4, M5, M6>::type( 106846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AllOf(m1, m2, m3), 106946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AllOf(m4, m5, m6)); 107046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 107146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 107246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 107346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6, typename M7> 107446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AllOfResult7<M1, M2, M3, M4, M5, M6, M7>::type 107546108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7) { 107646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AllOfResult7<M1, M2, M3, M4, M5, M6, M7>::type( 107746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AllOf(m1, m2, m3), 107846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AllOf(m4, m5, m6, m7)); 107946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 108046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 108146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 108246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6, typename M7, typename M8> 108346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AllOfResult8<M1, M2, M3, M4, M5, M6, M7, M8>::type 108446108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8) { 108546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AllOfResult8<M1, M2, M3, M4, M5, M6, M7, M8>::type( 108646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AllOf(m1, m2, m3, m4), 108746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AllOf(m5, m6, m7, m8)); 108846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 108946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 109046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 109146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6, typename M7, typename M8, typename M9> 109246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AllOfResult9<M1, M2, M3, M4, M5, M6, M7, M8, M9>::type 109346108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9) { 109446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AllOfResult9<M1, M2, M3, M4, M5, M6, M7, M8, 109546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan M9>::type( 109646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AllOf(m1, m2, m3, m4), 109746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AllOf(m5, m6, m7, m8, m9)); 109846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 109946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 110046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 110146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6, typename M7, typename M8, typename M9, typename M10> 110246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AllOfResult10<M1, M2, M3, M4, M5, M6, M7, M8, M9, 110346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan M10>::type 110446108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) { 110546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AllOfResult10<M1, M2, M3, M4, M5, M6, M7, M8, M9, 110646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan M10>::type( 110746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AllOf(m1, m2, m3, m4, m5), 110846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AllOf(m6, m7, m8, m9, m10)); 110946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 111046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 111146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// AnyOf(m1, m2, ..., mk) matches any value that matches any of the given 111246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// sub-matchers. AnyOf is called fully qualified to prevent ADL from firing. 111346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 111446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2> 111546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AnyOfResult2<M1, M2>::type 111646108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAnyOf(M1 m1, M2 m2) { 111746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AnyOfResult2<M1, M2>::type( 111846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan m1, 111946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan m2); 112046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 112146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 112246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3> 112346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AnyOfResult3<M1, M2, M3>::type 112446108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAnyOf(M1 m1, M2 m2, M3 m3) { 112546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AnyOfResult3<M1, M2, M3>::type( 112646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan m1, 112746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AnyOf(m2, m3)); 112846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 112946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 113046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4> 113146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AnyOfResult4<M1, M2, M3, M4>::type 113246108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAnyOf(M1 m1, M2 m2, M3 m3, M4 m4) { 113346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AnyOfResult4<M1, M2, M3, M4>::type( 113446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AnyOf(m1, m2), 113546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AnyOf(m3, m4)); 113646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 113746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 113846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5> 113946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AnyOfResult5<M1, M2, M3, M4, M5>::type 114046108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5) { 114146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AnyOfResult5<M1, M2, M3, M4, M5>::type( 114246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AnyOf(m1, m2), 114346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AnyOf(m3, m4, m5)); 114446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 114546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 114646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 114746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6> 114846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AnyOfResult6<M1, M2, M3, M4, M5, M6>::type 114946108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6) { 115046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AnyOfResult6<M1, M2, M3, M4, M5, M6>::type( 115146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AnyOf(m1, m2, m3), 115246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AnyOf(m4, m5, m6)); 115346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 115446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 115546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 115646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6, typename M7> 115746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AnyOfResult7<M1, M2, M3, M4, M5, M6, M7>::type 115846108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7) { 115946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AnyOfResult7<M1, M2, M3, M4, M5, M6, M7>::type( 116046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AnyOf(m1, m2, m3), 116146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AnyOf(m4, m5, m6, m7)); 116246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 116346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 116446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 116546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6, typename M7, typename M8> 116646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AnyOfResult8<M1, M2, M3, M4, M5, M6, M7, M8>::type 116746108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8) { 116846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AnyOfResult8<M1, M2, M3, M4, M5, M6, M7, M8>::type( 116946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AnyOf(m1, m2, m3, m4), 117046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AnyOf(m5, m6, m7, m8)); 117146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 117246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 117346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 117446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6, typename M7, typename M8, typename M9> 117546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AnyOfResult9<M1, M2, M3, M4, M5, M6, M7, M8, M9>::type 117646108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9) { 117746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AnyOfResult9<M1, M2, M3, M4, M5, M6, M7, M8, 117846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan M9>::type( 117946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AnyOf(m1, m2, m3, m4), 118046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AnyOf(m5, m6, m7, m8, m9)); 118146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 118246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 118346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chantemplate <typename M1, typename M2, typename M3, typename M4, typename M5, 118446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan typename M6, typename M7, typename M8, typename M9, typename M10> 118546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chaninline typename internal::AnyOfResult10<M1, M2, M3, M4, M5, M6, M7, M8, M9, 118646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan M10>::type 118746108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanAnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) { 118846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return typename internal::AnyOfResult10<M1, M2, M3, M4, M5, M6, M7, M8, M9, 118946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan M10>::type( 119046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AnyOf(m1, m2, m3, m4, m5), 119146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::AnyOf(m6, m7, m8, m9, m10)); 119246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan} 119346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 1194dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter} // namespace testing 1195dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 119646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 1197dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// The MATCHER* family of macros can be used in a namespace scope to 119846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// define custom matchers easily. 119946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// 120046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Basic Usage 120146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// =========== 120246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// 120346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// The syntax 1204dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1205dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// MATCHER(name, description_string) { statements; } 1206dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 120746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// defines a matcher with the given name that executes the statements, 120846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// which must return a bool to indicate if the match succeeds. Inside 120946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// the statements, you can refer to the value being matched by 'arg', 121046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// and refer to its type by 'arg_type'. 1211dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1212dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// The description string documents what the matcher does, and is used 1213dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// to generate the failure message when the match fails. Since a 1214dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// MATCHER() is usually defined in a header file shared by multiple 1215dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// C++ source files, we require the description to be a C-string 1216dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// literal to avoid possible side effects. It can be empty, in which 1217dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// case we'll use the sequence of words in the matcher name as the 1218dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// description. 1219dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1220dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// For example: 1221dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1222dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// MATCHER(IsEven, "") { return (arg % 2) == 0; } 1223dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1224dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// allows you to write 1225dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1226dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// // Expects mock_foo.Bar(n) to be called where n is even. 1227dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// EXPECT_CALL(mock_foo, Bar(IsEven())); 1228dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1229dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// or, 1230dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1231dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// // Verifies that the value of some_expression is even. 1232dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// EXPECT_THAT(some_expression, IsEven()); 1233dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1234dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// If the above assertion fails, it will print something like: 1235dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1236dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Value of: some_expression 1237dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Expected: is even 1238dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Actual: 7 1239dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1240dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// where the description "is even" is automatically calculated from the 1241dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// matcher name IsEven. 1242dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 124346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Argument Type 124446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// ============= 124546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// 1246dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Note that the type of the value being matched (arg_type) is 1247dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// determined by the context in which you use the matcher and is 1248dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// supplied to you by the compiler, so you don't need to worry about 1249dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// declaring it (nor can you). This allows the matcher to be 1250dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// polymorphic. For example, IsEven() can be used to match any type 1251dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// where the value of "(arg % 2) == 0" can be implicitly converted to 1252dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// a bool. In the "Bar(IsEven())" example above, if method Bar() 1253dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// takes an int, 'arg_type' will be int; if it takes an unsigned long, 1254dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 'arg_type' will be unsigned long; and so on. 1255dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 125646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Parameterizing Matchers 125746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// ======================= 125846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// 1259dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Sometimes you'll want to parameterize the matcher. For that you 1260dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// can use another macro: 1261dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1262dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// MATCHER_P(name, param_name, description_string) { statements; } 1263dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1264dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// For example: 1265dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1266dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// MATCHER_P(HasAbsoluteValue, value, "") { return abs(arg) == value; } 1267dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1268dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// will allow you to write: 1269dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1270dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// EXPECT_THAT(Blah("a"), HasAbsoluteValue(n)); 1271dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1272dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// which may lead to this message (assuming n is 10): 1273dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1274dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Value of: Blah("a") 1275dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Expected: has absolute value 10 1276dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Actual: -9 1277dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1278dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Note that both the matcher description and its parameter are 1279dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// printed, making the message human-friendly. 1280dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1281dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// In the matcher definition body, you can write 'foo_type' to 1282dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// reference the type of a parameter named 'foo'. For example, in the 1283dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// body of MATCHER_P(HasAbsoluteValue, value) above, you can write 1284dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 'value_type' to refer to the type of 'value'. 1285dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1286dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// We also provide MATCHER_P2, MATCHER_P3, ..., up to MATCHER_P10 to 1287dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// support multi-parameter matchers. 1288dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 128946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Describing Parameterized Matchers 129046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// ================================= 1291dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 129246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// The last argument to MATCHER*() is a string-typed expression. The 129346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// expression can reference all of the matcher's parameters and a 129446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// special bool-typed variable named 'negation'. When 'negation' is 129546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// false, the expression should evaluate to the matcher's description; 129646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// otherwise it should evaluate to the description of the negation of 129746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// the matcher. For example, 1298dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 129946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// using testing::PrintToString; 1300dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 130146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// MATCHER_P2(InClosedRange, low, hi, 130246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// string(negation ? "is not" : "is") + " in range [" + 130346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// PrintToString(low) + ", " + PrintToString(hi) + "]") { 1304dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// return low <= arg && arg <= hi; 1305dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// } 1306dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// ... 1307dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// EXPECT_THAT(3, InClosedRange(4, 6)); 130846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// EXPECT_THAT(3, Not(InClosedRange(2, 4))); 1309dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 131046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// would generate two failures that contain the text: 1311dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1312dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Expected: is in range [4, 6] 131346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// ... 131446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Expected: is not in range [2, 4] 1315dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1316dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// If you specify "" as the description, the failure message will 1317dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// contain the sequence of words in the matcher name followed by the 1318dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// parameter values printed as a tuple. For example, 1319dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1320dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// MATCHER_P2(InClosedRange, low, hi, "") { ... } 1321dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// ... 1322dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// EXPECT_THAT(3, InClosedRange(4, 6)); 132346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// EXPECT_THAT(3, Not(InClosedRange(2, 4))); 1324dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 132546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// would generate two failures that contain the text: 1326dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1327dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Expected: in closed range (4, 6) 132846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// ... 132946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Expected: not (in closed range (2, 4)) 133046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// 133146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Types of Matcher Parameters 133246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// =========================== 1333dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1334dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// For the purpose of typing, you can view 1335dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1336dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// MATCHER_Pk(Foo, p1, ..., pk, description_string) { ... } 1337dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1338dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// as shorthand for 1339dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1340dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// template <typename p1_type, ..., typename pk_type> 1341dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// FooMatcherPk<p1_type, ..., pk_type> 1342dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Foo(p1_type p1, ..., pk_type pk) { ... } 1343dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1344dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// When you write Foo(v1, ..., vk), the compiler infers the types of 1345dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// the parameters v1, ..., and vk for you. If you are not happy with 1346dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// the result of the type inference, you can specify the types by 1347dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// explicitly instantiating the template, as in Foo<long, bool>(5, 1348dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// false). As said earlier, you don't get to (or need to) specify 1349dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 'arg_type' as that's determined by the context in which the matcher 1350dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// is used. You can assign the result of expression Foo(p1, ..., pk) 1351dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// to a variable of type FooMatcherPk<p1_type, ..., pk_type>. This 1352dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// can be useful when composing matchers. 1353dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1354dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// While you can instantiate a matcher template with reference types, 1355dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// passing the parameters by pointer usually makes your code more 1356dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// readable. If, however, you still want to pass a parameter by 1357dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// reference, be aware that in the failure message generated by the 1358dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// matcher you will see the value of the referenced object but not its 1359dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// address. 1360dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 136146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Explaining Match Results 136246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// ======================== 136346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// 136446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Sometimes the matcher description alone isn't enough to explain why 136546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// the match has failed or succeeded. For example, when expecting a 136646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// long string, it can be very helpful to also print the diff between 136746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// the expected string and the actual one. To achieve that, you can 136846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// optionally stream additional information to a special variable 136946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// named result_listener, whose type is a pointer to class 137046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// MatchResultListener: 137146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// 137246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// MATCHER_P(EqualsLongString, str, "") { 137346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// if (arg == str) return true; 137446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// 137546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// *result_listener << "the difference: " 137646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan/// << DiffStrings(str, arg); 137746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// return false; 137846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// } 137946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// 138046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Overloading Matchers 138146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// ==================== 138246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// 1383dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// You can overload matchers with different numbers of parameters: 1384dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1385dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// MATCHER_P(Blah, a, description_string1) { ... } 1386dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// MATCHER_P2(Blah, a, b, description_string2) { ... } 1387dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 138846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// Caveats 138946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// ======= 1390dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 139146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// When defining a new matcher, you should also consider implementing 139246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// MatcherInterface or using MakePolymorphicMatcher(). These 139346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// approaches require more work than the MATCHER* macros, but also 139446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// give you more control on the types of the value being matched and 139546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// the matcher parameters, which may leads to better compiler error 139646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// messages when the matcher is used wrong. They also allow 139746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// overloading matchers based on parameter types (as opposed to just 139846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// based on the number of parameters). 1399dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1400dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// MATCHER*() can only be used in a namespace scope. The reason is 1401dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// that C++ doesn't yet allow function-local types to be used to 1402dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// instantiate templates. The up-coming C++0x standard will fix this. 1403dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Once that's done, we'll consider supporting using MATCHER*() inside 1404dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// a function. 1405dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 140646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// More Information 140746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan// ================ 1408dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// 1409dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// To learn more about using these macros, please search for 'MATCHER' 1410dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// on http://code.google.com/p/googlemock/wiki/CookBook. 1411dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1412dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define MATCHER(name, description)\ 1413dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class name##Matcher {\ 1414dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 1415dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1416dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 1417dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 141846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan gmock_Impl()\ 141946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan {}\ 142046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual bool MatchAndExplain(\ 142146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 1422dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual void DescribeTo(::std::ostream* gmock_os) const {\ 142346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(false);\ 142446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 142546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 142646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(true);\ 142746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 142846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 142946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::string FormatDescription(bool negation) const {\ 143046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const ::testing::internal::string gmock_description = (description);\ 143146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan if (!gmock_description.empty())\ 143246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return gmock_description;\ 143346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return ::testing::internal::FormatMatcherDescription(\ 143446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan negation, #name, \ 1435dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 143646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::std::tr1::tuple<>()));\ 1437dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 143846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1439dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1440dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1441dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator ::testing::Matcher<arg_type>() const {\ 1442dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return ::testing::Matcher<arg_type>(\ 144346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan new gmock_Impl<arg_type>());\ 1444dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1445dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter name##Matcher() {\ 1446dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 144746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 144846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(name##Matcher);\ 1449dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1450dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter inline name##Matcher name() {\ 1451dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return name##Matcher();\ 1452dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1453dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 145446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan bool name##Matcher::gmock_Impl<arg_type>::MatchAndExplain(\ 145546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, \ 145646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 145746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const 1458dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1459dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define MATCHER_P(name, p0, description)\ 1460dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type>\ 1461dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class name##MatcherP {\ 1462dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 1463dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1464dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 1465dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 146646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan explicit gmock_Impl(p0##_type gmock_p0)\ 146746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan : p0(gmock_p0) {}\ 146846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual bool MatchAndExplain(\ 146946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 1470dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual void DescribeTo(::std::ostream* gmock_os) const {\ 147146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(false);\ 147246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 147346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 147446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(true);\ 1475dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1476dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 147746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 147846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::string FormatDescription(bool negation) const {\ 147946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const ::testing::internal::string gmock_description = (description);\ 148046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan if (!gmock_description.empty())\ 148146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return gmock_description;\ 148246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return ::testing::internal::FormatMatcherDescription(\ 148346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan negation, #name, \ 148446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 148546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::std::tr1::tuple<p0##_type>(p0)));\ 148646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 148746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1488dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1489dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1490dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator ::testing::Matcher<arg_type>() const {\ 1491dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return ::testing::Matcher<arg_type>(\ 149246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan new gmock_Impl<arg_type>(p0));\ 1493dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1494dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter name##MatcherP(p0##_type gmock_p0) : p0(gmock_p0) {\ 1495dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1496dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 149746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 149846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(name##MatcherP);\ 1499dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1500dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type>\ 1501dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter inline name##MatcherP<p0##_type> name(p0##_type p0) {\ 1502dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return name##MatcherP<p0##_type>(p0);\ 1503dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1504dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type>\ 1505dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 150646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan bool name##MatcherP<p0##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 150746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, \ 150846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 150946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const 1510dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1511dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define MATCHER_P2(name, p0, p1, description)\ 1512dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type>\ 1513dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class name##MatcherP2 {\ 1514dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 1515dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1516dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 1517dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 151846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1)\ 151946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan : p0(gmock_p0), p1(gmock_p1) {}\ 152046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual bool MatchAndExplain(\ 152146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 1522dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual void DescribeTo(::std::ostream* gmock_os) const {\ 152346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(false);\ 152446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 152546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 152646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(true);\ 1527dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1528dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 1529dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 153046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 153146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::string FormatDescription(bool negation) const {\ 153246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const ::testing::internal::string gmock_description = (description);\ 153346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan if (!gmock_description.empty())\ 153446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return gmock_description;\ 153546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return ::testing::internal::FormatMatcherDescription(\ 153646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan negation, #name, \ 153746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 153846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::std::tr1::tuple<p0##_type, p1##_type>(p0, p1)));\ 153946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 154046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1541dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1542dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1543dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator ::testing::Matcher<arg_type>() const {\ 1544dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return ::testing::Matcher<arg_type>(\ 154546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan new gmock_Impl<arg_type>(p0, p1));\ 1546dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1547dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter name##MatcherP2(p0##_type gmock_p0, p1##_type gmock_p1) : p0(gmock_p0), \ 1548dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1(gmock_p1) {\ 1549dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1550dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 1551dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 155246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 155346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(name##MatcherP2);\ 1554dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1555dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type>\ 1556dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter inline name##MatcherP2<p0##_type, p1##_type> name(p0##_type p0, \ 1557dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1) {\ 1558dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return name##MatcherP2<p0##_type, p1##_type>(p0, p1);\ 1559dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1560dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type>\ 1561dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 156246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan bool name##MatcherP2<p0##_type, \ 156346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p1##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 156446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, \ 156546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 156646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const 1567dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1568dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define MATCHER_P3(name, p0, p1, p2, description)\ 1569dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type>\ 1570dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class name##MatcherP3 {\ 1571dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 1572dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1573dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 1574dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 157546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2)\ 157646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2) {}\ 157746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual bool MatchAndExplain(\ 157846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 1579dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual void DescribeTo(::std::ostream* gmock_os) const {\ 158046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(false);\ 158146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 158246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 158346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(true);\ 1584dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1585dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 1586dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 1587dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type p2;\ 158846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 158946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::string FormatDescription(bool negation) const {\ 159046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const ::testing::internal::string gmock_description = (description);\ 159146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan if (!gmock_description.empty())\ 159246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return gmock_description;\ 159346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return ::testing::internal::FormatMatcherDescription(\ 159446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan negation, #name, \ 159546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 159646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::std::tr1::tuple<p0##_type, p1##_type, p2##_type>(p0, p1, \ 159746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p2)));\ 159846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 159946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1600dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1601dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1602dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator ::testing::Matcher<arg_type>() const {\ 1603dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return ::testing::Matcher<arg_type>(\ 160446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan new gmock_Impl<arg_type>(p0, p1, p2));\ 1605dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1606dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter name##MatcherP3(p0##_type gmock_p0, p1##_type gmock_p1, \ 1607dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type gmock_p2) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2) {\ 1608dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1609dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 1610dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 1611dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type p2;\ 161246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 161346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(name##MatcherP3);\ 1614dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1615dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type>\ 1616dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter inline name##MatcherP3<p0##_type, p1##_type, p2##_type> name(p0##_type p0, \ 1617dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1, p2##_type p2) {\ 1618dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return name##MatcherP3<p0##_type, p1##_type, p2##_type>(p0, p1, p2);\ 1619dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1620dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type>\ 1621dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 162246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan bool name##MatcherP3<p0##_type, p1##_type, \ 162346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p2##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 162446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, \ 162546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 162646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const 1627dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1628dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define MATCHER_P4(name, p0, p1, p2, p3, description)\ 1629dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1630dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type>\ 1631dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class name##MatcherP4 {\ 1632dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 1633dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1634dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 1635dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 1636dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 163746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p3##_type gmock_p3)\ 163846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3) {}\ 163946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual bool MatchAndExplain(\ 164046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 1641dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual void DescribeTo(::std::ostream* gmock_os) const {\ 164246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(false);\ 164346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 164446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 164546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(true);\ 1646dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1647dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 1648dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 1649dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type p2;\ 1650dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type p3;\ 165146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 165246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::string FormatDescription(bool negation) const {\ 165346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const ::testing::internal::string gmock_description = (description);\ 165446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan if (!gmock_description.empty())\ 165546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return gmock_description;\ 165646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return ::testing::internal::FormatMatcherDescription(\ 165746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan negation, #name, \ 165846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 165946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::std::tr1::tuple<p0##_type, p1##_type, p2##_type, \ 166046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p3##_type>(p0, p1, p2, p3)));\ 166146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 166246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1663dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1664dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1665dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator ::testing::Matcher<arg_type>() const {\ 1666dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return ::testing::Matcher<arg_type>(\ 166746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan new gmock_Impl<arg_type>(p0, p1, p2, p3));\ 1668dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1669dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter name##MatcherP4(p0##_type gmock_p0, p1##_type gmock_p1, \ 1670dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type gmock_p2, p3##_type gmock_p3) : p0(gmock_p0), p1(gmock_p1), \ 1671dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2(gmock_p2), p3(gmock_p3) {\ 1672dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1673dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 1674dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 1675dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type p2;\ 1676dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type p3;\ 167746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 167846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(name##MatcherP4);\ 1679dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1680dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1681dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type>\ 1682dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter inline name##MatcherP4<p0##_type, p1##_type, p2##_type, \ 1683dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \ 1684dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type p3) {\ 1685dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return name##MatcherP4<p0##_type, p1##_type, p2##_type, p3##_type>(p0, \ 1686dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1, p2, p3);\ 1687dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1688dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1689dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type>\ 1690dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 169146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan bool name##MatcherP4<p0##_type, p1##_type, p2##_type, \ 169246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p3##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 169346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, \ 169446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 169546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const 1696dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1697dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define MATCHER_P5(name, p0, p1, p2, p3, p4, description)\ 1698dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1699dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type>\ 1700dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class name##MatcherP5 {\ 1701dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 1702dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1703dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 1704dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 1705dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 170646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p3##_type gmock_p3, p4##_type gmock_p4)\ 1707dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \ 170846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p4(gmock_p4) {}\ 170946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual bool MatchAndExplain(\ 171046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 1711dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual void DescribeTo(::std::ostream* gmock_os) const {\ 171246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(false);\ 171346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 171446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 171546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(true);\ 1716dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1717dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 1718dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 1719dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type p2;\ 1720dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type p3;\ 1721dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type p4;\ 172246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 172346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::string FormatDescription(bool negation) const {\ 172446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const ::testing::internal::string gmock_description = (description);\ 172546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan if (!gmock_description.empty())\ 172646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return gmock_description;\ 172746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return ::testing::internal::FormatMatcherDescription(\ 172846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan negation, #name, \ 172946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 173046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::std::tr1::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 173146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p4##_type>(p0, p1, p2, p3, p4)));\ 173246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 173346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1734dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1735dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1736dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator ::testing::Matcher<arg_type>() const {\ 1737dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return ::testing::Matcher<arg_type>(\ 173846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan new gmock_Impl<arg_type>(p0, p1, p2, p3, p4));\ 1739dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1740dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter name##MatcherP5(p0##_type gmock_p0, p1##_type gmock_p1, \ 1741dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type gmock_p2, p3##_type gmock_p3, \ 1742dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type gmock_p4) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 1743dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3(gmock_p3), p4(gmock_p4) {\ 1744dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1745dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 1746dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 1747dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type p2;\ 1748dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type p3;\ 1749dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type p4;\ 175046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 175146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(name##MatcherP5);\ 1752dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1753dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1754dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type>\ 1755dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter inline name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 1756dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 1757dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type p4) {\ 1758dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 1759dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type>(p0, p1, p2, p3, p4);\ 1760dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1761dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1762dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type>\ 1763dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 176446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan bool name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 176546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p4##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 176646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, \ 176746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 176846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const 1769dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1770dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define MATCHER_P6(name, p0, p1, p2, p3, p4, p5, description)\ 1771dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1772dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type, typename p5##_type>\ 1773dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class name##MatcherP6 {\ 1774dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 1775dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1776dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 1777dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 1778dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 177946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5)\ 1780dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \ 178146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p4(gmock_p4), p5(gmock_p5) {}\ 178246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual bool MatchAndExplain(\ 178346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 1784dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual void DescribeTo(::std::ostream* gmock_os) const {\ 178546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(false);\ 178646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 178746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 178846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(true);\ 1789dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1790dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 1791dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 1792dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type p2;\ 1793dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type p3;\ 1794dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type p4;\ 1795dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p5##_type p5;\ 179646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 179746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::string FormatDescription(bool negation) const {\ 179846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const ::testing::internal::string gmock_description = (description);\ 179946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan if (!gmock_description.empty())\ 180046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return gmock_description;\ 180146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return ::testing::internal::FormatMatcherDescription(\ 180246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan negation, #name, \ 180346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 180446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::std::tr1::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 180546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p4##_type, p5##_type>(p0, p1, p2, p3, p4, p5)));\ 180646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 180746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1808dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1809dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1810dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator ::testing::Matcher<arg_type>() const {\ 1811dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return ::testing::Matcher<arg_type>(\ 181246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5));\ 1813dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1814dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter name##MatcherP6(p0##_type gmock_p0, p1##_type gmock_p1, \ 1815dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 1816dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p5##_type gmock_p5) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 1817dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3(gmock_p3), p4(gmock_p4), p5(gmock_p5) {\ 1818dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1819dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 1820dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 1821dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type p2;\ 1822dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type p3;\ 1823dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type p4;\ 1824dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p5##_type p5;\ 182546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 182646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(name##MatcherP6);\ 1827dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1828dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1829dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type, typename p5##_type>\ 1830dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter inline name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, \ 1831dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type, p5##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \ 1832dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type p3, p4##_type p4, p5##_type p5) {\ 1833dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, \ 1834dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type, p5##_type>(p0, p1, p2, p3, p4, p5);\ 1835dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1836dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1837dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type, typename p5##_type>\ 1838dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1839dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter bool name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 184046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p5##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 184146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, \ 184246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 184346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const 1844dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1845dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define MATCHER_P7(name, p0, p1, p2, p3, p4, p5, p6, description)\ 1846dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1847dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type, typename p5##_type, \ 1848dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p6##_type>\ 1849dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class name##MatcherP7 {\ 1850dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 1851dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1852dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 1853dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 1854dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 1855dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 185646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p6##_type gmock_p6)\ 1857dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \ 185846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p4(gmock_p4), p5(gmock_p5), p6(gmock_p6) {}\ 185946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual bool MatchAndExplain(\ 186046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 1861dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual void DescribeTo(::std::ostream* gmock_os) const {\ 186246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(false);\ 186346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 186446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 186546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(true);\ 1866dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1867dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 1868dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 1869dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type p2;\ 1870dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type p3;\ 1871dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type p4;\ 1872dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p5##_type p5;\ 1873dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p6##_type p6;\ 187446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 187546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::string FormatDescription(bool negation) const {\ 187646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const ::testing::internal::string gmock_description = (description);\ 187746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan if (!gmock_description.empty())\ 187846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return gmock_description;\ 187946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return ::testing::internal::FormatMatcherDescription(\ 188046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan negation, #name, \ 188146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 188246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::std::tr1::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 188346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p4##_type, p5##_type, p6##_type>(p0, p1, p2, p3, p4, p5, \ 188446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p6)));\ 188546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 188646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1887dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1888dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1889dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator ::testing::Matcher<arg_type>() const {\ 1890dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return ::testing::Matcher<arg_type>(\ 189146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6));\ 1892dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1893dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter name##MatcherP7(p0##_type gmock_p0, p1##_type gmock_p1, \ 1894dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 1895dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p5##_type gmock_p5, p6##_type gmock_p6) : p0(gmock_p0), p1(gmock_p1), \ 1896dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), \ 1897dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p6(gmock_p6) {\ 1898dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1899dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 1900dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 1901dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type p2;\ 1902dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type p3;\ 1903dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type p4;\ 1904dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p5##_type p5;\ 1905dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p6##_type p6;\ 190646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 190746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(name##MatcherP7);\ 1908dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1909dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1910dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type, typename p5##_type, \ 1911dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p6##_type>\ 1912dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter inline name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, \ 1913dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type, p5##_type, p6##_type> name(p0##_type p0, p1##_type p1, \ 1914dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ 1915dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p6##_type p6) {\ 1916dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, \ 1917dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type, p5##_type, p6##_type>(p0, p1, p2, p3, p4, p5, p6);\ 1918dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1919dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1920dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type, typename p5##_type, \ 1921dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p6##_type>\ 1922dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1923dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter bool name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 192446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p5##_type, p6##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 192546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, \ 192646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 192746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const 1928dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 1929dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define MATCHER_P8(name, p0, p1, p2, p3, p4, p5, p6, p7, description)\ 1930dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1931dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type, typename p5##_type, \ 1932dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p6##_type, typename p7##_type>\ 1933dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class name##MatcherP8 {\ 1934dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 1935dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1936dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 1937dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 1938dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 1939dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 194046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p6##_type gmock_p6, p7##_type gmock_p7)\ 1941dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \ 194246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7) {}\ 194346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual bool MatchAndExplain(\ 194446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 1945dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual void DescribeTo(::std::ostream* gmock_os) const {\ 194646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(false);\ 194746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 194846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 194946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(true);\ 1950dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1951dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 1952dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 1953dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type p2;\ 1954dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type p3;\ 1955dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type p4;\ 1956dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p5##_type p5;\ 1957dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p6##_type p6;\ 1958dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p7##_type p7;\ 195946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 196046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::string FormatDescription(bool negation) const {\ 196146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const ::testing::internal::string gmock_description = (description);\ 196246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan if (!gmock_description.empty())\ 196346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return gmock_description;\ 196446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return ::testing::internal::FormatMatcherDescription(\ 196546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan negation, #name, \ 196646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 196746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::std::tr1::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 196846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p4##_type, p5##_type, p6##_type, p7##_type>(p0, p1, p2, \ 196946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p3, p4, p5, p6, p7)));\ 197046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 197146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 1972dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1973dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 1974dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator ::testing::Matcher<arg_type>() const {\ 1975dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return ::testing::Matcher<arg_type>(\ 197646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6, p7));\ 1977dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1978dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter name##MatcherP8(p0##_type gmock_p0, p1##_type gmock_p1, \ 1979dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 1980dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p5##_type gmock_p5, p6##_type gmock_p6, \ 1981dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p7##_type gmock_p7) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 1982dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ 1983dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p7(gmock_p7) {\ 1984dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 1985dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 1986dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 1987dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type p2;\ 1988dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type p3;\ 1989dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type p4;\ 1990dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p5##_type p5;\ 1991dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p6##_type p6;\ 1992dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p7##_type p7;\ 199346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 199446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(name##MatcherP8);\ 1995dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 1996dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1997dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type, typename p5##_type, \ 1998dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p6##_type, typename p7##_type>\ 1999dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter inline name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, \ 2000dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type, p5##_type, p6##_type, p7##_type> name(p0##_type p0, \ 2001dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ 2002dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p6##_type p6, p7##_type p7) {\ 2003dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, \ 2004dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type, p5##_type, p6##_type, p7##_type>(p0, p1, p2, p3, p4, p5, \ 2005dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p6, p7);\ 2006dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 2007dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 2008dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type, typename p5##_type, \ 2009dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p6##_type, typename p7##_type>\ 2010dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 2011dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter bool name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 201246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p5##_type, p6##_type, \ 201346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p7##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 201446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, \ 201546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 201646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const 2017dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2018dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define MATCHER_P9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, description)\ 2019dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 2020dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type, typename p5##_type, \ 2021dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p6##_type, typename p7##_type, typename p8##_type>\ 2022dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class name##MatcherP9 {\ 2023dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 2024dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 2025dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 2026dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 2027dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 2028dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 202946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8)\ 2030dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \ 2031dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \ 203246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p8(gmock_p8) {}\ 203346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual bool MatchAndExplain(\ 203446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 2035dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual void DescribeTo(::std::ostream* gmock_os) const {\ 203646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(false);\ 203746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 203846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 203946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(true);\ 2040dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 2041dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 2042dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 2043dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type p2;\ 2044dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type p3;\ 2045dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type p4;\ 2046dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p5##_type p5;\ 2047dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p6##_type p6;\ 2048dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p7##_type p7;\ 2049dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p8##_type p8;\ 205046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 205146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::string FormatDescription(bool negation) const {\ 205246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const ::testing::internal::string gmock_description = (description);\ 205346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan if (!gmock_description.empty())\ 205446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return gmock_description;\ 205546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return ::testing::internal::FormatMatcherDescription(\ 205646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan negation, #name, \ 205746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 205846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::std::tr1::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 205946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p4##_type, p5##_type, p6##_type, p7##_type, \ 206046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p8##_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8)));\ 206146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 206246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 2063dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 2064dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 2065dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator ::testing::Matcher<arg_type>() const {\ 2066dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return ::testing::Matcher<arg_type>(\ 206746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8));\ 2068dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 2069dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter name##MatcherP9(p0##_type gmock_p0, p1##_type gmock_p1, \ 2070dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 2071dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ 2072dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p8##_type gmock_p8) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \ 2073dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \ 2074dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p8(gmock_p8) {\ 2075dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 2076dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 2077dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 2078dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type p2;\ 2079dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type p3;\ 2080dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type p4;\ 2081dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p5##_type p5;\ 2082dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p6##_type p6;\ 2083dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p7##_type p7;\ 2084dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p8##_type p8;\ 208546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 208646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(name##MatcherP9);\ 2087dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 2088dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 2089dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type, typename p5##_type, \ 2090dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p6##_type, typename p7##_type, typename p8##_type>\ 2091dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter inline name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, \ 2092dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type, p5##_type, p6##_type, p7##_type, \ 2093dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p8##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 2094dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, \ 2095dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p8##_type p8) {\ 2096dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, \ 2097dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type, p5##_type, p6##_type, p7##_type, p8##_type>(p0, p1, p2, \ 2098dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3, p4, p5, p6, p7, p8);\ 2099dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 2100dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 2101dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type, typename p5##_type, \ 2102dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p6##_type, typename p7##_type, typename p8##_type>\ 2103dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 2104dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter bool name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 210546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p5##_type, p6##_type, p7##_type, \ 210646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p8##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 210746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, \ 210846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 210946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const 2110dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2111dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define MATCHER_P10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, description)\ 2112dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 2113dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type, typename p5##_type, \ 2114dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p6##_type, typename p7##_type, typename p8##_type, \ 2115dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p9##_type>\ 2116dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class name##MatcherP10 {\ 2117dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 2118dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 2119dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\ 2120dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:\ 2121dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 2122dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 2123dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \ 212446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p9##_type gmock_p9)\ 2125dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \ 2126dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \ 212746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p8(gmock_p8), p9(gmock_p9) {}\ 212846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual bool MatchAndExplain(\ 212946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, ::testing::MatchResultListener* result_listener) const;\ 2130dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter virtual void DescribeTo(::std::ostream* gmock_os) const {\ 213146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(false);\ 213246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 213346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 213446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan *gmock_os << FormatDescription(true);\ 2135dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 2136dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 2137dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 2138dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type p2;\ 2139dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type p3;\ 2140dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type p4;\ 2141dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p5##_type p5;\ 2142dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p6##_type p6;\ 2143dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p7##_type p7;\ 2144dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p8##_type p8;\ 2145dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p9##_type p9;\ 214646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 214746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::string FormatDescription(bool negation) const {\ 214846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const ::testing::internal::string gmock_description = (description);\ 214946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan if (!gmock_description.empty())\ 215046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return gmock_description;\ 215146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return ::testing::internal::FormatMatcherDescription(\ 215246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan negation, #name, \ 215346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 215446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::std::tr1::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 215546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \ 215646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p9##_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)));\ 215746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan }\ 215846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ 2159dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 2160dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 2161dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter operator ::testing::Matcher<arg_type>() const {\ 2162dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return ::testing::Matcher<arg_type>(\ 216346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9));\ 2164dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 2165dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter name##MatcherP10(p0##_type gmock_p0, p1##_type gmock_p1, \ 2166dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 2167dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ 2168dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p8##_type gmock_p8, p9##_type gmock_p9) : p0(gmock_p0), p1(gmock_p1), \ 2169dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \ 2170dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p7(gmock_p7), p8(gmock_p8), p9(gmock_p9) {\ 2171dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 2172dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p0##_type p0;\ 2173dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1##_type p1;\ 2174dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p2##_type p2;\ 2175dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p3##_type p3;\ 2176dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type p4;\ 2177dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p5##_type p5;\ 2178dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p6##_type p6;\ 2179dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p7##_type p7;\ 2180dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p8##_type p8;\ 2181dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p9##_type p9;\ 218246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan private:\ 218346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan GTEST_DISALLOW_ASSIGN_(name##MatcherP10);\ 2184dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter };\ 2185dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 2186dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type, typename p5##_type, \ 2187dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p6##_type, typename p7##_type, typename p8##_type, \ 2188dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p9##_type>\ 2189dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter inline name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \ 2190dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \ 2191dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p9##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 2192dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \ 2193dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p9##_type p9) {\ 2194dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \ 2195dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, p9##_type>(p0, \ 2196dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter p1, p2, p3, p4, p5, p6, p7, p8, p9);\ 2197dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter }\ 2198dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename p0##_type, typename p1##_type, typename p2##_type, \ 2199dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p3##_type, typename p4##_type, typename p5##_type, \ 2200dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p6##_type, typename p7##_type, typename p8##_type, \ 2201dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter typename p9##_type>\ 2202dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter template <typename arg_type>\ 2203dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter bool name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \ 220446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \ 220546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p9##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 220646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan arg_type arg, \ 220746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 220846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan const 2209dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 2210dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_ 2211