// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

// THIS FILE IS AUTOGENERATED!
// DO NOT EDIT!
//

#ifndef MICROMOCKCALLMACROS_H
#define MICROMOCKCALLMACROS_H

#pragma once

#define MOCK_ANY_METHOD_0(static_, STATIC_, prefix, resultType, name) \
static_ CMockMethodCall<resultType>& prefix Expected_##name() \
{ \
    CMockMethodCall<resultType>* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 0, NULL); \
        RECORD_EXPECTED_##STATIC_##MOCK_CALL(mockMethodCall); \
    return *mockMethodCall; \
} \
static_ resultType prefix name() \
{ \
    CMockMethodCallBase* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 0, NULL); \
        bool failed=false; \
        CMockValueBase* result = RECORD_ACTUAL_##STATIC_##MOCK_CALL(mockMethodCall, &failed); \
        if((result!=NULL)&&(failed)) return dynamic_cast<CMockValue<resultType>*>(result)->GetValue();

#define MOCK_METHOD_0(prefix, resultType, name) \
MOCK_ANY_METHOD_0(,,prefix, resultType, name)

#define MOCK_STATIC_METHOD_0(prefix, resultType, name) \
MOCK_ANY_METHOD_0(static, STATIC_, prefix, resultType, name)

#define DECLARE_GLOBAL_MOCK_METHOD_0(mockClass, prefix, resultType, name) \
prefix resultType name() \
{ \
    return mockClass::name();\
} \

#define MOCK_ANY_METHOD_1(static_, STATIC_, prefix, resultType, name, arg1Type, arg1Value) \
static_ CMockMethodCall<resultType>& prefix Expected_##name(arg1Type arg1Value) \
{ \
    CMockCallArgumentBase* args[1]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    CMockMethodCall<resultType>* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 1, args); \
        RECORD_EXPECTED_##STATIC_##MOCK_CALL(mockMethodCall); \
    return *mockMethodCall; \
} \
static_ resultType prefix name(arg1Type arg1Value) \
{ \
    CMockCallArgumentBase* args[1]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    CMockMethodCallBase* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 1, args); \
        bool failed=false; \
        CMockValueBase* result = RECORD_ACTUAL_##STATIC_##MOCK_CALL(mockMethodCall, &failed); \
        if((result!=NULL)&&(failed)) return dynamic_cast<CMockValue<resultType>*>(result)->GetValue();

#define MOCK_METHOD_1(prefix, resultType, name, arg1Type, arg1Value) \
MOCK_ANY_METHOD_1(,,prefix, resultType, name, arg1Type, arg1Value)

#define MOCK_STATIC_METHOD_1(prefix, resultType, name, arg1Type, arg1Value) \
MOCK_ANY_METHOD_1(static, STATIC_, prefix, resultType, name, arg1Type, arg1Value)

#define DECLARE_GLOBAL_MOCK_METHOD_1(mockClass, prefix, resultType, name, arg1Type, arg1Value) \
prefix resultType name(arg1Type arg1Value) \
{ \
    return mockClass::name(arg1Value);\
} \

#define MOCK_ANY_METHOD_2(static_, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value) \
static_ CMockMethodCall<resultType>& prefix Expected_##name(arg1Type arg1Value, arg2Type arg2Value) \
{ \
    CMockCallArgumentBase* args[2]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    CMockMethodCall<resultType>* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 2, args); \
        RECORD_EXPECTED_##STATIC_##MOCK_CALL(mockMethodCall); \
    return *mockMethodCall; \
} \
static_ resultType prefix name(arg1Type arg1Value, arg2Type arg2Value) \
{ \
    CMockCallArgumentBase* args[2]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    CMockMethodCallBase* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 2, args); \
        bool failed=false; \
        CMockValueBase* result = RECORD_ACTUAL_##STATIC_##MOCK_CALL(mockMethodCall, &failed); \
        if((result!=NULL)&&(failed)) return dynamic_cast<CMockValue<resultType>*>(result)->GetValue();

#define MOCK_METHOD_2(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value) \
MOCK_ANY_METHOD_2(,,prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value)

