37 #ifndef GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_MORE_ACTIONS_H_ 38 #define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_MORE_ACTIONS_H_ 131 #define GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS(kind0, name0) kind0 name0 132 #define GMOCK_INTERNAL_DECL_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, name1) \ 133 kind0 name0, kind1 name1 134 #define GMOCK_INTERNAL_DECL_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 136 kind0 name0, kind1 name1, kind2 name2 137 #define GMOCK_INTERNAL_DECL_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 138 kind2, name2, kind3, name3) \ 139 kind0 name0, kind1 name1, kind2 name2, kind3 name3 140 #define GMOCK_INTERNAL_DECL_HAS_5_TEMPLATE_PARAMS( \ 141 kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4) \ 142 kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4 143 #define GMOCK_INTERNAL_DECL_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 144 kind2, name2, kind3, name3, \ 145 kind4, name4, kind5, name5) \ 146 kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5 147 #define GMOCK_INTERNAL_DECL_HAS_7_TEMPLATE_PARAMS( \ 148 kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4, \ 149 kind5, name5, kind6, name6) \ 150 kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, \ 151 kind5 name5, kind6 name6 152 #define GMOCK_INTERNAL_DECL_HAS_8_TEMPLATE_PARAMS( \ 153 kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4, \ 154 kind5, name5, kind6, name6, kind7, name7) \ 155 kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, \ 156 kind5 name5, kind6 name6, kind7 name7 157 #define GMOCK_INTERNAL_DECL_HAS_9_TEMPLATE_PARAMS( \ 158 kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4, \ 159 kind5, name5, kind6, name6, kind7, name7, kind8, name8) \ 160 kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, \ 161 kind5 name5, kind6 name6, kind7 name7, kind8 name8 162 #define GMOCK_INTERNAL_DECL_HAS_10_TEMPLATE_PARAMS( \ 163 kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4, \ 164 kind5, name5, kind6, name6, kind7, name7, kind8, name8, kind9, name9) \ 165 kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, \ 166 kind5 name5, kind6 name6, kind7 name7, kind8 name8, kind9 name9 169 #define GMOCK_INTERNAL_LIST_HAS_1_TEMPLATE_PARAMS(kind0, name0) name0 170 #define GMOCK_INTERNAL_LIST_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, name1) \ 172 #define GMOCK_INTERNAL_LIST_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 175 #define GMOCK_INTERNAL_LIST_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 176 kind2, name2, kind3, name3) \ 177 name0, name1, name2, name3 178 #define GMOCK_INTERNAL_LIST_HAS_5_TEMPLATE_PARAMS( \ 179 kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4) \ 180 name0, name1, name2, name3, name4 181 #define GMOCK_INTERNAL_LIST_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ 182 kind2, name2, kind3, name3, \ 183 kind4, name4, kind5, name5) \ 184 name0, name1, name2, name3, name4, name5 185 #define GMOCK_INTERNAL_LIST_HAS_7_TEMPLATE_PARAMS( \ 186 kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4, \ 187 kind5, name5, kind6, name6) \ 188 name0, name1, name2, name3, name4, name5, name6 189 #define GMOCK_INTERNAL_LIST_HAS_8_TEMPLATE_PARAMS( \ 190 kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4, \ 191 kind5, name5, kind6, name6, kind7, name7) \ 192 name0, name1, name2, name3, name4, name5, name6, name7 193 #define GMOCK_INTERNAL_LIST_HAS_9_TEMPLATE_PARAMS( \ 194 kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4, \ 195 kind5, name5, kind6, name6, kind7, name7, kind8, name8) \ 196 name0, name1, name2, name3, name4, name5, name6, name7, name8 197 #define GMOCK_INTERNAL_LIST_HAS_10_TEMPLATE_PARAMS( \ 198 kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4, \ 199 kind5, name5, kind6, name6, kind7, name7, kind8, name8, kind9, name9) \ 200 name0, name1, name2, name3, name4, name5, name6, name7, name8, name9 203 #define GMOCK_INTERNAL_DECL_TYPE_AND_0_VALUE_PARAMS() 204 #define GMOCK_INTERNAL_DECL_TYPE_AND_1_VALUE_PARAMS(p0) , typename p0##_type 205 #define GMOCK_INTERNAL_DECL_TYPE_AND_2_VALUE_PARAMS(p0, p1) \ 206 , typename p0##_type, typename p1##_type 207 #define GMOCK_INTERNAL_DECL_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) \ 208 , typename p0##_type, typename p1##_type, typename p2##_type 209 #define GMOCK_INTERNAL_DECL_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) \ 210 , typename p0##_type, typename p1##_type, typename p2##_type, \ 212 #define GMOCK_INTERNAL_DECL_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) \ 213 , typename p0##_type, typename p1##_type, typename p2##_type, \ 214 typename p3##_type, typename p4##_type 215 #define GMOCK_INTERNAL_DECL_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) \ 216 , typename p0##_type, typename p1##_type, typename p2##_type, \ 217 typename p3##_type, typename p4##_type, typename p5##_type 218 #define GMOCK_INTERNAL_DECL_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 220 , typename p0##_type, typename p1##_type, typename p2##_type, \ 221 typename p3##_type, typename p4##_type, typename p5##_type, \ 223 #define GMOCK_INTERNAL_DECL_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 225 , typename p0##_type, typename p1##_type, typename p2##_type, \ 226 typename p3##_type, typename p4##_type, typename p5##_type, \ 227 typename p6##_type, typename p7##_type 228 #define GMOCK_INTERNAL_DECL_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 230 , typename p0##_type, typename p1##_type, typename p2##_type, \ 231 typename p3##_type, typename p4##_type, typename p5##_type, \ 232 typename p6##_type, typename p7##_type, typename p8##_type 233 #define GMOCK_INTERNAL_DECL_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 235 , typename p0##_type, typename p1##_type, typename p2##_type, \ 236 typename p3##_type, typename p4##_type, typename p5##_type, \ 237 typename p6##_type, typename p7##_type, typename p8##_type, \ 241 #define GMOCK_INTERNAL_INIT_AND_0_VALUE_PARAMS() () 242 #define GMOCK_INTERNAL_INIT_AND_1_VALUE_PARAMS(p0) \ 243 (p0##_type gmock_p0) : p0(::std::move(gmock_p0)) 244 #define GMOCK_INTERNAL_INIT_AND_2_VALUE_PARAMS(p0, p1) \ 245 (p0##_type gmock_p0, p1##_type gmock_p1) \ 246 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)) 247 #define GMOCK_INTERNAL_INIT_AND_3_VALUE_PARAMS(p0, p1, p2) \ 248 (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2) \ 249 : p0(::std::move(gmock_p0)), \ 250 p1(::std::move(gmock_p1)), \ 251 p2(::std::move(gmock_p2)) 252 #define GMOCK_INTERNAL_INIT_AND_4_VALUE_PARAMS(p0, p1, p2, p3) \ 253 (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 254 p3##_type gmock_p3) \ 255 : p0(::std::move(gmock_p0)), \ 256 p1(::std::move(gmock_p1)), \ 257 p2(::std::move(gmock_p2)), \ 258 p3(::std::move(gmock_p3)) 259 #define GMOCK_INTERNAL_INIT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) \ 260 (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 261 p3##_type gmock_p3, p4##_type gmock_p4) \ 262 : p0(::std::move(gmock_p0)), \ 263 p1(::std::move(gmock_p1)), \ 264 p2(::std::move(gmock_p2)), \ 265 p3(::std::move(gmock_p3)), \ 266 p4(::std::move(gmock_p4)) 267 #define GMOCK_INTERNAL_INIT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) \ 268 (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 269 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5) \ 270 : p0(::std::move(gmock_p0)), \ 271 p1(::std::move(gmock_p1)), \ 272 p2(::std::move(gmock_p2)), \ 273 p3(::std::move(gmock_p3)), \ 274 p4(::std::move(gmock_p4)), \ 275 p5(::std::move(gmock_p5)) 276 #define GMOCK_INTERNAL_INIT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6) \ 277 (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 278 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 279 p6##_type gmock_p6) \ 280 : p0(::std::move(gmock_p0)), \ 281 p1(::std::move(gmock_p1)), \ 282 p2(::std::move(gmock_p2)), \ 283 p3(::std::move(gmock_p3)), \ 284 p4(::std::move(gmock_p4)), \ 285 p5(::std::move(gmock_p5)), \ 286 p6(::std::move(gmock_p6)) 287 #define GMOCK_INTERNAL_INIT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7) \ 288 (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 289 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 290 p6##_type gmock_p6, p7##_type gmock_p7) \ 291 : p0(::std::move(gmock_p0)), \ 292 p1(::std::move(gmock_p1)), \ 293 p2(::std::move(gmock_p2)), \ 294 p3(::std::move(gmock_p3)), \ 295 p4(::std::move(gmock_p4)), \ 296 p5(::std::move(gmock_p5)), \ 297 p6(::std::move(gmock_p6)), \ 298 p7(::std::move(gmock_p7)) 299 #define GMOCK_INTERNAL_INIT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, \ 301 (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 302 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 303 p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8) \ 304 : p0(::std::move(gmock_p0)), \ 305 p1(::std::move(gmock_p1)), \ 306 p2(::std::move(gmock_p2)), \ 307 p3(::std::move(gmock_p3)), \ 308 p4(::std::move(gmock_p4)), \ 309 p5(::std::move(gmock_p5)), \ 310 p6(::std::move(gmock_p6)), \ 311 p7(::std::move(gmock_p7)), \ 312 p8(::std::move(gmock_p8)) 313 #define GMOCK_INTERNAL_INIT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 315 (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 316 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 317 p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \ 318 p9##_type gmock_p9) \ 319 : p0(::std::move(gmock_p0)), \ 320 p1(::std::move(gmock_p1)), \ 321 p2(::std::move(gmock_p2)), \ 322 p3(::std::move(gmock_p3)), \ 323 p4(::std::move(gmock_p4)), \ 324 p5(::std::move(gmock_p5)), \ 325 p6(::std::move(gmock_p6)), \ 326 p7(::std::move(gmock_p7)), \ 327 p8(::std::move(gmock_p8)), \ 328 p9(::std::move(gmock_p9)) 331 #define GMOCK_INTERNAL_DEFN_COPY_AND_0_VALUE_PARAMS() \ 332 {} // Avoid https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82134 333 #define GMOCK_INTERNAL_DEFN_COPY_AND_1_VALUE_PARAMS(...) = default; 334 #define GMOCK_INTERNAL_DEFN_COPY_AND_2_VALUE_PARAMS(...) = default; 335 #define GMOCK_INTERNAL_DEFN_COPY_AND_3_VALUE_PARAMS(...) = default; 336 #define GMOCK_INTERNAL_DEFN_COPY_AND_4_VALUE_PARAMS(...) = default; 337 #define GMOCK_INTERNAL_DEFN_COPY_AND_5_VALUE_PARAMS(...) = default; 338 #define GMOCK_INTERNAL_DEFN_COPY_AND_6_VALUE_PARAMS(...) = default; 339 #define GMOCK_INTERNAL_DEFN_COPY_AND_7_VALUE_PARAMS(...) = default; 340 #define GMOCK_INTERNAL_DEFN_COPY_AND_8_VALUE_PARAMS(...) = default; 341 #define GMOCK_INTERNAL_DEFN_COPY_AND_9_VALUE_PARAMS(...) = default; 342 #define GMOCK_INTERNAL_DEFN_COPY_AND_10_VALUE_PARAMS(...) = default; 345 #define GMOCK_INTERNAL_DEFN_AND_0_VALUE_PARAMS() 346 #define GMOCK_INTERNAL_DEFN_AND_1_VALUE_PARAMS(p0) p0##_type p0; 347 #define GMOCK_INTERNAL_DEFN_AND_2_VALUE_PARAMS(p0, p1) \ 350 #define GMOCK_INTERNAL_DEFN_AND_3_VALUE_PARAMS(p0, p1, p2) \ 354 #define GMOCK_INTERNAL_DEFN_AND_4_VALUE_PARAMS(p0, p1, p2, p3) \ 359 #define GMOCK_INTERNAL_DEFN_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) \ 365 #define GMOCK_INTERNAL_DEFN_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) \ 372 #define GMOCK_INTERNAL_DEFN_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6) \ 380 #define GMOCK_INTERNAL_DEFN_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7) \ 389 #define GMOCK_INTERNAL_DEFN_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, \ 400 #define GMOCK_INTERNAL_DEFN_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 414 #define GMOCK_INTERNAL_LIST_AND_0_VALUE_PARAMS() 415 #define GMOCK_INTERNAL_LIST_AND_1_VALUE_PARAMS(p0) p0 416 #define GMOCK_INTERNAL_LIST_AND_2_VALUE_PARAMS(p0, p1) p0, p1 417 #define GMOCK_INTERNAL_LIST_AND_3_VALUE_PARAMS(p0, p1, p2) p0, p1, p2 418 #define GMOCK_INTERNAL_LIST_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0, p1, p2, p3 419 #define GMOCK_INTERNAL_LIST_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) \ 421 #define GMOCK_INTERNAL_LIST_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) \ 422 p0, p1, p2, p3, p4, p5 423 #define GMOCK_INTERNAL_LIST_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6) \ 424 p0, p1, p2, p3, p4, p5, p6 425 #define GMOCK_INTERNAL_LIST_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7) \ 426 p0, p1, p2, p3, p4, p5, p6, p7 427 #define GMOCK_INTERNAL_LIST_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, \ 429 p0, p1, p2, p3, p4, p5, p6, p7, p8 430 #define GMOCK_INTERNAL_LIST_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 432 p0, p1, p2, p3, p4, p5, p6, p7, p8, p9 435 #define GMOCK_INTERNAL_LIST_TYPE_AND_0_VALUE_PARAMS() 436 #define GMOCK_INTERNAL_LIST_TYPE_AND_1_VALUE_PARAMS(p0) , p0##_type 437 #define GMOCK_INTERNAL_LIST_TYPE_AND_2_VALUE_PARAMS(p0, p1) \ 438 , p0##_type, p1##_type 439 #define GMOCK_INTERNAL_LIST_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) \ 440 , p0##_type, p1##_type, p2##_type 441 #define GMOCK_INTERNAL_LIST_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) \ 442 , p0##_type, p1##_type, p2##_type, p3##_type 443 #define GMOCK_INTERNAL_LIST_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) \ 444 , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type 445 #define GMOCK_INTERNAL_LIST_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) \ 446 , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type 447 #define GMOCK_INTERNAL_LIST_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 449 , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, p6##_type 450 #define GMOCK_INTERNAL_LIST_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 452 , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, \ 454 #define GMOCK_INTERNAL_LIST_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 456 , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, \ 457 p6##_type, p7##_type, p8##_type 458 #define GMOCK_INTERNAL_LIST_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ 460 , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, \ 461 p6##_type, p7##_type, p8##_type, p9##_type 464 #define GMOCK_INTERNAL_DECL_AND_0_VALUE_PARAMS() 465 #define GMOCK_INTERNAL_DECL_AND_1_VALUE_PARAMS(p0) p0##_type p0 466 #define GMOCK_INTERNAL_DECL_AND_2_VALUE_PARAMS(p0, p1) \ 467 p0##_type p0, p1##_type p1 468 #define GMOCK_INTERNAL_DECL_AND_3_VALUE_PARAMS(p0, p1, p2) \ 469 p0##_type p0, p1##_type p1, p2##_type p2 470 #define GMOCK_INTERNAL_DECL_AND_4_VALUE_PARAMS(p0, p1, p2, p3) \ 471 p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3 472 #define GMOCK_INTERNAL_DECL_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) \ 473 p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4 474 #define GMOCK_INTERNAL_DECL_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) \ 475 p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ 477 #define GMOCK_INTERNAL_DECL_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6) \ 478 p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ 479 p5##_type p5, p6##_type p6 480 #define GMOCK_INTERNAL_DECL_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7) \ 481 p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ 482 p5##_type p5, p6##_type p6, p7##_type p7 483 #define GMOCK_INTERNAL_DECL_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, \ 485 p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ 486 p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8 487 #define GMOCK_INTERNAL_DECL_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 489 p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ 490 p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, p9##_type p9 493 #define GMOCK_INTERNAL_COUNT_AND_0_VALUE_PARAMS() 494 #define GMOCK_INTERNAL_COUNT_AND_1_VALUE_PARAMS(p0) P 495 #define GMOCK_INTERNAL_COUNT_AND_2_VALUE_PARAMS(p0, p1) P2 496 #define GMOCK_INTERNAL_COUNT_AND_3_VALUE_PARAMS(p0, p1, p2) P3 497 #define GMOCK_INTERNAL_COUNT_AND_4_VALUE_PARAMS(p0, p1, p2, p3) P4 498 #define GMOCK_INTERNAL_COUNT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) P5 499 #define GMOCK_INTERNAL_COUNT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) P6 500 #define GMOCK_INTERNAL_COUNT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6) P7 501 #define GMOCK_INTERNAL_COUNT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 504 #define GMOCK_INTERNAL_COUNT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 507 #define GMOCK_INTERNAL_COUNT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ 512 #define GMOCK_ACTION_CLASS_(name, value_params) \ 513 GTEST_CONCAT_TOKEN_(name##Action, GMOCK_INTERNAL_COUNT_##value_params) 515 #define ACTION_TEMPLATE(name, template_params, value_params) \ 516 template <GMOCK_INTERNAL_DECL_##template_params \ 517 GMOCK_INTERNAL_DECL_TYPE_##value_params> \ 518 class GMOCK_ACTION_CLASS_(name, value_params) { \ 520 explicit GMOCK_ACTION_CLASS_(name, value_params)( \ 521 GMOCK_INTERNAL_DECL_##value_params) \ 522 GMOCK_PP_IF(GMOCK_PP_IS_EMPTY(GMOCK_INTERNAL_COUNT_##value_params), \ 525 : impl_(std::make_shared<gmock_Impl>( \ 526 GMOCK_INTERNAL_LIST_##value_params)){}) \ 527 GMOCK_ACTION_CLASS_(name, value_params)(const GMOCK_ACTION_CLASS_( \ 528 name, value_params) &) noexcept GMOCK_INTERNAL_DEFN_COPY_ \ 529 ##value_params GMOCK_ACTION_CLASS_(name, value_params)( \ 530 GMOCK_ACTION_CLASS_(name, value_params) &&) noexcept \ 531 GMOCK_INTERNAL_DEFN_COPY_##value_params template <typename F> \ 532 operator ::testing::Action<F>() const { \ 533 return GMOCK_PP_IF( \ 534 GMOCK_PP_IS_EMPTY(GMOCK_INTERNAL_COUNT_##value_params), \ 535 (::testing::internal::MakeAction<F, gmock_Impl>()), \ 536 (::testing::internal::MakeAction<F>(impl_))); \ 542 explicit gmock_Impl GMOCK_INTERNAL_INIT_##value_params {} \ 543 template <typename function_type, typename return_type, \ 544 typename args_type, GMOCK_ACTION_TEMPLATE_ARGS_NAMES_> \ 545 return_type gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_) const; \ 546 GMOCK_INTERNAL_DEFN_##value_params \ 548 GMOCK_PP_IF(GMOCK_PP_IS_EMPTY(GMOCK_INTERNAL_COUNT_##value_params), , \ 549 std::shared_ptr<const gmock_Impl> impl_;) \ 551 template <GMOCK_INTERNAL_DECL_##template_params \ 552 GMOCK_INTERNAL_DECL_TYPE_##value_params> \ 553 GMOCK_ACTION_CLASS_( \ 554 name, value_params)<GMOCK_INTERNAL_LIST_##template_params \ 555 GMOCK_INTERNAL_LIST_TYPE_##value_params> \ 556 name(GMOCK_INTERNAL_DECL_##value_params) GTEST_MUST_USE_RESULT_; \ 557 template <GMOCK_INTERNAL_DECL_##template_params \ 558 GMOCK_INTERNAL_DECL_TYPE_##value_params> \ 559 inline GMOCK_ACTION_CLASS_( \ 560 name, value_params)<GMOCK_INTERNAL_LIST_##template_params \ 561 GMOCK_INTERNAL_LIST_TYPE_##value_params> \ 562 name(GMOCK_INTERNAL_DECL_##value_params) { \ 563 return GMOCK_ACTION_CLASS_( \ 564 name, value_params)<GMOCK_INTERNAL_LIST_##template_params \ 565 GMOCK_INTERNAL_LIST_TYPE_##value_params>( \ 566 GMOCK_INTERNAL_LIST_##value_params); \ 568 template <GMOCK_INTERNAL_DECL_##template_params \ 569 GMOCK_INTERNAL_DECL_TYPE_##value_params> \ 570 template <typename function_type, typename return_type, typename args_type, \ 571 GMOCK_ACTION_TEMPLATE_ARGS_NAMES_> \ 572 return_type GMOCK_ACTION_CLASS_( \ 573 name, value_params)<GMOCK_INTERNAL_LIST_##template_params \ 574 GMOCK_INTERNAL_LIST_TYPE_##value_params>:: \ 575 gmock_Impl::gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) \ 586 #pragma warning(push) 587 #pragma warning(disable : 4100) 596 template <
typename F,
typename... Args>
601 template <std::size_t
index,
typename... Params>
603 template <
typename... Args,
604 typename =
typename std::enable_if<(index <
sizeof...(Args))>
::type>
606 std::get<index>(std::forward_as_tuple(std::forward<Args>(args)...)),
607 std::declval<const Params&>()...)) {
609 std::forward<Args>(args)...);
610 return params.Apply([&](
const Params&... unpacked_params) {
611 auto&& callable = args_tuple.template Get<index>();
613 std::forward<decltype(callable)>(callable), unpacked_params...);
649 template <std::size_t
index,
typename... Params>
662 #endif // GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_MORE_ACTIONS_H_
internal::FlatTuple< Params... > params
auto operator()(Args &&... args) const -> decltype(internal::InvokeArgument(std::get< index >(std::forward_as_tuple(std::forward< Args >(args)...)), std::declval< const Params &>()...))
auto InvokeArgument(F f, Args... args) -> decltype(f(args...))