[12177] | 1 | // This file was GENERATED by a script. DO NOT EDIT BY HAND!!! |
---|
| 2 | |
---|
| 3 | // Copyright 2007, Google Inc. |
---|
| 4 | // All rights reserved. |
---|
| 5 | // |
---|
| 6 | // Redistribution and use in source and binary forms, with or without |
---|
| 7 | // modification, are permitted provided that the following conditions are |
---|
| 8 | // met: |
---|
| 9 | // |
---|
| 10 | // * Redistributions of source code must retain the above copyright |
---|
| 11 | // notice, this list of conditions and the following disclaimer. |
---|
| 12 | // * Redistributions in binary form must reproduce the above |
---|
| 13 | // copyright notice, this list of conditions and the following disclaimer |
---|
| 14 | // in the documentation and/or other materials provided with the |
---|
| 15 | // distribution. |
---|
| 16 | // * Neither the name of Google Inc. nor the names of its |
---|
| 17 | // contributors may be used to endorse or promote products derived from |
---|
| 18 | // this software without specific prior written permission. |
---|
| 19 | // |
---|
| 20 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
---|
| 21 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
---|
| 22 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
---|
| 23 | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
---|
| 24 | // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
---|
| 25 | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
---|
| 26 | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
---|
| 27 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
---|
| 28 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
---|
| 29 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
---|
| 30 | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
---|
| 31 | // |
---|
| 32 | // Author: wan@google.com (Zhanyong Wan) |
---|
| 33 | |
---|
| 34 | // Google Mock - a framework for writing C++ mock classes. |
---|
| 35 | // |
---|
| 36 | // This file contains template meta-programming utility classes needed |
---|
| 37 | // for implementing Google Mock. |
---|
| 38 | |
---|
| 39 | #ifndef GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_GENERATED_INTERNAL_UTILS_H_ |
---|
| 40 | #define GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_GENERATED_INTERNAL_UTILS_H_ |
---|
| 41 | |
---|
| 42 | #include "gmock/internal/gmock-port.h" |
---|
| 43 | |
---|
| 44 | namespace testing { |
---|
| 45 | |
---|
| 46 | template <typename T> |
---|
| 47 | class Matcher; |
---|
| 48 | |
---|
| 49 | namespace internal { |
---|
| 50 | |
---|
| 51 | // An IgnoredValue object can be implicitly constructed from ANY value. |
---|
| 52 | // This is used in implementing the IgnoreResult(a) action. |
---|
| 53 | class IgnoredValue { |
---|
| 54 | public: |
---|
| 55 | // This constructor template allows any value to be implicitly |
---|
| 56 | // converted to IgnoredValue. The object has no data member and |
---|
| 57 | // doesn't try to remember anything about the argument. We |
---|
| 58 | // deliberately omit the 'explicit' keyword in order to allow the |
---|
| 59 | // conversion to be implicit. |
---|
| 60 | template <typename T> |
---|
| 61 | IgnoredValue(const T&) {} |
---|
| 62 | }; |
---|
| 63 | |
---|
| 64 | // MatcherTuple<T>::type is a tuple type where each field is a Matcher |
---|
| 65 | // for the corresponding field in tuple type T. |
---|
| 66 | template <typename Tuple> |
---|
| 67 | struct MatcherTuple; |
---|
| 68 | |
---|
| 69 | template <> |
---|
| 70 | struct MatcherTuple< ::std::tr1::tuple<> > { |
---|
| 71 | typedef ::std::tr1::tuple< > type; |
---|
| 72 | }; |
---|
| 73 | |
---|
| 74 | template <typename A1> |
---|
| 75 | struct MatcherTuple< ::std::tr1::tuple<A1> > { |
---|
| 76 | typedef ::std::tr1::tuple<Matcher<A1> > type; |
---|
| 77 | }; |
---|
| 78 | |
---|
| 79 | template <typename A1, typename A2> |
---|
| 80 | struct MatcherTuple< ::std::tr1::tuple<A1, A2> > { |
---|
| 81 | typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2> > type; |
---|
| 82 | }; |
---|
| 83 | |
---|
| 84 | template <typename A1, typename A2, typename A3> |
---|
| 85 | struct MatcherTuple< ::std::tr1::tuple<A1, A2, A3> > { |
---|
| 86 | typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3> > type; |
---|
| 87 | }; |
---|
| 88 | |
---|
| 89 | template <typename A1, typename A2, typename A3, typename A4> |
---|
| 90 | struct MatcherTuple< ::std::tr1::tuple<A1, A2, A3, A4> > { |
---|
| 91 | typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, |
---|
| 92 | Matcher<A4> > type; |
---|
| 93 | }; |
---|
| 94 | |
---|
| 95 | template <typename A1, typename A2, typename A3, typename A4, typename A5> |
---|
| 96 | struct MatcherTuple< ::std::tr1::tuple<A1, A2, A3, A4, A5> > { |
---|
| 97 | typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>, |
---|
| 98 | Matcher<A5> > type; |
---|
| 99 | }; |
---|
| 100 | |
---|
| 101 | template <typename A1, typename A2, typename A3, typename A4, typename A5, |
---|
| 102 | typename A6> |
---|
| 103 | struct MatcherTuple< ::std::tr1::tuple<A1, A2, A3, A4, A5, A6> > { |
---|
| 104 | typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>, |
---|
| 105 | Matcher<A5>, Matcher<A6> > type; |
---|
| 106 | }; |
---|
| 107 | |
---|
| 108 | template <typename A1, typename A2, typename A3, typename A4, typename A5, |
---|
| 109 | typename A6, typename A7> |
---|
| 110 | struct MatcherTuple< ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7> > { |
---|
| 111 | typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>, |
---|
| 112 | Matcher<A5>, Matcher<A6>, Matcher<A7> > type; |
---|
| 113 | }; |
---|
| 114 | |
---|
| 115 | template <typename A1, typename A2, typename A3, typename A4, typename A5, |
---|
| 116 | typename A6, typename A7, typename A8> |
---|
| 117 | struct MatcherTuple< ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, A8> > { |
---|
| 118 | typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>, |
---|
| 119 | Matcher<A5>, Matcher<A6>, Matcher<A7>, Matcher<A8> > type; |
---|
| 120 | }; |
---|
| 121 | |
---|
| 122 | template <typename A1, typename A2, typename A3, typename A4, typename A5, |
---|
| 123 | typename A6, typename A7, typename A8, typename A9> |
---|
| 124 | struct MatcherTuple< ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9> > { |
---|
| 125 | typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>, |
---|
| 126 | Matcher<A5>, Matcher<A6>, Matcher<A7>, Matcher<A8>, Matcher<A9> > type; |
---|
| 127 | }; |
---|
| 128 | |
---|
| 129 | template <typename A1, typename A2, typename A3, typename A4, typename A5, |
---|
| 130 | typename A6, typename A7, typename A8, typename A9, typename A10> |
---|
| 131 | struct MatcherTuple< ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9, |
---|
| 132 | A10> > { |
---|
| 133 | typedef ::std::tr1::tuple<Matcher<A1>, Matcher<A2>, Matcher<A3>, Matcher<A4>, |
---|
| 134 | Matcher<A5>, Matcher<A6>, Matcher<A7>, Matcher<A8>, Matcher<A9>, |
---|
| 135 | Matcher<A10> > type; |
---|
| 136 | }; |
---|
| 137 | |
---|
| 138 | // Template struct Function<F>, where F must be a function type, contains |
---|
| 139 | // the following typedefs: |
---|
| 140 | // |
---|
| 141 | // Result: the function's return type. |
---|
| 142 | // ArgumentN: the type of the N-th argument, where N starts with 1. |
---|
| 143 | // ArgumentTuple: the tuple type consisting of all parameters of F. |
---|
| 144 | // ArgumentMatcherTuple: the tuple type consisting of Matchers for all |
---|
| 145 | // parameters of F. |
---|
| 146 | // MakeResultVoid: the function type obtained by substituting void |
---|
| 147 | // for the return type of F. |
---|
| 148 | // MakeResultIgnoredValue: |
---|
| 149 | // the function type obtained by substituting Something |
---|
| 150 | // for the return type of F. |
---|
| 151 | template <typename F> |
---|
| 152 | struct Function; |
---|
| 153 | |
---|
| 154 | template <typename R> |
---|
| 155 | struct Function<R()> { |
---|
| 156 | typedef R Result; |
---|
| 157 | typedef ::std::tr1::tuple<> ArgumentTuple; |
---|
| 158 | typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple; |
---|
| 159 | typedef void MakeResultVoid(); |
---|
| 160 | typedef IgnoredValue MakeResultIgnoredValue(); |
---|
| 161 | }; |
---|
| 162 | |
---|
| 163 | template <typename R, typename A1> |
---|
| 164 | struct Function<R(A1)> |
---|
| 165 | : Function<R()> { |
---|
| 166 | typedef A1 Argument1; |
---|
| 167 | typedef ::std::tr1::tuple<A1> ArgumentTuple; |
---|
| 168 | typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple; |
---|
| 169 | typedef void MakeResultVoid(A1); |
---|
| 170 | typedef IgnoredValue MakeResultIgnoredValue(A1); |
---|
| 171 | }; |
---|
| 172 | |
---|
| 173 | template <typename R, typename A1, typename A2> |
---|
| 174 | struct Function<R(A1, A2)> |
---|
| 175 | : Function<R(A1)> { |
---|
| 176 | typedef A2 Argument2; |
---|
| 177 | typedef ::std::tr1::tuple<A1, A2> ArgumentTuple; |
---|
| 178 | typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple; |
---|
| 179 | typedef void MakeResultVoid(A1, A2); |
---|
| 180 | typedef IgnoredValue MakeResultIgnoredValue(A1, A2); |
---|
| 181 | }; |
---|
| 182 | |
---|
| 183 | template <typename R, typename A1, typename A2, typename A3> |
---|
| 184 | struct Function<R(A1, A2, A3)> |
---|
| 185 | : Function<R(A1, A2)> { |
---|
| 186 | typedef A3 Argument3; |
---|
| 187 | typedef ::std::tr1::tuple<A1, A2, A3> ArgumentTuple; |
---|
| 188 | typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple; |
---|
| 189 | typedef void MakeResultVoid(A1, A2, A3); |
---|
| 190 | typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3); |
---|
| 191 | }; |
---|
| 192 | |
---|
| 193 | template <typename R, typename A1, typename A2, typename A3, typename A4> |
---|
| 194 | struct Function<R(A1, A2, A3, A4)> |
---|
| 195 | : Function<R(A1, A2, A3)> { |
---|
| 196 | typedef A4 Argument4; |
---|
| 197 | typedef ::std::tr1::tuple<A1, A2, A3, A4> ArgumentTuple; |
---|
| 198 | typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple; |
---|
| 199 | typedef void MakeResultVoid(A1, A2, A3, A4); |
---|
| 200 | typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4); |
---|
| 201 | }; |
---|
| 202 | |
---|
| 203 | template <typename R, typename A1, typename A2, typename A3, typename A4, |
---|
| 204 | typename A5> |
---|
| 205 | struct Function<R(A1, A2, A3, A4, A5)> |
---|
| 206 | : Function<R(A1, A2, A3, A4)> { |
---|
| 207 | typedef A5 Argument5; |
---|
| 208 | typedef ::std::tr1::tuple<A1, A2, A3, A4, A5> ArgumentTuple; |
---|
| 209 | typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple; |
---|
| 210 | typedef void MakeResultVoid(A1, A2, A3, A4, A5); |
---|
| 211 | typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5); |
---|
| 212 | }; |
---|
| 213 | |
---|
| 214 | template <typename R, typename A1, typename A2, typename A3, typename A4, |
---|
| 215 | typename A5, typename A6> |
---|
| 216 | struct Function<R(A1, A2, A3, A4, A5, A6)> |
---|
| 217 | : Function<R(A1, A2, A3, A4, A5)> { |
---|
| 218 | typedef A6 Argument6; |
---|
| 219 | typedef ::std::tr1::tuple<A1, A2, A3, A4, A5, A6> ArgumentTuple; |
---|
| 220 | typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple; |
---|
| 221 | typedef void MakeResultVoid(A1, A2, A3, A4, A5, A6); |
---|
| 222 | typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5, A6); |
---|
| 223 | }; |
---|
| 224 | |
---|
| 225 | template <typename R, typename A1, typename A2, typename A3, typename A4, |
---|
| 226 | typename A5, typename A6, typename A7> |
---|
| 227 | struct Function<R(A1, A2, A3, A4, A5, A6, A7)> |
---|
| 228 | : Function<R(A1, A2, A3, A4, A5, A6)> { |
---|
| 229 | typedef A7 Argument7; |
---|
| 230 | typedef ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7> ArgumentTuple; |
---|
| 231 | typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple; |
---|
| 232 | typedef void MakeResultVoid(A1, A2, A3, A4, A5, A6, A7); |
---|
| 233 | typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5, A6, A7); |
---|
| 234 | }; |
---|
| 235 | |
---|
| 236 | template <typename R, typename A1, typename A2, typename A3, typename A4, |
---|
| 237 | typename A5, typename A6, typename A7, typename A8> |
---|
| 238 | struct Function<R(A1, A2, A3, A4, A5, A6, A7, A8)> |
---|
| 239 | : Function<R(A1, A2, A3, A4, A5, A6, A7)> { |
---|
| 240 | typedef A8 Argument8; |
---|
| 241 | typedef ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, A8> ArgumentTuple; |
---|
| 242 | typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple; |
---|
| 243 | typedef void MakeResultVoid(A1, A2, A3, A4, A5, A6, A7, A8); |
---|
| 244 | typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5, A6, A7, A8); |
---|
| 245 | }; |
---|
| 246 | |
---|
| 247 | template <typename R, typename A1, typename A2, typename A3, typename A4, |
---|
| 248 | typename A5, typename A6, typename A7, typename A8, typename A9> |
---|
| 249 | struct Function<R(A1, A2, A3, A4, A5, A6, A7, A8, A9)> |
---|
| 250 | : Function<R(A1, A2, A3, A4, A5, A6, A7, A8)> { |
---|
| 251 | typedef A9 Argument9; |
---|
| 252 | typedef ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9> ArgumentTuple; |
---|
| 253 | typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple; |
---|
| 254 | typedef void MakeResultVoid(A1, A2, A3, A4, A5, A6, A7, A8, A9); |
---|
| 255 | typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5, A6, A7, A8, |
---|
| 256 | A9); |
---|
| 257 | }; |
---|
| 258 | |
---|
| 259 | template <typename R, typename A1, typename A2, typename A3, typename A4, |
---|
| 260 | typename A5, typename A6, typename A7, typename A8, typename A9, |
---|
| 261 | typename A10> |
---|
| 262 | struct Function<R(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)> |
---|
| 263 | : Function<R(A1, A2, A3, A4, A5, A6, A7, A8, A9)> { |
---|
| 264 | typedef A10 Argument10; |
---|
| 265 | typedef ::std::tr1::tuple<A1, A2, A3, A4, A5, A6, A7, A8, A9, |
---|
| 266 | A10> ArgumentTuple; |
---|
| 267 | typedef typename MatcherTuple<ArgumentTuple>::type ArgumentMatcherTuple; |
---|
| 268 | typedef void MakeResultVoid(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10); |
---|
| 269 | typedef IgnoredValue MakeResultIgnoredValue(A1, A2, A3, A4, A5, A6, A7, A8, |
---|
| 270 | A9, A10); |
---|
| 271 | }; |
---|
| 272 | |
---|
| 273 | } // namespace internal |
---|
| 274 | |
---|
| 275 | } // namespace testing |
---|
| 276 | |
---|
| 277 | #endif // GMOCK_INCLUDE_GMOCK_INTERNAL_GMOCK_GENERATED_INTERNAL_UTILS_H_ |
---|