#define MOCK_STATIC_METHOD_2(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value) \
MOCK_ANY_METHOD_2(static, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value)

#define DECLARE_GLOBAL_MOCK_METHOD_2(mockClass, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value) \
prefix resultType name(arg1Type arg1Value, arg2Type arg2Value) \
{ \
    return mockClass::name(arg1Value,arg2Value);\
} \

#define MOCK_ANY_METHOD_3(static_, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value) \
static_ CMockMethodCall<resultType>& prefix Expected_##name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value) \
{ \
    CMockCallArgumentBase* args[3]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    CMockMethodCall<resultType>* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 3, args); \
        RECORD_EXPECTED_##STATIC_##MOCK_CALL(mockMethodCall); \
    return *mockMethodCall; \
} \
static_ resultType prefix name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value) \
{ \
    CMockCallArgumentBase* args[3]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    CMockMethodCallBase* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 3, args); \
        bool failed=false; \
        CMockValueBase* result = RECORD_ACTUAL_##STATIC_##MOCK_CALL(mockMethodCall, &failed); \
        if((result!=NULL)&&(failed)) return dynamic_cast<CMockValue<resultType>*>(result)->GetValue();

#define MOCK_METHOD_3(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value) \
MOCK_ANY_METHOD_3(,,prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value)

#define MOCK_STATIC_METHOD_3(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value) \
MOCK_ANY_METHOD_3(static, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value)

#define DECLARE_GLOBAL_MOCK_METHOD_3(mockClass, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value) \
prefix resultType name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value) \
{ \
    return mockClass::name(arg1Value,arg2Value,arg3Value);\
} \

#define MOCK_ANY_METHOD_4(static_, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value) \
static_ CMockMethodCall<resultType>& prefix Expected_##name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value) \
{ \
    CMockCallArgumentBase* args[4]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    CMockMethodCall<resultType>* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 4, args); \
        RECORD_EXPECTED_##STATIC_##MOCK_CALL(mockMethodCall); \
    return *mockMethodCall; \
} \
static_ resultType prefix name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value) \
{ \
    CMockCallArgumentBase* args[4]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    CMockMethodCallBase* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 4, args); \
        bool failed=false; \
        CMockValueBase* result = RECORD_ACTUAL_##STATIC_##MOCK_CALL(mockMethodCall, &failed); \
        if((result!=NULL)&&(failed)) return dynamic_cast<CMockValue<resultType>*>(result)->GetValue();

#define MOCK_METHOD_4(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value) \
MOCK_ANY_METHOD_4(,,prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value)

#define MOCK_STATIC_METHOD_4(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value) \
MOCK_ANY_METHOD_4(static, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value)

#define DECLARE_GLOBAL_MOCK_METHOD_4(mockClass, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value) \
prefix resultType name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value) \
{ \
    return mockClass::name(arg1Value,arg2Value,arg3Value,arg4Value);\
} \

#define MOCK_ANY_METHOD_5(static_, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value) \
static_ CMockMethodCall<resultType>& prefix Expected_##name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value) \
{ \
    CMockCallArgumentBase* args[5]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    CMockMethodCall<resultType>* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 5, args); \
        RECORD_EXPECTED_##STATIC_##MOCK_CALL(mockMethodCall); \
    return *mockMethodCall; \
} \
static_ resultType prefix name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value) \
{ \
    CMockCallArgumentBase* args[5]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    CMockMethodCallBase* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 5, args); \
        bool failed=false; \
        CMockValueBase* result = RECORD_ACTUAL_##STATIC_##MOCK_CALL(mockMethodCall, &failed); \
        if((result!=NULL)&&(failed)) return dynamic_cast<CMockValue<resultType>*>(result)->GetValue();

#define MOCK_METHOD_5(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value) \
MOCK_ANY_METHOD_5(,,prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value)

#define MOCK_STATIC_METHOD_5(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value) \
MOCK_ANY_METHOD_5(static, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value)

