/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield 
 *
 * This library is open source and may be redistributed and/or modified under  
 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or 
 * (at your option) any later version.  The full license is in LICENSE file
 * included with this distribution, and on the openscenegraph.org website.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 * OpenSceneGraph Public License for more details.
*/
//osgIntrospection - Copyright (C) 2005 Marco Jez

#ifndef OSGINTROSPECTION_REFLECTIONMACROS_
#define OSGINTROSPECTION_REFLECTIONMACROS_

#include <osgIntrospection/Type>
#include <osgIntrospection/Reflector>
#include <osgIntrospection/TypeNameAliasProxy>
#include <osgIntrospection/ConverterProxy>
#include <osgIntrospection/Converter>
#include <osgIntrospection/PublicMemberAccessor>

namespace osgIntrospection
{

    /** Compile-time polymorphism detector.
        The enumeration constant "value" evaluates
        to true only if T is a polymorphic class,
        false otherwise. T must be a subclassable
        type.
    */
    template<typename T>
    struct is_polymorphic
    {
        struct dummy1: T { dummy1(); ~dummy1(); };
        struct dummy2: T { dummy2(); virtual ~dummy2(); };
        enum { value = sizeof(dummy1) == sizeof(dummy2) };
    };

}

// --------------------------------------------------------------------------
// "private" macros, not to be used outside this file
// --------------------------------------------------------------------------

#define COMMA                            ,
#define OSG_RM_CONCATENATE_MACRO(x, y)   x##y
#define OSG_RM_LINEID1(x, y)             OSG_RM_CONCATENATE_MACRO(x, y)
#define OSG_RM_LINEID(x)                 OSG_RM_LINEID1(x, __LINE__)


// --------------------------------------------------------------------------
// TYPE NAME ALIASES
// --------------------------------------------------------------------------

