#ifndef OSGINTROSPECTION_TYPEDMETHODINFO_ #define OSGINTROSPECTION_TYPEDMETHODINFO_ #include #include namespace osgIntrospection { /// Class templates TypedMethodInfoN (where 0 <= N <= 16) are concrete /// implementations of MethodInfo. They are used to keep information /// about class methods and to provide the means for calling them /// dynamically. Each class template can handle methods with N arguments /// and is parametrized by the class that declares the method and by the /// return type. Both const and non-const methods are supported. /// The invoke() methods allow to call the reflected method dynamically, /// passing it the arguments as a list of Value objects. The instance /// on which the reflected method will be called is passed to invoke() /// as a Value object, which can contain either a value of type C or a /// pointer to C. If the constness doesn't match (i.e., you try to call /// a non-const reflected method on a const instance) an exception is /// thrown. /// /// NOTE: currently, variant_cast<> does not check pointer conversions, /// it simply converts one pointer into another even if they point to /// types that are completely unrelated. /// This means you won't probably get any exceptions if you try to call /// a class' method on another class' instance, but of course that's a /// bad, bad idea... /// template class TypedMethodInfo0: public MethodInfo { public: typedef R (C::*ConstFunctionType)() const; typedef R (C::*FunctionType)(); TypedMethodInfo0(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(cf), f_(0) { } TypedMethodInfo0(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(); if (f_) return (variant_cast(instance)->*f_)(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(); if (f_) return (variant_cast(instance)->*f_)(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(); if (f_) return (variant_cast(instance).*f_)(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo1: public MethodInfo { public: typedef R (C::*ConstFunctionType)(P0) const; typedef R (C::*FunctionType)(P0); TypedMethodInfo1(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(cf), f_(0) { } TypedMethodInfo1(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0)); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0)); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo2: public MethodInfo { public: typedef R (C::*ConstFunctionType)(P0, P1) const; typedef R (C::*FunctionType)(P0, P1); TypedMethodInfo2(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(cf), f_(0) { } TypedMethodInfo2(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1)); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1)); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo3: public MethodInfo { public: typedef R (C::*ConstFunctionType)(P0, P1, P2) const; typedef R (C::*FunctionType)(P0, P1, P2); TypedMethodInfo3(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(cf), f_(0) { } TypedMethodInfo3(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo4: public MethodInfo { public: typedef R (C::*ConstFunctionType)(P0, P1, P2, P3) const; typedef R (C::*FunctionType)(P0, P1, P2, P3); TypedMethodInfo4(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(cf), f_(0) { } TypedMethodInfo4(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo5: public MethodInfo { public: typedef R (C::*ConstFunctionType)(P0, P1, P2, P3, P4) const; typedef R (C::*FunctionType)(P0, P1, P2, P3, P4); TypedMethodInfo5(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(cf), f_(0) { } TypedMethodInfo5(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo6: public MethodInfo { public: typedef R (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5) const; typedef R (C::*FunctionType)(P0, P1, P2, P3, P4, P5); TypedMethodInfo6(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(cf), f_(0) { } TypedMethodInfo6(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo7: public MethodInfo { public: typedef R (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6) const; typedef R (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6); TypedMethodInfo7(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(cf), f_(0) { } TypedMethodInfo7(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo8: public MethodInfo { public: typedef R (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7) const; typedef R (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7); TypedMethodInfo8(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(cf), f_(0) { } TypedMethodInfo8(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo9: public MethodInfo { public: typedef R (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8) const; typedef R (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8); TypedMethodInfo9(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(cf), f_(0) { } TypedMethodInfo9(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo10: public MethodInfo { public: typedef R (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9) const; typedef R (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9); TypedMethodInfo10(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(cf), f_(0) { } TypedMethodInfo10(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo11: public MethodInfo { public: typedef R (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) const; typedef R (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10); TypedMethodInfo11(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(cf), f_(0) { } TypedMethodInfo11(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo12: public MethodInfo { public: typedef R (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) const; typedef R (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11); TypedMethodInfo12(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(cf), f_(0) { } TypedMethodInfo12(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo13: public MethodInfo { public: typedef R (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) const; typedef R (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12); TypedMethodInfo13(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(cf), f_(0) { } TypedMethodInfo13(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); Value a12(args[12].convertTo(typeof(P12))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); Value a12(args[12].convertTo(typeof(P12))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo14: public MethodInfo { public: typedef R (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) const; typedef R (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13); TypedMethodInfo14(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(cf), f_(0) { } TypedMethodInfo14(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); Value a12(args[12].convertTo(typeof(P12))); Value a13(args[13].convertTo(typeof(P13))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); Value a12(args[12].convertTo(typeof(P12))); Value a13(args[13].convertTo(typeof(P13))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo15: public MethodInfo { public: typedef R (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) const; typedef R (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14); TypedMethodInfo15(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(cf), f_(0) { } TypedMethodInfo15(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); Value a12(args[12].convertTo(typeof(P12))); Value a13(args[13].convertTo(typeof(P13))); Value a14(args[14].convertTo(typeof(P14))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); Value a12(args[12].convertTo(typeof(P12))); Value a13(args[13].convertTo(typeof(P13))); Value a14(args[14].convertTo(typeof(P14))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo16: public MethodInfo { public: typedef R (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) const; typedef R (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15); TypedMethodInfo16(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(cf), f_(0) { } TypedMethodInfo16(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(R), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); Value a12(args[12].convertTo(typeof(P12))); Value a13(args[13].convertTo(typeof(P13))); Value a14(args[14].convertTo(typeof(P14))); Value a15(args[15].convertTo(typeof(P15))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); Value a12(args[12].convertTo(typeof(P12))); Value a13(args[13].convertTo(typeof(P13))); Value a14(args[14].convertTo(typeof(P14))); Value a15(args[15].convertTo(typeof(P15))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo0: public MethodInfo { public: typedef void (C::*ConstFunctionType)() const; typedef void (C::*FunctionType)(); TypedMethodInfo0(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(cf), f_(0) { } TypedMethodInfo0(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(), Value(); if (f_) return (variant_cast(instance)->*f_)(), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(), Value(); if (f_) return (variant_cast(instance)->*f_)(), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(), Value(); if (f_) return (variant_cast(instance).*f_)(), Value(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo1: public MethodInfo { public: typedef void (C::*ConstFunctionType)(P0) const; typedef void (C::*FunctionType)(P0); TypedMethodInfo1(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(cf), f_(0) { } TypedMethodInfo1(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0)), Value(); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0)), Value(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo2: public MethodInfo { public: typedef void (C::*ConstFunctionType)(P0, P1) const; typedef void (C::*FunctionType)(P0, P1); TypedMethodInfo2(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(cf), f_(0) { } TypedMethodInfo2(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1)), Value(); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1)), Value(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo3: public MethodInfo { public: typedef void (C::*ConstFunctionType)(P0, P1, P2) const; typedef void (C::*FunctionType)(P0, P1, P2); TypedMethodInfo3(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(cf), f_(0) { } TypedMethodInfo3(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)), Value(); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2)), Value(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo4: public MethodInfo { public: typedef void (C::*ConstFunctionType)(P0, P1, P2, P3) const; typedef void (C::*FunctionType)(P0, P1, P2, P3); TypedMethodInfo4(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(cf), f_(0) { } TypedMethodInfo4(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)), Value(); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3)), Value(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo5: public MethodInfo { public: typedef void (C::*ConstFunctionType)(P0, P1, P2, P3, P4) const; typedef void (C::*FunctionType)(P0, P1, P2, P3, P4); TypedMethodInfo5(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(cf), f_(0) { } TypedMethodInfo5(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)), Value(); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4)), Value(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo6: public MethodInfo { public: typedef void (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5) const; typedef void (C::*FunctionType)(P0, P1, P2, P3, P4, P5); TypedMethodInfo6(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(cf), f_(0) { } TypedMethodInfo6(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)), Value(); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5)), Value(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo7: public MethodInfo { public: typedef void (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6) const; typedef void (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6); TypedMethodInfo7(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(cf), f_(0) { } TypedMethodInfo7(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)), Value(); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6)), Value(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo8: public MethodInfo { public: typedef void (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7) const; typedef void (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7); TypedMethodInfo8(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(cf), f_(0) { } TypedMethodInfo8(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)), Value(); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7)), Value(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo9: public MethodInfo { public: typedef void (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8) const; typedef void (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8); TypedMethodInfo9(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(cf), f_(0) { } TypedMethodInfo9(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)), Value(); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8)), Value(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo10: public MethodInfo { public: typedef void (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9) const; typedef void (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9); TypedMethodInfo10(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(cf), f_(0) { } TypedMethodInfo10(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)), Value(); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9)), Value(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo11: public MethodInfo { public: typedef void (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) const; typedef void (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10); TypedMethodInfo11(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(cf), f_(0) { } TypedMethodInfo11(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)), Value(); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10)), Value(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo12: public MethodInfo { public: typedef void (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) const; typedef void (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11); TypedMethodInfo12(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(cf), f_(0) { } TypedMethodInfo12(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)), Value(); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11)), Value(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo13: public MethodInfo { public: typedef void (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) const; typedef void (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12); TypedMethodInfo13(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(cf), f_(0) { } TypedMethodInfo13(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); Value a12(args[12].convertTo(typeof(P12))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); Value a12(args[12].convertTo(typeof(P12))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)), Value(); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12)), Value(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo14: public MethodInfo { public: typedef void (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) const; typedef void (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13); TypedMethodInfo14(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(cf), f_(0) { } TypedMethodInfo14(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); Value a12(args[12].convertTo(typeof(P12))); Value a13(args[13].convertTo(typeof(P13))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); Value a12(args[12].convertTo(typeof(P12))); Value a13(args[13].convertTo(typeof(P13))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)), Value(); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13)), Value(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo15: public MethodInfo { public: typedef void (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) const; typedef void (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14); TypedMethodInfo15(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(cf), f_(0) { } TypedMethodInfo15(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); Value a12(args[12].convertTo(typeof(P12))); Value a13(args[13].convertTo(typeof(P13))); Value a14(args[14].convertTo(typeof(P14))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); Value a12(args[12].convertTo(typeof(P12))); Value a13(args[13].convertTo(typeof(P13))); Value a14(args[14].convertTo(typeof(P14))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)), Value(); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14)), Value(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; template class TypedMethodInfo16: public MethodInfo { public: typedef void (C::*ConstFunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) const; typedef void (C::*FunctionType)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15); TypedMethodInfo16(const std::string &qname, ConstFunctionType cf, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(cf), f_(0) { } TypedMethodInfo16(const std::string &qname, FunctionType f, const ParameterInfoList &plist) : MethodInfo(qname, typeof(C), typeof(void), plist), cf_(0), f_(f) { } bool isConst() const { return cf_; } Value invoke(const Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); Value a12(args[12].convertTo(typeof(P12))); Value a13(args[13].convertTo(typeof(P13))); Value a14(args[14].convertTo(typeof(P14))); Value a15(args[15].convertTo(typeof(P15))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } Value invoke(Value &instance, ValueList &args) const { Value a0(args[0].convertTo(typeof(P0))); Value a1(args[1].convertTo(typeof(P1))); Value a2(args[2].convertTo(typeof(P2))); Value a3(args[3].convertTo(typeof(P3))); Value a4(args[4].convertTo(typeof(P4))); Value a5(args[5].convertTo(typeof(P5))); Value a6(args[6].convertTo(typeof(P6))); Value a7(args[7].convertTo(typeof(P7))); Value a8(args[8].convertTo(typeof(P8))); Value a9(args[9].convertTo(typeof(P9))); Value a10(args[10].convertTo(typeof(P10))); Value a11(args[11].convertTo(typeof(P11))); Value a12(args[12].convertTo(typeof(P12))); Value a13(args[13].convertTo(typeof(P13))); Value a14(args[14].convertTo(typeof(P14))); Value a15(args[15].convertTo(typeof(P15))); const Type &type = instance.getType(); if (type.isPointer()) { if (type.isConstPointer()) { if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)), Value(); if (f_) throw ConstIsConstException(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance)->*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)), Value(); if (f_) return (variant_cast(instance)->*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)), Value(); throw InvalidFunctionPointerException(); } if (cf_) return (variant_cast(instance).*cf_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)), Value(); if (f_) return (variant_cast(instance).*f_)(variant_cast(a0), variant_cast(a1), variant_cast(a2), variant_cast(a3), variant_cast(a4), variant_cast(a5), variant_cast(a6), variant_cast(a7), variant_cast(a8), variant_cast(a9), variant_cast(a10), variant_cast(a11), variant_cast(a12), variant_cast(a13), variant_cast(a14), variant_cast(a15)), Value(); throw InvalidFunctionPointerException(); } private: ConstFunctionType cf_; FunctionType f_; }; } #endif