#define DECLARE_GLOBAL_MOCK_METHOD_5(mockClass, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value) \
prefix resultType name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value) \
{ \
    return mockClass::name(arg1Value,arg2Value,arg3Value,arg4Value,arg5Value);\
} \

#define MOCK_ANY_METHOD_6(static_, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value) \
static_ CMockMethodCall<resultType>& prefix Expected_##name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value) \
{ \
    CMockCallArgumentBase* args[6]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    CMockMethodCall<resultType>* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 6, args); \
        RECORD_EXPECTED_##STATIC_##MOCK_CALL(mockMethodCall); \
    return *mockMethodCall; \
} \
static_ resultType prefix name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value) \
{ \
    CMockCallArgumentBase* args[6]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    CMockMethodCallBase* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 6, args); \
        bool failed=false; \
        CMockValueBase* result = RECORD_ACTUAL_##STATIC_##MOCK_CALL(mockMethodCall, &failed); \
        if((result!=NULL)&&(failed)) return dynamic_cast<CMockValue<resultType>*>(result)->GetValue();

#define MOCK_METHOD_6(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value) \
MOCK_ANY_METHOD_6(,,prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value)

#define MOCK_STATIC_METHOD_6(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value) \
MOCK_ANY_METHOD_6(static, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value)

#define DECLARE_GLOBAL_MOCK_METHOD_6(mockClass, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value) \
prefix resultType name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value) \
{ \
    return mockClass::name(arg1Value,arg2Value,arg3Value,arg4Value,arg5Value,arg6Value);\
} \

#define MOCK_ANY_METHOD_7(static_, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value) \
static_ CMockMethodCall<resultType>& prefix Expected_##name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value) \
{ \
    CMockCallArgumentBase* args[7]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    CMockMethodCall<resultType>* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 7, args); \
        RECORD_EXPECTED_##STATIC_##MOCK_CALL(mockMethodCall); \
    return *mockMethodCall; \
} \
static_ resultType prefix name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value) \
{ \
    CMockCallArgumentBase* args[7]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    CMockMethodCallBase* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 7, args); \
        bool failed=false; \
        CMockValueBase* result = RECORD_ACTUAL_##STATIC_##MOCK_CALL(mockMethodCall, &failed); \
        if((result!=NULL)&&(failed)) return dynamic_cast<CMockValue<resultType>*>(result)->GetValue();

#define MOCK_METHOD_7(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value) \
MOCK_ANY_METHOD_7(,,prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value)

#define MOCK_STATIC_METHOD_7(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value) \
MOCK_ANY_METHOD_7(static, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value)

#define DECLARE_GLOBAL_MOCK_METHOD_7(mockClass, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value) \
prefix resultType name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value) \
{ \
    return mockClass::name(arg1Value,arg2Value,arg3Value,arg4Value,arg5Value,arg6Value,arg7Value);\
} \

#define MOCK_ANY_METHOD_8(static_, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value) \
static_ CMockMethodCall<resultType>& prefix Expected_##name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value) \
{ \
    CMockCallArgumentBase* args[8]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    CMockMethodCall<resultType>* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 8, args); \
        RECORD_EXPECTED_##STATIC_##MOCK_CALL(mockMethodCall); \
    return *mockMethodCall; \
} \
static_ resultType prefix name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value) \
{ \
    CMockCallArgumentBase* args[8]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    CMockMethodCallBase* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 8, args); \
        bool failed=false; \
        CMockValueBase* result = RECORD_ACTUAL_##STATIC_##MOCK_CALL(mockMethodCall, &failed); \
        if((result!=NULL)&&(failed)) return dynamic_cast<CMockValue<resultType>*>(result)->GetValue();

#define MOCK_METHOD_8(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value) \
MOCK_ANY_METHOD_8(,,prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value)

#define MOCK_STATIC_METHOD_8(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value) \
MOCK_ANY_METHOD_8(static, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value)

#define DECLARE_GLOBAL_MOCK_METHOD_8(mockClass, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value) \
prefix resultType name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value) \
{ \
    return mockClass::name(arg1Value,arg2Value,arg3Value,arg4Value,arg5Value,arg6Value,arg7Value,arg8Value);\
} \