#define TYPE_NAME_ALIAS(t, n) \
    namespace { osgIntrospection::TypeNameAliasProxy<t > OSG_RM_LINEID(tnalias) (#n); }
    

// --------------------------------------------------------------------------
// TYPE CONVERTERS
// --------------------------------------------------------------------------

#define I_Converter(s, d, c) \
    namespace { osgIntrospection::ConverterProxy OSG_RM_LINEID(cvt) (s, d, new c); }

#define I_StaticConverter(s, d) \
    I_Converter(s, d, osgIntrospection::StaticConverter<s, d>);

#define I_DynamicConverter(s, d) \
    I_Converter(s, d, osgIntrospection::DynamicConverter<s, d>);
    
#define I_ReinterpretConverter(s, d) \
    I_Converter(s, d, osgIntrospection::ReinterpretConverter<s, d>);


// --------------------------------------------------------------------------
// ONE-LINE REFLECTORS
// --------------------------------------------------------------------------

#define ABSTRACT_OBJECT_REFLECTOR(t) \
    namespace { osgIntrospection::AbstractObjectReflector<t > OSG_RM_LINEID(reflector) (#t); }

#define ATOMIC_VALUE_REFLECTOR(t) \
    namespace { osgIntrospection::AtomicValueReflector<t > OSG_RM_LINEID(reflector) (#t); }

#define WATOMIC_VALUE_REFLECTOR(t) \
    namespace { osgIntrospection::WAtomicValueReflector<t > OSG_RM_LINEID(reflector) (#t); }

#define STD_PAIR_REFLECTOR(t) \
    namespace { osgIntrospection::StdPairReflector<t, t::first_type, t::second_type > OSG_RM_LINEID(reflector) (#t); }

#define STD_PAIR_REFLECTOR_WITH_TYPES(t, pt1, pt2) \
    namespace { osgIntrospection::StdPairReflector<t, pt1, pt2 > OSG_RM_LINEID(reflector) (#t); }

#define STD_VECTOR_REFLECTOR(t) \
    namespace { osgIntrospection::StdVectorReflector<t, t::value_type> OSG_RM_LINEID(reflector) (#t); }

#define STD_VECTOR_REFLECTOR_WITH_TYPES(t, vt) \
    namespace { osgIntrospection::StdVectorReflector<t, vt > OSG_RM_LINEID(reflector) (#t); }

#define STD_LIST_REFLECTOR(t) \
    namespace { osgIntrospection::StdListReflector<t, t::value_type> OSG_RM_LINEID(reflector) (#t); }

#define STD_LIST_REFLECTOR_WITH_TYPES(t, vt) \
    namespace { osgIntrospection::StdListReflector<t, vt > OSG_RM_LINEID(reflector) (#t); }

#define STD_SET_REFLECTOR(t) \
    namespace { osgIntrospection::StdSetReflector<t, t::value_type> OSG_RM_LINEID(reflector) (#t); }

#define STD_SET_REFLECTOR_WITH_TYPES(t, vt) \
    namespace { osgIntrospection::StdSetReflector<t, vt > OSG_RM_LINEID(reflector) (#t); }

#define STD_MAP_REFLECTOR(t) \
    namespace { osgIntrospection::StdMapReflector<t, t::key_type, t::mapped_type > OSG_RM_LINEID(reflector) (#t); }

#define STD_MAP_REFLECTOR_WITH_TYPES(t, it, vt) \
    namespace { osgIntrospection::StdMapReflector<t, it, vt > OSG_RM_LINEID(reflector) (#t); }


// --------------------------------------------------------------------------
// DETAILED REFLECTORS
// --------------------------------------------------------------------------

// this dummy function is used to prevent GCC from
// emitting an "unused variable" warning on reflector
// fields that are automatically created by following
// macros, and possibly left unused by the implementor.
// NOTE: the unnamed namespace declaration is commented
// out because it seems to confuse the MSVC++ compiler.
// Anyway, static should be ok.
//namespace 
//{    
    static inline void sink(const osgIntrospection::CustomAttributeProvider *) 
    {
    } 
//}


#define BEGIN_ENUM_REFLECTOR(c)  \
     namespace { \
     struct OSG_RM_LINEID(reflector): osgIntrospection::EnumReflector<c > { OSG_RM_LINEID(reflector)(): inherited(#c) { osgIntrospection::ParameterInfoList params; osgIntrospection::CustomAttributeProvider *cap = getType(); sink(cap);

#define BEGIN_VALUE_REFLECTOR(c)  \
     namespace { \
     struct OSG_RM_LINEID(reflector): osgIntrospection::ValueReflector<c > { OSG_RM_LINEID(reflector)(): inherited(#c) { osgIntrospection::ParameterInfoList params; osgIntrospection::CustomAttributeProvider *cap = getType(); sink(cap);

#define BEGIN_OBJECT_REFLECTOR(c)  \
     namespace { \
     struct OSG_RM_LINEID(reflector): osgIntrospection::ObjectReflector<c > { OSG_RM_LINEID(reflector)(): inherited(#c) { osgIntrospection::ParameterInfoList params; osgIntrospection::CustomAttributeProvider *cap = getType(); sink(cap);

#define BEGIN_ABSTRACT_OBJECT_REFLECTOR(c)  \
     namespace { \
     struct OSG_RM_LINEID(reflector): osgIntrospection::AbstractObjectReflector<c > { OSG_RM_LINEID(reflector)(): inherited(#c) { osgIntrospection::ParameterInfoList params; osgIntrospection::CustomAttributeProvider *cap = getType(); sink(cap);

#define END_REFLECTOR \
    } } OSG_RM_LINEID(reflector_instance); }


// --------------------------------------------------------------------------
// BASIC CONFIGURATION
// --------------------------------------------------------------------------

#define I_Attribute(c)                       cap->addAttribute(new c);

#define I_ReaderWriter(x)                    setReaderWriter(new x);
#define I_Comparator(x)                      setComparator(new x);

template<typename x, typename reflected_type, bool polymorphic>
struct BaseTypeConverters
{
    BaseTypeConverters()
    {
        const osgIntrospection::Type& st = typeof(reflected_type*); \
        const osgIntrospection::Type& cst = typeof(const reflected_type*); \
        const osgIntrospection::Type& dt = typeof(x*); \
        const osgIntrospection::Type& cdt = typeof(const x*); \
        osgIntrospection::ConverterProxy cp1(st, dt, new osgIntrospection::StaticConverter<reflected_type* , x*>); \
        osgIntrospection::ConverterProxy cp2(cst, cdt, new osgIntrospection::StaticConverter<const reflected_type* , const x*>); \
        osgIntrospection::ConverterProxy cp1c(st, cdt, new osgIntrospection::StaticConverter<reflected_type* , const x*>); \
    }
};

template<typename x, typename reflected_type>
struct BaseTypeConverters<x, reflected_type, true>
{
    BaseTypeConverters()
    {
        const osgIntrospection::Type& st = typeof(reflected_type*); \
        const osgIntrospection::Type& cst = typeof(const reflected_type*); \
        const osgIntrospection::Type& dt = typeof(x*); \
        const osgIntrospection::Type& cdt = typeof(const x*); \
        osgIntrospection::ConverterProxy cp1(st, dt, new osgIntrospection::StaticConverter<reflected_type* , x*>); \
        osgIntrospection::ConverterProxy cp2(cst, cdt, new osgIntrospection::StaticConverter<const reflected_type* , const x*>); \
        osgIntrospection::ConverterProxy cp1c(st, cdt, new osgIntrospection::StaticConverter<reflected_type* , const x*>); \
        osgIntrospection::ConverterProxy cp3(dt, st, new osgIntrospection::DynamicConverter<x*, reflected_type* >); \
        osgIntrospection::ConverterProxy cp4(cdt, cst, new osgIntrospection::DynamicConverter<const x*, const reflected_type* >); \
        osgIntrospection::ConverterProxy cp3c(dt, cst, new osgIntrospection::DynamicConverter<x*, const reflected_type* >); \
    }
};

#define I_BaseType(x) \
    { \
     addBaseType(typeof(x )); \
     BaseTypeConverters<x, reflected_type, osgIntrospection::is_polymorphic<x >::value> btc; \
    }

#define I_VirtualBaseType(x) \
    { \
     addBaseType(typeof(x )); \
     BaseTypeConverters<x, reflected_type, false> btc; \
    }

#define I_EnumLabel(x)                       addEnumLabel(x, #x, true);






// --------------------------------------------------------------------------
// PUBLIC MEMBER PROPERTIES
// --------------------------------------------------------------------------

#define I_PublicMemberProperty(t, n) \
  cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #n, 0, 0)); \
  cap->addAttribute(new osgIntrospection::CustomPropertyGetAttribute(new osgIntrospection::PublicMemberAccessor< reflected_type, t >(&reflected_type::n))); \
  cap->addAttribute(new osgIntrospection::CustomPropertySetAttribute(new osgIntrospection::PublicMemberAccessor< reflected_type, t >(&reflected_type::n)));


// --------------------------------------------------------------------------
// SIMPLE PROPERTIES
// --------------------------------------------------------------------------

#define I_Property(t, n) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #n, \
      I_Method0(t, get##n), \
      I_Method1(void, set##n, IN, t, value)))

#define I_ReadOnlyProperty(t, n) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #n, \
      I_Method0(t, get##n), \
      0))

#define I_WriteOnlyProperty(t, n) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #n, \
      0, \
      I_Method1(void, set##n, IN, t, value)))

#define I_PropertyWithReturnType(t, n, r) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #n, \
      I_Method0(t, get##n), \
      I_Method1(r, set##n, IN, t, value)))

#define I_WriteOnlyPropertyWithReturnType(t, n, r) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #n, \
      0, \
      I_Method1(r, set##n, IN, t, value)))

#define I_PropertyWithCustomAccessors(t, n) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #n, \
      0, \
      0))


// --------------------------------------------------------------------------
// ARRAY PROPERTIES
// --------------------------------------------------------------------------

#define I_ArrayProperty_Custom(t, n, np, idxt, r) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #np, \
      0, \
      0, \
      0, \
      0, \
      0))

#define I_ArrayProperty_Full(t, n, np, idxt, r) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #np, \
      I_Method1(t, get##n, IN, idxt, index), \
      I_Method2(r, set##n, IN, idxt, index, IN, t, value), \
      I_Method0(idxt, getNum##np), \
      I_Method1(r, add##n, IN, t, value), \
      I_Method1(r, remove##n, IN, idxt, index)))

#define I_ArrayProperty_GSA(t, n, np, idxt, r) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #np, \
      I_Method1(t, get##n, IN, idxt, index), \
      I_Method2(r, set##n, IN, idxt, index, IN, t, value), \
      I_Method0(idxt, getNum##np), \
      I_Method1(r, add##n, IN, t, value), \
      0))

#define I_ArrayProperty_G(t, n, np, idxt, r) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #np, \
      I_Method1(t, get##n, IN, idxt, index), \
      0, \
      I_Method0(idxt, getNum##np), \
      0, \
      0))

#define I_ArrayProperty_GA(t, n, np, idxt, r) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #np, \
      I_Method1(t, get##n, IN, idxt, index), \
      0, \
      I_Method0(idxt, getNum##np), \
      I_Method1(r, add##n, IN, t, value), \
      0))

#define I_ArrayProperty_GAR(t, n, np, idxt, r) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #np, \
      I_Method1(t, get##n, IN, idxt, index), \
      0, \
      I_Method0(idxt, getNum##np), \
      I_Method1(r, add##n, IN, t, value), \
      I_Method1(r, remove##n, IN, idxt, index)))
      
#define I_ArrayProperty(t, n, np)                    I_ArrayProperty_Full(t, n, np, unsigned int, void)
#define I_ArrayProperty_int(t, n, np)                I_ArrayProperty_Full(t, n, np, int, void)
#define I_CustomArrayProperty(t, n, np)              I_ArrayProperty_Custom(t, n, np, unsigned int, void)
#define I_CustomArrayProperty_int(t, n, np)          I_ArrayProperty_Custom(t, n, np, int, void)


// --------------------------------------------------------------------------
// INDEXED PROPERTIES
// --------------------------------------------------------------------------


#define I_IndexedProperty I_IndexedProperty1

#define I_IndexedProperty1(t, n, i0, n0) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #n, \
      I_Method1(t, get##n, IN, i0, n0), \
      I_Method2(void, set##n, IN, i0, n0, IN, t, value)))

#define I_IndexedProperty2(t, n, i0, n0, i1, n1) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #n, \
      I_Method2(t, get##n, IN, i0, n0, IN, i1, n1), \
      I_Method3(void, set##n, IN, i0, n0, IN, i1, n1, IN, t, value)))

#define I_IndexedProperty3(t, n, i0, n0, i1, n1, i2, n2) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #n, \
      I_Method3(t, get##n, IN, i0, n0, IN, i1, n1, IN, i2, n2), \
      I_Method4(void, set##n, IN, i0, n0, IN, i1, n1, IN, i2, n2, IN, t, value)))

#define I_IndexedProperty4(t, n, i0, n0, i1, n1, i2, n2, i3, n3) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #n, \
      I_Method4(t, get##n, IN, i0, n0, IN, i1, n1, IN, i2, n2, IN, i3, n3), \
      I_Method5(void, set##n, IN, i0, n0, IN, i1, n1, IN, i2, n2, IN, i3, n3, IN, t, value)))

#define I_IndexedPropertyWithReturnType1(t, n, i0, n0, r) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #n, \
      I_Method1(t, get##n, IN, i0, n0), \
      I_Method2(r, set##n, IN, i0, n0, IN, t, value)))

#define I_IndexedPropertyWithReturnType2(t, n, i0, n0, i1, n1, r) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #n, \
      I_Method2(t, get##n, IN, i0, n0, IN, i1, n1), \
      I_Method3(r, set##n, IN, i0, n0, IN, i1, n1, IN, t, value)))

#define I_IndexedPropertyWithReturnType3(t, n, i0, n0, i1, n1, i2, n2, r) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #n, \
      I_Method3(t, get##n, IN, i0, n0, IN, i1, n1, IN, i2, n2), \
      I_Method4(r, set##n, IN, i0, n0, IN, i1, n1, IN, i2, n2, IN, t, value)))

#define I_IndexedPropertyWithReturnType4(t, n, i0, n0, i1, n1, i2, n2, i3, n3, r) \
    cap=addProperty(new osgIntrospection::PropertyInfo(osgIntrospection::Reflection::getType(typeid(reflected_type)), osgIntrospection::Reflection::getType(typeid(t)), #n, \
      I_Method4(t, get##n, IN, i0, n0, IN, i1, n1, IN, i2, n2, IN, i3, n3), \
      I_Method5(r, set##n, IN, i0, n0, IN, i1, n1, IN, i2, n2, IN, i3, n3, IN, t, value)))


// --------------------------------------------------------------------------
// CONSTRUCTORS
// --------------------------------------------------------------------------

#define I_Constructor             I_Constructor0
#define I_ConstructorWithDefaults I_ConstructorWithDefaults0

#define I_Constructor0() (\
    params.clear(), \
    addConstructor(new osgIntrospection::TypedConstructorInfo0<reflected_type, instance_creator_type>(params))) 

#define I_Constructor1(A0, P0, N0) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    addConstructor(new osgIntrospection::TypedConstructorInfo1<reflected_type, instance_creator_type, P0>(params))) 

#define I_Constructor2(A0, P0, N0, A1, P1, N1) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    addConstructor(new osgIntrospection::TypedConstructorInfo2<reflected_type, instance_creator_type, P0, P1>(params))) 

#define I_Constructor3(A0, P0, N0, A1, P1, N1, A2, P2, N2) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    addConstructor(new osgIntrospection::TypedConstructorInfo3<reflected_type, instance_creator_type, P0, P1, P2>(params))) 

#define I_Constructor4(A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    addConstructor(new osgIntrospection::TypedConstructorInfo4<reflected_type, instance_creator_type, P0, P1, P2, P3>(params))) 

#define I_Constructor5(A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    addConstructor(new osgIntrospection::TypedConstructorInfo5<reflected_type, instance_creator_type, P0, P1, P2, P3, P4>(params))) 

#define I_Constructor6(A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    addConstructor(new osgIntrospection::TypedConstructorInfo6<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5>(params))) 

#define I_Constructor7(A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    addConstructor(new osgIntrospection::TypedConstructorInfo7<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6>(params))) 

#define I_Constructor8(A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    addConstructor(new osgIntrospection::TypedConstructorInfo8<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7>(params))) 

#define I_Constructor9(A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    addConstructor(new osgIntrospection::TypedConstructorInfo9<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7, P8>(params))) 

#define I_Constructor10(A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    addConstructor(new osgIntrospection::TypedConstructorInfo10<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9>(params))) 

#define I_Constructor11(A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    addConstructor(new osgIntrospection::TypedConstructorInfo11<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10>(params))) 

#define I_Constructor12(A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10, A11, P11, N11) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11)), \
    addConstructor(new osgIntrospection::TypedConstructorInfo12<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11>(params))) 

#define I_Constructor13(A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10, A11, P11, N11, A12, P12, N12) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12)), \
    addConstructor(new osgIntrospection::TypedConstructorInfo13<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12>(params))) 

#define I_Constructor14(A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10, A11, P11, N11, A12, P12, N12, A13, P13, N13) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13)), \
    addConstructor(new osgIntrospection::TypedConstructorInfo14<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13>(params))) 

#define I_Constructor15(A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10, A11, P11, N11, A12, P12, N12, A13, P13, N13, A14, P14, N14) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N14, osgIntrospection::Reflection::getType(typeid(P14)), osgIntrospection::ParameterInfo::A14)), \
    addConstructor(new osgIntrospection::TypedConstructorInfo15<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14>(params))) 

#define I_Constructor16(A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10, A11, P11, N11, A12, P12, N12, A13, P13, N13, A14, P14, N14, A15, P15, N15) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N14, osgIntrospection::Reflection::getType(typeid(P14)), osgIntrospection::ParameterInfo::A14)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N15, osgIntrospection::Reflection::getType(typeid(P15)), osgIntrospection::ParameterInfo::A15)), \
    addConstructor(new osgIntrospection::TypedConstructorInfo16<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15>(params))) 

#define I_ConstructorWithDefaults0() (\
    params.clear(), \
    addConstructor(new osgIntrospection::TypedConstructorInfo0<reflected_type, instance_creator_type>(params))) 

#define I_ConstructorWithDefaults1(A0, P0, N0, D0) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    addConstructor(new osgIntrospection::TypedConstructorInfo1<reflected_type, instance_creator_type, P0>(params))) 

#define I_ConstructorWithDefaults2(A0, P0, N0, D0, A1, P1, N1, D1) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    addConstructor(new osgIntrospection::TypedConstructorInfo2<reflected_type, instance_creator_type, P0, P1>(params))) 

#define I_ConstructorWithDefaults3(A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    addConstructor(new osgIntrospection::TypedConstructorInfo3<reflected_type, instance_creator_type, P0, P1, P2>(params))) 

#define I_ConstructorWithDefaults4(A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    addConstructor(new osgIntrospection::TypedConstructorInfo4<reflected_type, instance_creator_type, P0, P1, P2, P3>(params))) 

#define I_ConstructorWithDefaults5(A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    addConstructor(new osgIntrospection::TypedConstructorInfo5<reflected_type, instance_creator_type, P0, P1, P2, P3, P4>(params))) 

#define I_ConstructorWithDefaults6(A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    addConstructor(new osgIntrospection::TypedConstructorInfo6<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5>(params))) 

#define I_ConstructorWithDefaults7(A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    addConstructor(new osgIntrospection::TypedConstructorInfo7<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6>(params))) 

#define I_ConstructorWithDefaults8(A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    addConstructor(new osgIntrospection::TypedConstructorInfo8<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7>(params))) 

#define I_ConstructorWithDefaults9(A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    addConstructor(new osgIntrospection::TypedConstructorInfo9<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7, P8>(params))) 

#define I_ConstructorWithDefaults10(A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    addConstructor(new osgIntrospection::TypedConstructorInfo10<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9>(params))) 

#define I_ConstructorWithDefaults11(A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    addConstructor(new osgIntrospection::TypedConstructorInfo11<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10>(params))) 

#define I_ConstructorWithDefaults12(A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10, A11, P11, N11, D11) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11, osgIntrospection::Value(D11))), \
    addConstructor(new osgIntrospection::TypedConstructorInfo12<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11>(params))) 

#define I_ConstructorWithDefaults13(A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10, A11, P11, N11, D11, A12, P12, N12, D12) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11, osgIntrospection::Value(D11))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12, osgIntrospection::Value(D12))), \
    addConstructor(new osgIntrospection::TypedConstructorInfo13<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12>(params))) 

#define I_ConstructorWithDefaults14(A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10, A11, P11, N11, D11, A12, P12, N12, D12, A13, P13, N13, D13) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11, osgIntrospection::Value(D11))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12, osgIntrospection::Value(D12))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13, osgIntrospection::Value(D13))), \
    addConstructor(new osgIntrospection::TypedConstructorInfo14<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13>(params))) 

#define I_ConstructorWithDefaults15(A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10, A11, P11, N11, D11, A12, P12, N12, D12, A13, P13, N13, D13, A14, P14, N14, D14) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11, osgIntrospection::Value(D11))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12, osgIntrospection::Value(D12))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13, osgIntrospection::Value(D13))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N14, osgIntrospection::Reflection::getType(typeid(P14)), osgIntrospection::ParameterInfo::A14, osgIntrospection::Value(D14))), \
    addConstructor(new osgIntrospection::TypedConstructorInfo15<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14>(params))) 

#define I_ConstructorWithDefaults16(A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10, A11, P11, N11, D11, A12, P12, N12, D12, A13, P13, N13, D13, A14, P14, N14, D14, A15, P15, N15, D15) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11, osgIntrospection::Value(D11))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12, osgIntrospection::Value(D12))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13, osgIntrospection::Value(D13))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N14, osgIntrospection::Reflection::getType(typeid(P14)), osgIntrospection::ParameterInfo::A14, osgIntrospection::Value(D14))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N15, osgIntrospection::Reflection::getType(typeid(P15)), osgIntrospection::ParameterInfo::A15, osgIntrospection::Value(D15))), \
    addConstructor(new osgIntrospection::TypedConstructorInfo16<reflected_type, instance_creator_type, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15>(params))) 


// --------------------------------------------------------------------------
// METHODS
// --------------------------------------------------------------------------

#define I_Method                    I_Method0
#define I_StaticMethod              I_StaticMethod0
#define I_MethodWithDefaults        I_MethodWithDefaults0
#define I_StaticMethodWithDefaults  I_StaticMethodWithDefaults0

#define I_Method0(ret, fn) (\
    params.clear(), \
    addMethod(new osgIntrospection::TypedMethodInfo0<reflected_type, ret >(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_Method1(ret, fn, A0, P0, N0) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    addMethod(new osgIntrospection::TypedMethodInfo1<reflected_type, ret, P0>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_Method2(ret, fn, A0, P0, N0, A1, P1, N1) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    addMethod(new osgIntrospection::TypedMethodInfo2<reflected_type, ret, P0, P1>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_Method3(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    addMethod(new osgIntrospection::TypedMethodInfo3<reflected_type, ret, P0, P1, P2>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_Method4(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    addMethod(new osgIntrospection::TypedMethodInfo4<reflected_type, ret, P0, P1, P2, P3>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_Method5(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    addMethod(new osgIntrospection::TypedMethodInfo5<reflected_type, ret, P0, P1, P2, P3, P4>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_Method6(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    addMethod(new osgIntrospection::TypedMethodInfo6<reflected_type, ret, P0, P1, P2, P3, P4, P5>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_Method7(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    addMethod(new osgIntrospection::TypedMethodInfo7<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_Method8(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    addMethod(new osgIntrospection::TypedMethodInfo8<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_Method9(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    addMethod(new osgIntrospection::TypedMethodInfo9<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_Method10(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    addMethod(new osgIntrospection::TypedMethodInfo10<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_Method11(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    addMethod(new osgIntrospection::TypedMethodInfo11<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_Method12(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10, A11, P11, N11) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11)), \
    addMethod(new osgIntrospection::TypedMethodInfo12<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_Method13(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10, A11, P11, N11, A12, P12, N12) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12)), \
    addMethod(new osgIntrospection::TypedMethodInfo13<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_Method14(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10, A11, P11, N11, A12, P12, N12, A13, P13, N13) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13)), \
    addMethod(new osgIntrospection::TypedMethodInfo14<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_Method15(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10, A11, P11, N11, A12, P12, N12, A13, P13, N13, A14, P14, N14) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N14, osgIntrospection::Reflection::getType(typeid(P14)), osgIntrospection::ParameterInfo::A14)), \
    addMethod(new osgIntrospection::TypedMethodInfo15<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_Method16(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10, A11, P11, N11, A12, P12, N12, A13, P13, N13, A14, P14, N14, A15, P15, N15) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N14, osgIntrospection::Reflection::getType(typeid(P14)), osgIntrospection::ParameterInfo::A14)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N15, osgIntrospection::Reflection::getType(typeid(P15)), osgIntrospection::ParameterInfo::A15)), \
    addMethod(new osgIntrospection::TypedMethodInfo16<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_MethodWithDefaults0(ret, fn) (\
    params.clear(), \
    addMethod(new osgIntrospection::TypedMethodInfo0<reflected_type, ret>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_MethodWithDefaults1(ret, fn, A0, P0, N0, D0) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    addMethod(new osgIntrospection::TypedMethodInfo1<reflected_type, ret, P0>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_MethodWithDefaults2(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    addMethod(new osgIntrospection::TypedMethodInfo2<reflected_type, ret, P0, P1>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_MethodWithDefaults3(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    addMethod(new osgIntrospection::TypedMethodInfo3<reflected_type, ret, P0, P1, P2>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_MethodWithDefaults4(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    addMethod(new osgIntrospection::TypedMethodInfo4<reflected_type, ret, P0, P1, P2, P3>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_MethodWithDefaults5(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    addMethod(new osgIntrospection::TypedMethodInfo5<reflected_type, ret, P0, P1, P2, P3, P4>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_MethodWithDefaults6(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    addMethod(new osgIntrospection::TypedMethodInfo6<reflected_type, ret, P0, P1, P2, P3, P4, P5>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_MethodWithDefaults7(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    addMethod(new osgIntrospection::TypedMethodInfo7<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_MethodWithDefaults8(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    addMethod(new osgIntrospection::TypedMethodInfo8<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_MethodWithDefaults9(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    addMethod(new osgIntrospection::TypedMethodInfo9<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_MethodWithDefaults10(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    addMethod(new osgIntrospection::TypedMethodInfo10<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_MethodWithDefaults11(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    addMethod(new osgIntrospection::TypedMethodInfo11<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_MethodWithDefaults12(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10, A11, P11, N11, D11) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11, osgIntrospection::Value(D11))), \
    addMethod(new osgIntrospection::TypedMethodInfo12<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_MethodWithDefaults13(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10, A11, P11, N11, D11, A12, P12, N12, D12) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11, osgIntrospection::Value(D11))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12, osgIntrospection::Value(D12))), \
    addMethod(new osgIntrospection::TypedMethodInfo13<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_MethodWithDefaults14(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10, A11, P11, N11, D11, A12, P12, N12, D12, A13, P13, N13, D13) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11, osgIntrospection::Value(D11))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12, osgIntrospection::Value(D12))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13, osgIntrospection::Value(D13))), \
    addMethod(new osgIntrospection::TypedMethodInfo14<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_MethodWithDefaults15(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10, A11, P11, N11, D11, A12, P12, N12, D12, A13, P13, N13, D13, A14, P14, N14, D14) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11, osgIntrospection::Value(D11))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12, osgIntrospection::Value(D12))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13, osgIntrospection::Value(D13))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N14, osgIntrospection::Reflection::getType(typeid(P14)), osgIntrospection::ParameterInfo::A14, osgIntrospection::Value(D14))), \
    addMethod(new osgIntrospection::TypedMethodInfo15<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_MethodWithDefaults16(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10, A11, P11, N11, D11, A12, P12, N12, D12, A13, P13, N13, D13, A14, P14, N14, D14, A15, P15, N15, D15) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11, osgIntrospection::Value(D11))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12, osgIntrospection::Value(D12))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13, osgIntrospection::Value(D13))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N14, osgIntrospection::Reflection::getType(typeid(P14)), osgIntrospection::ParameterInfo::A14, osgIntrospection::Value(D14))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N15, osgIntrospection::Reflection::getType(typeid(P15)), osgIntrospection::ParameterInfo::A15, osgIntrospection::Value(D15))), \
    addMethod(new osgIntrospection::TypedMethodInfo16<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethod0(ret, fn) (\
    params.clear(), \
    addMethod(new osgIntrospection::StaticMethodInfo0<reflected_type, ret>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethod1(ret, fn, A0, P0, N0) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    addMethod(new osgIntrospection::StaticMethodInfo1<reflected_type, ret, P0>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethod2(ret, fn, A0, P0, N0, A1, P1, N1) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    addMethod(new osgIntrospection::StaticMethodInfo2<reflected_type, ret, P0, P1>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethod3(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    addMethod(new osgIntrospection::StaticMethodInfo3<reflected_type, ret, P0, P1, P2>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethod4(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    addMethod(new osgIntrospection::StaticMethodInfo4<reflected_type, ret, P0, P1, P2, P3>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethod5(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    addMethod(new osgIntrospection::StaticMethodInfo5<reflected_type, ret, P0, P1, P2, P3, P4>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethod6(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    addMethod(new osgIntrospection::StaticMethodInfo6<reflected_type, ret, P0, P1, P2, P3, P4, P5>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethod7(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    addMethod(new osgIntrospection::StaticMethodInfo7<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethod8(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    addMethod(new osgIntrospection::StaticMethodInfo8<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethod9(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    addMethod(new osgIntrospection::StaticMethodInfo9<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethod10(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    addMethod(new osgIntrospection::StaticMethodInfo10<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethod11(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    addMethod(new osgIntrospection::StaticMethodInfo11<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethod12(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10, A11, P11, N11) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11)), \
    addMethod(new osgIntrospection::StaticMethodInfo12<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethod13(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10, A11, P11, N11, A12, P12, N12) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12)), \
    addMethod(new osgIntrospection::StaticMethodInfo13<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethod14(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10, A11, P11, N11, A12, P12, N12, A13, P13, N13) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13)), \
    addMethod(new osgIntrospection::StaticMethodInfo14<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethod15(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10, A11, P11, N11, A12, P12, N12, A13, P13, N13, A14, P14, N14) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N14, osgIntrospection::Reflection::getType(typeid(P14)), osgIntrospection::ParameterInfo::A14)), \
    addMethod(new osgIntrospection::StaticMethodInfo15<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethod16(ret, fn, A0, P0, N0, A1, P1, N1, A2, P2, N2, A3, P3, N3, A4, P4, N4, A5, P5, N5, A6, P6, N6, A7, P7, N7, A8, P8, N8, A9, P9, N9, A10, P10, N10, A11, P11, N11, A12, P12, N12, A13, P13, N13, A14, P14, N14, A15, P15, N15) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N14, osgIntrospection::Reflection::getType(typeid(P14)), osgIntrospection::ParameterInfo::A14)), \
    params.push_back(new osgIntrospection::ParameterInfo(#N15, osgIntrospection::Reflection::getType(typeid(P15)), osgIntrospection::ParameterInfo::A15)), \
    addMethod(new osgIntrospection::StaticMethodInfo16<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethodWithDefaults0(ret, fn) (\
    params.clear(), \
    addMethod(new osgIntrospection::StaticMethodInfo0<reflected_type, ret>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethodWithDefaults1(ret, fn, A0, P0, N0, D0) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    addMethod(new osgIntrospection::StaticMethodInfo1<reflected_type, ret, P0>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethodWithDefaults2(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    addMethod(new osgIntrospection::StaticMethodInfo2<reflected_type, ret, P0, P1>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethodWithDefaults3(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    addMethod(new osgIntrospection::StaticMethodInfo3<reflected_type, ret, P0, P1, P2>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethodWithDefaults4(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    addMethod(new osgIntrospection::StaticMethodInfo4<reflected_type, ret, P0, P1, P2, P3>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethodWithDefaults5(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    addMethod(new osgIntrospection::StaticMethodInfo5<reflected_type, ret, P0, P1, P2, P3, P4>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethodWithDefaults6(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    addMethod(new osgIntrospection::StaticMethodInfo6<reflected_type, ret, P0, P1, P2, P3, P4, P5>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethodWithDefaults7(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    addMethod(new osgIntrospection::StaticMethodInfo7<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethodWithDefaults8(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    addMethod(new osgIntrospection::StaticMethodInfo8<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethodWithDefaults9(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    addMethod(new osgIntrospection::StaticMethodInfo9<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethodWithDefaults10(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    addMethod(new osgIntrospection::StaticMethodInfo10<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethodWithDefaults11(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    addMethod(new osgIntrospection::StaticMethodInfo11<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethodWithDefaults12(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10, A11, P11, N11, D11) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11, osgIntrospection::Value(D11))), \
    addMethod(new osgIntrospection::StaticMethodInfo12<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethodWithDefaults13(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10, A11, P11, N11, D11, A12, P12, N12, D12) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11, osgIntrospection::Value(D11))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12, osgIntrospection::Value(D12))), \
    addMethod(new osgIntrospection::StaticMethodInfo13<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethodWithDefaults14(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10, A11, P11, N11, D11, A12, P12, N12, D12, A13, P13, N13, D13) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11, osgIntrospection::Value(D11))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12, osgIntrospection::Value(D12))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13, osgIntrospection::Value(D13))), \
    addMethod(new osgIntrospection::StaticMethodInfo14<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethodWithDefaults15(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10, A11, P11, N11, D11, A12, P12, N12, D12, A13, P13, N13, D13, A14, P14, N14, D14) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11, osgIntrospection::Value(D11))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12, osgIntrospection::Value(D12))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13, osgIntrospection::Value(D13))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N14, osgIntrospection::Reflection::getType(typeid(P14)), osgIntrospection::ParameterInfo::A14, osgIntrospection::Value(D14))), \
    addMethod(new osgIntrospection::StaticMethodInfo15<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14>(qualifyName(#fn), &reflected_type::fn, params))) 

#define I_StaticMethodWithDefaults16(ret, fn, A0, P0, N0, D0, A1, P1, N1, D1, A2, P2, N2, D2, A3, P3, N3, D3, A4, P4, N4, D4, A5, P5, N5, D5, A6, P6, N6, D6, A7, P7, N7, D7, A8, P8, N8, D8, A9, P9, N9, D9, A10, P10, N10, D10, A11, P11, N11, D11, A12, P12, N12, D12, A13, P13, N13, D13, A14, P14, N14, D14, A15, P15, N15, D15) (\
    params.clear(), \
    params.push_back(new osgIntrospection::ParameterInfo(#N0, osgIntrospection::Reflection::getType(typeid(P0)), osgIntrospection::ParameterInfo::A0, osgIntrospection::Value(D0))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N1, osgIntrospection::Reflection::getType(typeid(P1)), osgIntrospection::ParameterInfo::A1, osgIntrospection::Value(D1))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N2, osgIntrospection::Reflection::getType(typeid(P2)), osgIntrospection::ParameterInfo::A2, osgIntrospection::Value(D2))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N3, osgIntrospection::Reflection::getType(typeid(P3)), osgIntrospection::ParameterInfo::A3, osgIntrospection::Value(D3))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N4, osgIntrospection::Reflection::getType(typeid(P4)), osgIntrospection::ParameterInfo::A4, osgIntrospection::Value(D4))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N5, osgIntrospection::Reflection::getType(typeid(P5)), osgIntrospection::ParameterInfo::A5, osgIntrospection::Value(D5))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N6, osgIntrospection::Reflection::getType(typeid(P6)), osgIntrospection::ParameterInfo::A6, osgIntrospection::Value(D6))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N7, osgIntrospection::Reflection::getType(typeid(P7)), osgIntrospection::ParameterInfo::A7, osgIntrospection::Value(D7))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N8, osgIntrospection::Reflection::getType(typeid(P8)), osgIntrospection::ParameterInfo::A8, osgIntrospection::Value(D8))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N9, osgIntrospection::Reflection::getType(typeid(P9)), osgIntrospection::ParameterInfo::A9, osgIntrospection::Value(D9))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N10, osgIntrospection::Reflection::getType(typeid(P10)), osgIntrospection::ParameterInfo::A10, osgIntrospection::Value(D10))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N11, osgIntrospection::Reflection::getType(typeid(P11)), osgIntrospection::ParameterInfo::A11, osgIntrospection::Value(D11))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N12, osgIntrospection::Reflection::getType(typeid(P12)), osgIntrospection::ParameterInfo::A12, osgIntrospection::Value(D12))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N13, osgIntrospection::Reflection::getType(typeid(P13)), osgIntrospection::ParameterInfo::A13, osgIntrospection::Value(D13))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N14, osgIntrospection::Reflection::getType(typeid(P14)), osgIntrospection::ParameterInfo::A14, osgIntrospection::Value(D14))), \
    params.push_back(new osgIntrospection::ParameterInfo(#N15, osgIntrospection::Reflection::getType(typeid(P15)), osgIntrospection::ParameterInfo::A15, osgIntrospection::Value(D15))), \
    addMethod(new osgIntrospection::StaticMethodInfo16<reflected_type, ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15>(qualifyName(#fn), &reflected_type::fn, params))) 

#endif