#define MOCK_ANY_METHOD_9(static_, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value) \
static_ CMockMethodCall<resultType>& prefix Expected_##name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value) \
{ \
    CMockCallArgumentBase* args[9]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    args[8] = new CMockCallArgument<arg9Type>(arg9Value); \
    CMockMethodCall<resultType>* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 9, args); \
        RECORD_EXPECTED_##STATIC_##MOCK_CALL(mockMethodCall); \
    return *mockMethodCall; \
} \
static_ resultType prefix name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value) \
{ \
    CMockCallArgumentBase* args[9]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    args[8] = new CMockCallArgument<arg9Type>(arg9Value); \
    CMockMethodCallBase* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 9, args); \
        bool failed=false; \
        CMockValueBase* result = RECORD_ACTUAL_##STATIC_##MOCK_CALL(mockMethodCall, &failed); \
        if((result!=NULL)&&(failed)) return dynamic_cast<CMockValue<resultType>*>(result)->GetValue();

#define MOCK_METHOD_9(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value) \
MOCK_ANY_METHOD_9(,,prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value)

#define MOCK_STATIC_METHOD_9(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value) \
MOCK_ANY_METHOD_9(static, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value)

#define DECLARE_GLOBAL_MOCK_METHOD_9(mockClass, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value) \
prefix resultType name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value) \
{ \
    return mockClass::name(arg1Value,arg2Value,arg3Value,arg4Value,arg5Value,arg6Value,arg7Value,arg8Value,arg9Value);\
} \

#define MOCK_ANY_METHOD_10(static_, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value) \
static_ CMockMethodCall<resultType>& prefix Expected_##name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value) \
{ \
    CMockCallArgumentBase* args[10]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    args[8] = new CMockCallArgument<arg9Type>(arg9Value); \
    args[9] = new CMockCallArgument<arg10Type>(arg10Value); \
    CMockMethodCall<resultType>* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 10, args); \
        RECORD_EXPECTED_##STATIC_##MOCK_CALL(mockMethodCall); \
    return *mockMethodCall; \
} \
static_ resultType prefix name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value) \
{ \
    CMockCallArgumentBase* args[10]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    args[8] = new CMockCallArgument<arg9Type>(arg9Value); \
    args[9] = new CMockCallArgument<arg10Type>(arg10Value); \
    CMockMethodCallBase* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 10, args); \
        bool failed=false; \
        CMockValueBase* result = RECORD_ACTUAL_##STATIC_##MOCK_CALL(mockMethodCall, &failed); \
        if((result!=NULL)&&(failed)) return dynamic_cast<CMockValue<resultType>*>(result)->GetValue();

#define MOCK_METHOD_10(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value) \
MOCK_ANY_METHOD_10(,,prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value)

#define MOCK_STATIC_METHOD_10(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value) \
MOCK_ANY_METHOD_10(static, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value)

#define DECLARE_GLOBAL_MOCK_METHOD_10(mockClass, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value) \
prefix resultType name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value) \
{ \
    return mockClass::name(arg1Value,arg2Value,arg3Value,arg4Value,arg5Value,arg6Value,arg7Value,arg8Value,arg9Value,arg10Value);\
} \

#define MOCK_ANY_METHOD_11(static_, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value) \
static_ CMockMethodCall<resultType>& prefix Expected_##name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value) \
{ \
    CMockCallArgumentBase* args[11]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    args[8] = new CMockCallArgument<arg9Type>(arg9Value); \
    args[9] = new CMockCallArgument<arg10Type>(arg10Value); \
    args[10] = new CMockCallArgument<arg11Type>(arg11Value); \
    CMockMethodCall<resultType>* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 11, args); \
        RECORD_EXPECTED_##STATIC_##MOCK_CALL(mockMethodCall); \
    return *mockMethodCall; \
} \
static_ resultType prefix name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value) \
{ \
    CMockCallArgumentBase* args[11]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    args[8] = new CMockCallArgument<arg9Type>(arg9Value); \
    args[9] = new CMockCallArgument<arg10Type>(arg10Value); \
    args[10] = new CMockCallArgument<arg11Type>(arg11Value); \
    CMockMethodCallBase* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 11, args); \
        bool failed=false; \
        CMockValueBase* result = RECORD_ACTUAL_##STATIC_##MOCK_CALL(mockMethodCall, &failed); \
        if((result!=NULL)&&(failed)) return dynamic_cast<CMockValue<resultType>*>(result)->GetValue();

#define MOCK_METHOD_11(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value) \
MOCK_ANY_METHOD_11(,,prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value)

#define MOCK_STATIC_METHOD_11(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value) \
MOCK_ANY_METHOD_11(static, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value)

#define DECLARE_GLOBAL_MOCK_METHOD_11(mockClass, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value) \
prefix resultType name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value) \
{ \
    return mockClass::name(arg1Value,arg2Value,arg3Value,arg4Value,arg5Value,arg6Value,arg7Value,arg8Value,arg9Value,arg10Value,arg11Value);\
} \

#define MOCK_ANY_METHOD_12(static_, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value) \
static_ CMockMethodCall<resultType>& prefix Expected_##name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value, arg12Type arg12Value) \
{ \
    CMockCallArgumentBase* args[12]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    args[8] = new CMockCallArgument<arg9Type>(arg9Value); \
    args[9] = new CMockCallArgument<arg10Type>(arg10Value); \
    args[10] = new CMockCallArgument<arg11Type>(arg11Value); \
    args[11] = new CMockCallArgument<arg12Type>(arg12Value); \
    CMockMethodCall<resultType>* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 12, args); \
        RECORD_EXPECTED_##STATIC_##MOCK_CALL(mockMethodCall); \
    return *mockMethodCall; \
} \
static_ resultType prefix name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value, arg12Type arg12Value) \
{ \
    CMockCallArgumentBase* args[12]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    args[8] = new CMockCallArgument<arg9Type>(arg9Value); \
    args[9] = new CMockCallArgument<arg10Type>(arg10Value); \
    args[10] = new CMockCallArgument<arg11Type>(arg11Value); \
    args[11] = new CMockCallArgument<arg12Type>(arg12Value); \
    CMockMethodCallBase* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 12, args); \
        bool failed=false; \
        CMockValueBase* result = RECORD_ACTUAL_##STATIC_##MOCK_CALL(mockMethodCall, &failed); \
        if((result!=NULL)&&(failed)) return dynamic_cast<CMockValue<resultType>*>(result)->GetValue();

#define MOCK_METHOD_12(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value) \
MOCK_ANY_METHOD_12(,,prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value)

#define MOCK_STATIC_METHOD_12(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value) \
MOCK_ANY_METHOD_12(static, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value)

#define DECLARE_GLOBAL_MOCK_METHOD_12(mockClass, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value) \
prefix resultType name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value, arg12Type arg12Value) \
{ \
    return mockClass::name(arg1Value,arg2Value,arg3Value,arg4Value,arg5Value,arg6Value,arg7Value,arg8Value,arg9Value,arg10Value,arg11Value,arg12Value);\
} \

#define MOCK_ANY_METHOD_13(static_, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value) \
static_ CMockMethodCall<resultType>& prefix Expected_##name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value, arg12Type arg12Value, arg13Type arg13Value) \
{ \
    CMockCallArgumentBase* args[13]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    args[8] = new CMockCallArgument<arg9Type>(arg9Value); \
    args[9] = new CMockCallArgument<arg10Type>(arg10Value); \
    args[10] = new CMockCallArgument<arg11Type>(arg11Value); \
    args[11] = new CMockCallArgument<arg12Type>(arg12Value); \
    args[12] = new CMockCallArgument<arg13Type>(arg13Value); \
    CMockMethodCall<resultType>* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 13, args); \
        RECORD_EXPECTED_##STATIC_##MOCK_CALL(mockMethodCall); \
    return *mockMethodCall; \
} \
static_ resultType prefix name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value, arg12Type arg12Value, arg13Type arg13Value) \
{ \
    CMockCallArgumentBase* args[13]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    args[8] = new CMockCallArgument<arg9Type>(arg9Value); \
    args[9] = new CMockCallArgument<arg10Type>(arg10Value); \
    args[10] = new CMockCallArgument<arg11Type>(arg11Value); \
    args[11] = new CMockCallArgument<arg12Type>(arg12Value); \
    args[12] = new CMockCallArgument<arg13Type>(arg13Value); \
    CMockMethodCallBase* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 13, args); \
        bool failed=false; \
        CMockValueBase* result = RECORD_ACTUAL_##STATIC_##MOCK_CALL(mockMethodCall, &failed); \
        if((result!=NULL)&&(failed)) return dynamic_cast<CMockValue<resultType>*>(result)->GetValue();

#define MOCK_METHOD_13(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value) \
MOCK_ANY_METHOD_13(,,prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value)

#define MOCK_STATIC_METHOD_13(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value) \
MOCK_ANY_METHOD_13(static, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value)

#define DECLARE_GLOBAL_MOCK_METHOD_13(mockClass, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value) \
prefix resultType name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value, arg12Type arg12Value, arg13Type arg13Value) \
{ \
    return mockClass::name(arg1Value,arg2Value,arg3Value,arg4Value,arg5Value,arg6Value,arg7Value,arg8Value,arg9Value,arg10Value,arg11Value,arg12Value,arg13Value);\
} \

#define MOCK_ANY_METHOD_14(static_, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value) \
static_ CMockMethodCall<resultType>& prefix Expected_##name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value, arg12Type arg12Value, arg13Type arg13Value, arg14Type arg14Value) \
{ \
    CMockCallArgumentBase* args[14]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    args[8] = new CMockCallArgument<arg9Type>(arg9Value); \
    args[9] = new CMockCallArgument<arg10Type>(arg10Value); \
    args[10] = new CMockCallArgument<arg11Type>(arg11Value); \
    args[11] = new CMockCallArgument<arg12Type>(arg12Value); \
    args[12] = new CMockCallArgument<arg13Type>(arg13Value); \
    args[13] = new CMockCallArgument<arg14Type>(arg14Value); \
    CMockMethodCall<resultType>* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 14, args); \
        RECORD_EXPECTED_##STATIC_##MOCK_CALL(mockMethodCall); \
    return *mockMethodCall; \
} \
static_ resultType prefix name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value, arg12Type arg12Value, arg13Type arg13Value, arg14Type arg14Value) \
{ \
    CMockCallArgumentBase* args[14]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    args[8] = new CMockCallArgument<arg9Type>(arg9Value); \
    args[9] = new CMockCallArgument<arg10Type>(arg10Value); \
    args[10] = new CMockCallArgument<arg11Type>(arg11Value); \
    args[11] = new CMockCallArgument<arg12Type>(arg12Value); \
    args[12] = new CMockCallArgument<arg13Type>(arg13Value); \
    args[13] = new CMockCallArgument<arg14Type>(arg14Value); \
    CMockMethodCallBase* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 14, args); \
        bool failed=false; \
        CMockValueBase* result = RECORD_ACTUAL_##STATIC_##MOCK_CALL(mockMethodCall, &failed); \
        if((result!=NULL)&&(failed)) return dynamic_cast<CMockValue<resultType>*>(result)->GetValue();

#define MOCK_METHOD_14(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value) \
MOCK_ANY_METHOD_14(,,prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value)

#define MOCK_STATIC_METHOD_14(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value) \
MOCK_ANY_METHOD_14(static, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value)

#define DECLARE_GLOBAL_MOCK_METHOD_14(mockClass, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value) \
prefix resultType name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value, arg12Type arg12Value, arg13Type arg13Value, arg14Type arg14Value) \
{ \
    return mockClass::name(arg1Value,arg2Value,arg3Value,arg4Value,arg5Value,arg6Value,arg7Value,arg8Value,arg9Value,arg10Value,arg11Value,arg12Value,arg13Value,arg14Value);\
} \

#define MOCK_ANY_METHOD_15(static_, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value, arg15Type, arg15Value) \
static_ CMockMethodCall<resultType>& prefix Expected_##name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value, arg12Type arg12Value, arg13Type arg13Value, arg14Type arg14Value, arg15Type arg15Value) \
{ \
    CMockCallArgumentBase* args[15]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    args[8] = new CMockCallArgument<arg9Type>(arg9Value); \
    args[9] = new CMockCallArgument<arg10Type>(arg10Value); \
    args[10] = new CMockCallArgument<arg11Type>(arg11Value); \
    args[11] = new CMockCallArgument<arg12Type>(arg12Value); \
    args[12] = new CMockCallArgument<arg13Type>(arg13Value); \
    args[13] = new CMockCallArgument<arg14Type>(arg14Value); \
    args[14] = new CMockCallArgument<arg15Type>(arg15Value); \
    CMockMethodCall<resultType>* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 15, args); \
        RECORD_EXPECTED_##STATIC_##MOCK_CALL(mockMethodCall); \
    return *mockMethodCall; \
} \
static_ resultType prefix name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value, arg12Type arg12Value, arg13Type arg13Value, arg14Type arg14Value, arg15Type arg15Value) \
{ \
    CMockCallArgumentBase* args[15]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    args[8] = new CMockCallArgument<arg9Type>(arg9Value); \
    args[9] = new CMockCallArgument<arg10Type>(arg10Value); \
    args[10] = new CMockCallArgument<arg11Type>(arg11Value); \
    args[11] = new CMockCallArgument<arg12Type>(arg12Value); \
    args[12] = new CMockCallArgument<arg13Type>(arg13Value); \
    args[13] = new CMockCallArgument<arg14Type>(arg14Value); \
    args[14] = new CMockCallArgument<arg15Type>(arg15Value); \
    CMockMethodCallBase* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 15, args); \
        bool failed=false; \
        CMockValueBase* result = RECORD_ACTUAL_##STATIC_##MOCK_CALL(mockMethodCall, &failed); \
        if((result!=NULL)&&(failed)) return dynamic_cast<CMockValue<resultType>*>(result)->GetValue();

#define MOCK_METHOD_15(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value, arg15Type, arg15Value) \
MOCK_ANY_METHOD_15(,,prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value, arg15Type, arg15Value)

#define MOCK_STATIC_METHOD_15(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value, arg15Type, arg15Value) \
MOCK_ANY_METHOD_15(static, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value, arg15Type, arg15Value)

#define DECLARE_GLOBAL_MOCK_METHOD_15(mockClass, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value, arg15Type, arg15Value) \
prefix resultType name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value, arg12Type arg12Value, arg13Type arg13Value, arg14Type arg14Value, arg15Type arg15Value) \
{ \
    return mockClass::name(arg1Value,arg2Value,arg3Value,arg4Value,arg5Value,arg6Value,arg7Value,arg8Value,arg9Value,arg10Value,arg11Value,arg12Value,arg13Value,arg14Value,arg15Value);\
} \

#define MOCK_ANY_METHOD_16(static_, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value, arg15Type, arg15Value, arg16Type, arg16Value) \
static_ CMockMethodCall<resultType>& prefix Expected_##name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value, arg12Type arg12Value, arg13Type arg13Value, arg14Type arg14Value, arg15Type arg15Value, arg16Type arg16Value) \
{ \
    CMockCallArgumentBase* args[16]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    args[8] = new CMockCallArgument<arg9Type>(arg9Value); \
    args[9] = new CMockCallArgument<arg10Type>(arg10Value); \
    args[10] = new CMockCallArgument<arg11Type>(arg11Value); \
    args[11] = new CMockCallArgument<arg12Type>(arg12Value); \
    args[12] = new CMockCallArgument<arg13Type>(arg13Value); \
    args[13] = new CMockCallArgument<arg14Type>(arg14Value); \
    args[14] = new CMockCallArgument<arg15Type>(arg15Value); \
    args[15] = new CMockCallArgument<arg16Type>(arg16Value); \
    CMockMethodCall<resultType>* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 16, args); \
        RECORD_EXPECTED_##STATIC_##MOCK_CALL(mockMethodCall); \
    return *mockMethodCall; \
} \
static_ resultType prefix name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value, arg12Type arg12Value, arg13Type arg13Value, arg14Type arg14Value, arg15Type arg15Value, arg16Type arg16Value) \
{ \
    CMockCallArgumentBase* args[16]; \
    args[0] = new CMockCallArgument<arg1Type>(arg1Value); \
    args[1] = new CMockCallArgument<arg2Type>(arg2Value); \
    args[2] = new CMockCallArgument<arg3Type>(arg3Value); \
    args[3] = new CMockCallArgument<arg4Type>(arg4Value); \
    args[4] = new CMockCallArgument<arg5Type>(arg5Value); \
    args[5] = new CMockCallArgument<arg6Type>(arg6Value); \
    args[6] = new CMockCallArgument<arg7Type>(arg7Value); \
    args[7] = new CMockCallArgument<arg8Type>(arg8Value); \
    args[8] = new CMockCallArgument<arg9Type>(arg9Value); \
    args[9] = new CMockCallArgument<arg10Type>(arg10Value); \
    args[10] = new CMockCallArgument<arg11Type>(arg11Value); \
    args[11] = new CMockCallArgument<arg12Type>(arg12Value); \
    args[12] = new CMockCallArgument<arg13Type>(arg13Value); \
    args[13] = new CMockCallArgument<arg14Type>(arg14Value); \
    args[14] = new CMockCallArgument<arg15Type>(arg15Value); \
    args[15] = new CMockCallArgument<arg16Type>(arg16Value); \
    CMockMethodCallBase* mockMethodCall = \
        new CMockMethodCall<resultType>(_T(#name), 16, args); \
        bool failed=false; \
        CMockValueBase* result = RECORD_ACTUAL_##STATIC_##MOCK_CALL(mockMethodCall, &failed); \
        if((result!=NULL)&&(failed)) return dynamic_cast<CMockValue<resultType>*>(result)->GetValue();

#define MOCK_METHOD_16(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value, arg15Type, arg15Value, arg16Type, arg16Value) \
MOCK_ANY_METHOD_16(,,prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value, arg15Type, arg15Value, arg16Type, arg16Value)

#define MOCK_STATIC_METHOD_16(prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value, arg15Type, arg15Value, arg16Type, arg16Value) \
MOCK_ANY_METHOD_16(static, STATIC_, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value, arg15Type, arg15Value, arg16Type, arg16Value)

#define DECLARE_GLOBAL_MOCK_METHOD_16(mockClass, prefix, resultType, name, arg1Type, arg1Value, arg2Type, arg2Value, arg3Type, arg3Value, arg4Type, arg4Value, arg5Type, arg5Value, arg6Type, arg6Value, arg7Type, arg7Value, arg8Type, arg8Value, arg9Type, arg9Value, arg10Type, arg10Value, arg11Type, arg11Value, arg12Type, arg12Value, arg13Type, arg13Value, arg14Type, arg14Value, arg15Type, arg15Value, arg16Type, arg16Value) \
prefix resultType name(arg1Type arg1Value, arg2Type arg2Value, arg3Type arg3Value, arg4Type arg4Value, arg5Type arg5Value, arg6Type arg6Value, arg7Type arg7Value, arg8Type arg8Value, arg9Type arg9Value, arg10Type arg10Value, arg11Type arg11Value, arg12Type arg12Value, arg13Type arg13Value, arg14Type arg14Value, arg15Type arg15Value, arg16Type arg16Value) \
{ \
    return mockClass::name(arg1Value,arg2Value,arg3Value,arg4Value,arg5Value,arg6Value,arg7Value,arg8Value,arg9Value,arg10Value,arg11Value,arg12Value,arg13Value,arg14Value,arg15Value,arg16Value);\
} \

#endif // MICROMOCKCALLMACROS_H

