PixelLightAPI  .
Params.h
Go to the documentation of this file.
00001 /*********************************************************\
00002  *  File: Params.h                                       *
00003  *
00004  *  Copyright (C) 2002-2012 The PixelLight Team (http://www.pixellight.org/)
00005  *
00006  *  This file is part of PixelLight.
00007  *
00008  *  PixelLight is free software: you can redistribute it and/or modify
00009  *  it under the terms of the GNU Lesser General Public License as published by
00010  *  the Free Software Foundation, either version 3 of the License, or
00011  *  (at your option) any later version.
00012  *
00013  *  PixelLight is distributed in the hope that it will be useful,
00014  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00016  *  GNU Lesser General Public License for more details.
00017  *
00018  *  You should have received a copy of the GNU Lesser General Public License
00019  *  along with PixelLight. If not, see <http://www.gnu.org/licenses/>.
00020 \*********************************************************/
00021 
00022 
00023 #ifndef __PLCORE_PARAMS_H__
00024 #define __PLCORE_PARAMS_H__
00025 #pragma once
00026 
00027 
00028 //[-------------------------------------------------------]
00029 //[ Includes                                              ]
00030 //[-------------------------------------------------------]
00031 #include "PLCore/Base/Type/Type.h"
00032 #include "PLCore/Base/Type/DefaultValue.h"
00033 #include "PLCore/Base/Tools/TypeTraits.h"
00034 #include "PLCore/Base/Tools/ParamsParser.h"
00035 #include "PLCore/Base/Tools/ParamsParserXml.h"
00036 #include "PLCore/Base/Func/Signature.h"
00037 #include "PLCore/Base/Func/DynParams.h"
00038 
00039 
00040 //[-------------------------------------------------------]
00041 //[ Namespace                                             ]
00042 //[-------------------------------------------------------]
00043 namespace PLCore {
00044 
00045 
00046 //[-------------------------------------------------------]
00047 //[ Classes                                               ]
00048 //[-------------------------------------------------------]
00049 /**
00050 *  @brief
00051 *    Parameters
00052 *
00053 *  @remarks
00054 *    Implementation for up to 16 parameters and a return value
00055 */
00056 template <typename R, typename T0 = NullType, typename T1 = NullType, typename T2 = NullType, typename T3 = NullType, typename T4 = NullType, typename T5 = NullType, typename T6 = NullType, typename T7 = NullType, typename T8 = NullType, typename T9 = NullType, typename T10 = NullType, typename T11 = NullType, typename T12 = NullType, typename T13 = NullType, typename T14 = NullType, typename T15 = NullType>
00057 class Params : public DynParams {
00058 
00059 
00060     //[-------------------------------------------------------]
00061     //[ Public data types                                     ]
00062     //[-------------------------------------------------------]
00063     public:
00064         // Storage types
00065         typedef typename Type<R>  ::_Type _R;
00066         typedef typename Type<T0> ::_Type _T0;
00067         typedef typename Type<T1> ::_Type _T1;
00068         typedef typename Type<T2> ::_Type _T2;
00069         typedef typename Type<T3> ::_Type _T3;
00070         typedef typename Type<T4> ::_Type _T4;
00071         typedef typename Type<T5> ::_Type _T5;
00072         typedef typename Type<T6> ::_Type _T6;
00073         typedef typename Type<T7> ::_Type _T7;
00074         typedef typename Type<T8> ::_Type _T8;
00075         typedef typename Type<T9> ::_Type _T9;
00076         typedef typename Type<T10>::_Type _T10;
00077         typedef typename Type<T11>::_Type _T11;
00078         typedef typename Type<T12>::_Type _T12;
00079         typedef typename Type<T13>::_Type _T13;
00080         typedef typename Type<T14>::_Type _T14;
00081         typedef typename Type<T15>::_Type _T15;
00082         typedef typename Type<R>  ::_StorageType _SR;
00083         typedef typename Type<T0> ::_StorageType _ST0;
00084         typedef typename Type<T1> ::_StorageType _ST1;
00085         typedef typename Type<T2> ::_StorageType _ST2;
00086         typedef typename Type<T3> ::_StorageType _ST3;
00087         typedef typename Type<T4> ::_StorageType _ST4;
00088         typedef typename Type<T5> ::_StorageType _ST5;
00089         typedef typename Type<T6> ::_StorageType _ST6;
00090         typedef typename Type<T7> ::_StorageType _ST7;
00091         typedef typename Type<T8> ::_StorageType _ST8;
00092         typedef typename Type<T9> ::_StorageType _ST9;
00093         typedef typename Type<T10>::_StorageType _ST10;
00094         typedef typename Type<T11>::_StorageType _ST11;
00095         typedef typename Type<T12>::_StorageType _ST12;
00096         typedef typename Type<T13>::_StorageType _ST13;
00097         typedef typename Type<T14>::_StorageType _ST14;
00098         typedef typename Type<T15>::_StorageType _ST15;
00099 
00100 
00101     //[-------------------------------------------------------]
00102     //[ Public data                                           ]
00103     //[-------------------------------------------------------]
00104     public:
00105         _SR   Return;
00106         _ST0  Param0;
00107         _ST1  Param1;
00108         _ST2  Param2;
00109         _ST3  Param3;
00110         _ST4  Param4;
00111         _ST5  Param5;
00112         _ST6  Param6;
00113         _ST7  Param7;
00114         _ST8  Param8;
00115         _ST9  Param9;
00116         _ST10 Param10;
00117         _ST11 Param11;
00118         _ST12 Param12;
00119         _ST13 Param13;
00120         _ST14 Param14;
00121         _ST15 Param15;
00122 
00123 
00124     //[-------------------------------------------------------]
00125     //[ Public static functions                               ]
00126     //[-------------------------------------------------------]
00127     public:
00128         static Params FromString(const String &sParams) {
00129             ParamsParser cParser;
00130             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
00131             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
00132             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
00133             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
00134             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
00135             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
00136             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
00137             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
00138             _T8  t8  = (cParser.Next()                  ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
00139             _T9  t9  = (cParser.Next()                  ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
00140             _T10 t10 = (cParser.Next()                  ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
00141             _T11 t11 = (cParser.Next()                  ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
00142             _T12 t12 = (cParser.Next()                  ? Type<T12>::ConvertFromString(cParser.GetValue()) : DefaultValue<T12>::Default());
00143             _T13 t13 = (cParser.Next()                  ? Type<T13>::ConvertFromString(cParser.GetValue()) : DefaultValue<T13>::Default());
00144             _T14 t14 = (cParser.Next()                  ? Type<T14>::ConvertFromString(cParser.GetValue()) : DefaultValue<T14>::Default());
00145             _T15 t15 = (cParser.Next()                  ? Type<T15>::ConvertFromString(cParser.GetValue()) : DefaultValue<T15>::Default());
00146             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
00147         }
00148 
00149         static Params FromXml(const XmlElement &cElement) {
00150             ParamsParserXml cParser;
00151             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
00152             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
00153             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
00154             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
00155             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
00156             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
00157             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
00158             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
00159             _T8  t8  = (cParser.Next()              ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
00160             _T9  t9  = (cParser.Next()              ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
00161             _T10 t10 = (cParser.Next()              ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
00162             _T11 t11 = (cParser.Next()              ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
00163             _T12 t12 = (cParser.Next()              ? Type<T12>::ConvertFromString(cParser.GetValue()) : DefaultValue<T12>::Default());
00164             _T13 t13 = (cParser.Next()              ? Type<T13>::ConvertFromString(cParser.GetValue()) : DefaultValue<T13>::Default());
00165             _T14 t14 = (cParser.Next()              ? Type<T14>::ConvertFromString(cParser.GetValue()) : DefaultValue<T14>::Default());
00166             _T15 t15 = (cParser.Next()              ? Type<T15>::ConvertFromString(cParser.GetValue()) : DefaultValue<T15>::Default());
00167             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
00168         }
00169 
00170 
00171     //[-------------------------------------------------------]
00172     //[ Public functions                                      ]
00173     //[-------------------------------------------------------]
00174     public:
00175         Params(const Params &cParams) :
00176             Return(DefaultValue<_SR>::Default()),
00177             Param0(cParams.Param0),
00178             Param1(cParams.Param1),
00179             Param2(cParams.Param2),
00180             Param3(cParams.Param3),
00181             Param4(cParams.Param4),
00182             Param5(cParams.Param5),
00183             Param6(cParams.Param6),
00184             Param7(cParams.Param7),
00185             Param8(cParams.Param8),
00186             Param9(cParams.Param9),
00187             Param10(cParams.Param10),
00188             Param11(cParams.Param11),
00189             Param12(cParams.Param12),
00190             Param13(cParams.Param13),
00191             Param14(cParams.Param14),
00192             Param15(cParams.Param15)
00193         {
00194         }
00195 
00196         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11, _T12 t12, _T13 t13, _T14 t14, _T15 t15) :
00197             Return(DefaultValue<_SR>::Default()),
00198             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
00199             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
00200             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
00201             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
00202             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
00203             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
00204             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
00205             Param7(Type<T7>  ::ConvertRealToStorage(t7)),
00206             Param8(Type<T8>  ::ConvertRealToStorage(t8)),
00207             Param9(Type<T9>  ::ConvertRealToStorage(t9)),
00208             Param10(Type<T10>::ConvertRealToStorage(t10)),
00209             Param11(Type<T11>::ConvertRealToStorage(t11)),
00210             Param12(Type<T12>::ConvertRealToStorage(t12)),
00211             Param13(Type<T13>::ConvertRealToStorage(t13)),
00212             Param14(Type<T14>::ConvertRealToStorage(t14)),
00213             Param15(Type<T15>::ConvertRealToStorage(t15))
00214         {
00215         }
00216 
00217         virtual ~Params()
00218         {
00219         }
00220 
00221         Params &operator =(const Params &cParams)
00222         {
00223             Return  = cParams.Return;
00224             Param0  = cParams.Param0;
00225             Param1  = cParams.Param1;
00226             Param2  = cParams.Param2;
00227             Param3  = cParams.Param3;
00228             Param4  = cParams.Param4;
00229             Param5  = cParams.Param5;
00230             Param6  = cParams.Param6;
00231             Param7  = cParams.Param7;
00232             Param8  = cParams.Param8;
00233             Param9  = cParams.Param9;
00234             Param10 = cParams.Param10;
00235             Param11 = cParams.Param11;
00236             Param12 = cParams.Param12;
00237             Param13 = cParams.Param13;
00238             Param14 = cParams.Param14;
00239             Param15 = cParams.Param15;
00240             return *this;
00241         }
00242 
00243         virtual String GetSignature() const override
00244         {
00245             return Signature<R, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>::GetSignatureID();
00246         }
00247 
00248         virtual int GetReturnTypeID() const override
00249         {
00250             return Type<R>::TypeID;
00251         }
00252 
00253         virtual void *GetPointerToReturnValue() override
00254         {
00255             return (void*)&Return;
00256         }
00257 
00258         virtual uint32 GetNumOfParameters() const override
00259         {
00260             return 16;
00261         }
00262 
00263         virtual int GetParameterTypeID(uint32 nIndex) const override
00264         {
00265             switch (nIndex) {
00266                 case 0:     return Type<T0> ::TypeID;
00267                 case 1:     return Type<T1> ::TypeID;
00268                 case 2:     return Type<T2> ::TypeID;
00269                 case 3:     return Type<T3> ::TypeID;
00270                 case 4:     return Type<T4> ::TypeID;
00271                 case 5:     return Type<T5> ::TypeID;
00272                 case 6:     return Type<T6> ::TypeID;
00273                 case 7:     return Type<T7> ::TypeID;
00274                 case 8:     return Type<T8> ::TypeID;
00275                 case 9:     return Type<T9> ::TypeID;
00276                 case 10:    return Type<T10>::TypeID;
00277                 case 11:    return Type<T11>::TypeID;
00278                 case 12:    return Type<T12>::TypeID;
00279                 case 13:    return Type<T13>::TypeID;
00280                 case 14:    return Type<T14>::TypeID;
00281                 case 15:    return Type<T15>::TypeID;
00282                 default:    return TypeInvalid;
00283             }
00284         }
00285 
00286         virtual void *GetPointerToParameterValue(uint32 nIndex) override
00287         {
00288             switch (nIndex) {
00289                 case 0:     return (void*)&Param0;
00290                 case 1:     return (void*)&Param1;
00291                 case 2:     return (void*)&Param2;
00292                 case 3:     return (void*)&Param3;
00293                 case 4:     return (void*)&Param4;
00294                 case 5:     return (void*)&Param5;
00295                 case 6:     return (void*)&Param6;
00296                 case 7:     return (void*)&Param7;
00297                 case 8:     return (void*)&Param8;
00298                 case 9:     return (void*)&Param9;
00299                 case 10:    return (void*)&Param10;
00300                 case 11:    return (void*)&Param11;
00301                 case 12:    return (void*)&Param12;
00302                 case 13:    return (void*)&Param13;
00303                 case 14:    return (void*)&Param14;
00304                 case 15:    return (void*)&Param15;
00305                 default:    return nullptr;
00306             }
00307         }
00308 
00309 };
00310 
00311 /**
00312 *  @brief
00313 *    Parameters
00314 *
00315 *  @remarks
00316 *    Implementation for up to 16 parameters without a return value
00317 */
00318 template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15>
00319 class Params<void, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> : public DynParams {
00320     public:
00321         typedef typename Type<T0> ::_Type _T0;
00322         typedef typename Type<T1> ::_Type _T1;
00323         typedef typename Type<T2> ::_Type _T2;
00324         typedef typename Type<T3> ::_Type _T3;
00325         typedef typename Type<T4> ::_Type _T4;
00326         typedef typename Type<T5> ::_Type _T5;
00327         typedef typename Type<T6> ::_Type _T6;
00328         typedef typename Type<T7> ::_Type _T7;
00329         typedef typename Type<T8> ::_Type _T8;
00330         typedef typename Type<T9> ::_Type _T9;
00331         typedef typename Type<T10>::_Type _T10;
00332         typedef typename Type<T11>::_Type _T11;
00333         typedef typename Type<T12>::_Type _T12;
00334         typedef typename Type<T13>::_Type _T13;
00335         typedef typename Type<T14>::_Type _T14;
00336         typedef typename Type<T15>::_Type _T15;
00337         typedef typename Type<T0> ::_StorageType _ST0;
00338         typedef typename Type<T1> ::_StorageType _ST1;
00339         typedef typename Type<T2> ::_StorageType _ST2;
00340         typedef typename Type<T3> ::_StorageType _ST3;
00341         typedef typename Type<T4> ::_StorageType _ST4;
00342         typedef typename Type<T5> ::_StorageType _ST5;
00343         typedef typename Type<T6> ::_StorageType _ST6;
00344         typedef typename Type<T7> ::_StorageType _ST7;
00345         typedef typename Type<T8> ::_StorageType _ST8;
00346         typedef typename Type<T9> ::_StorageType _ST9;
00347         typedef typename Type<T10>::_StorageType _ST10;
00348         typedef typename Type<T11>::_StorageType _ST11;
00349         typedef typename Type<T12>::_StorageType _ST12;
00350         typedef typename Type<T13>::_StorageType _ST13;
00351         typedef typename Type<T14>::_StorageType _ST14;
00352         typedef typename Type<T15>::_StorageType _ST15;
00353 
00354     public:
00355         _ST0  Param0;
00356         _ST1  Param1;
00357         _ST2  Param2;
00358         _ST3  Param3;
00359         _ST4  Param4;
00360         _ST5  Param5;
00361         _ST6  Param6;
00362         _ST7  Param7;
00363         _ST8  Param8;
00364         _ST9  Param9;
00365         _ST10 Param10;
00366         _ST11 Param11;
00367         _ST12 Param12;
00368         _ST13 Param13;
00369         _ST14 Param14;
00370         _ST15 Param15;
00371 
00372     public:
00373         static Params FromString(const String &sParams) {
00374             ParamsParser cParser;
00375             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
00376             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
00377             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
00378             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
00379             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
00380             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
00381             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
00382             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
00383             _T8  t8  = (cParser.Next()                  ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
00384             _T9  t9  = (cParser.Next()                  ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
00385             _T10 t10 = (cParser.Next()                  ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
00386             _T11 t11 = (cParser.Next()                  ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
00387             _T12 t12 = (cParser.Next()                  ? Type<T12>::ConvertFromString(cParser.GetValue()) : DefaultValue<T12>::Default());
00388             _T13 t13 = (cParser.Next()                  ? Type<T13>::ConvertFromString(cParser.GetValue()) : DefaultValue<T13>::Default());
00389             _T14 t14 = (cParser.Next()                  ? Type<T14>::ConvertFromString(cParser.GetValue()) : DefaultValue<T14>::Default());
00390             _T15 t15 = (cParser.Next()                  ? Type<T15>::ConvertFromString(cParser.GetValue()) : DefaultValue<T15>::Default());
00391             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
00392         }
00393 
00394         static Params FromXml(const XmlElement &cElement) {
00395             ParamsParserXml cParser;
00396             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
00397             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
00398             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
00399             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
00400             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
00401             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
00402             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
00403             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
00404             _T8  t8  = (cParser.Next()              ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
00405             _T9  t9  = (cParser.Next()              ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
00406             _T10 t10 = (cParser.Next()              ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
00407             _T11 t11 = (cParser.Next()              ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
00408             _T12 t12 = (cParser.Next()              ? Type<T12>::ConvertFromString(cParser.GetValue()) : DefaultValue<T12>::Default());
00409             _T13 t13 = (cParser.Next()              ? Type<T13>::ConvertFromString(cParser.GetValue()) : DefaultValue<T13>::Default());
00410             _T14 t14 = (cParser.Next()              ? Type<T14>::ConvertFromString(cParser.GetValue()) : DefaultValue<T14>::Default());
00411             _T15 t15 = (cParser.Next()              ? Type<T15>::ConvertFromString(cParser.GetValue()) : DefaultValue<T15>::Default());
00412             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
00413         }
00414 
00415     public:
00416         Params(const Params &cParams) :
00417             Param0(cParams.Param0),
00418             Param1(cParams.Param1),
00419             Param2(cParams.Param2),
00420             Param3(cParams.Param3),
00421             Param4(cParams.Param4),
00422             Param5(cParams.Param5),
00423             Param6(cParams.Param6),
00424             Param7(cParams.Param7),
00425             Param8(cParams.Param8),
00426             Param9(cParams.Param9),
00427             Param10(cParams.Param10),
00428             Param11(cParams.Param11),
00429             Param12(cParams.Param12),
00430             Param13(cParams.Param13),
00431             Param14(cParams.Param14),
00432             Param15(cParams.Param15)
00433         {
00434         }
00435 
00436         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11, _T12 t12, _T13 t13, _T14 t14, _T15 t15) :
00437             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
00438             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
00439             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
00440             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
00441             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
00442             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
00443             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
00444             Param7(Type<T7>  ::ConvertRealToStorage(t7)),
00445             Param8(Type<T8>  ::ConvertRealToStorage(t8)),
00446             Param9(Type<T9>  ::ConvertRealToStorage(t9)),
00447             Param10(Type<T10>::ConvertRealToStorage(t10)),
00448             Param11(Type<T11>::ConvertRealToStorage(t11)),
00449             Param12(Type<T12>::ConvertRealToStorage(t12)),
00450             Param13(Type<T13>::ConvertRealToStorage(t13)),
00451             Param14(Type<T14>::ConvertRealToStorage(t14)),
00452             Param15(Type<T15>::ConvertRealToStorage(t15))
00453         {
00454         }
00455 
00456         virtual ~Params()
00457         {
00458         }
00459 
00460         Params &operator =(const Params &cParams)
00461         {
00462             Param0  = cParams.Param0;
00463             Param1  = cParams.Param1;
00464             Param2  = cParams.Param2;
00465             Param3  = cParams.Param3;
00466             Param4  = cParams.Param4;
00467             Param5  = cParams.Param5;
00468             Param6  = cParams.Param6;
00469             Param7  = cParams.Param7;
00470             Param8  = cParams.Param8;
00471             Param9  = cParams.Param9;
00472             Param10 = cParams.Param10;
00473             Param11 = cParams.Param11;
00474             Param12 = cParams.Param12;
00475             Param13 = cParams.Param13;
00476             Param14 = cParams.Param14;
00477             Param15 = cParams.Param15;
00478             return *this;
00479         }
00480 
00481         virtual String GetSignature() const override
00482         {
00483             return Signature<void, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>::GetSignatureID();
00484         }
00485 
00486         virtual uint32 GetNumOfParameters() const override
00487         {
00488             return 16;
00489         }
00490 
00491         virtual int GetParameterTypeID(uint32 nIndex) const override
00492         {
00493             switch (nIndex) {
00494                 case 0:     return Type<T0> ::TypeID;
00495                 case 1:     return Type<T1> ::TypeID;
00496                 case 2:     return Type<T2> ::TypeID;
00497                 case 3:     return Type<T3> ::TypeID;
00498                 case 4:     return Type<T4> ::TypeID;
00499                 case 5:     return Type<T5> ::TypeID;
00500                 case 6:     return Type<T6> ::TypeID;
00501                 case 7:     return Type<T7> ::TypeID;
00502                 case 8:     return Type<T8> ::TypeID;
00503                 case 9:     return Type<T9> ::TypeID;
00504                 case 10:    return Type<T10>::TypeID;
00505                 case 11:    return Type<T11>::TypeID;
00506                 case 12:    return Type<T12>::TypeID;
00507                 case 13:    return Type<T13>::TypeID;
00508                 case 14:    return Type<T14>::TypeID;
00509                 case 15:    return Type<T15>::TypeID;
00510                 default:    return TypeInvalid;
00511             }
00512         }
00513 
00514         virtual void *GetPointerToParameterValue(uint32 nIndex) override
00515         {
00516             switch (nIndex) {
00517                 case 0:     return (void*)&Param0;
00518                 case 1:     return (void*)&Param1;
00519                 case 2:     return (void*)&Param2;
00520                 case 3:     return (void*)&Param3;
00521                 case 4:     return (void*)&Param4;
00522                 case 5:     return (void*)&Param5;
00523                 case 6:     return (void*)&Param6;
00524                 case 7:     return (void*)&Param7;
00525                 case 8:     return (void*)&Param8;
00526                 case 9:     return (void*)&Param9;
00527                 case 10:    return (void*)&Param10;
00528                 case 11:    return (void*)&Param11;
00529                 case 12:    return (void*)&Param12;
00530                 case 13:    return (void*)&Param13;
00531                 case 14:    return (void*)&Param14;
00532                 case 15:    return (void*)&Param15;
00533                 default:    return nullptr;
00534             }
00535         }
00536 };
00537 
00538 /**
00539 *  @brief
00540 *    Parameters
00541 *
00542 *  @remarks
00543 *    Implementation for 15 parameters and a return value
00544 */
00545 template <typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
00546 class Params<R, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> : public DynParams {
00547     public:
00548         typedef typename Type<R>  ::_Type _R;
00549         typedef typename Type<T0> ::_Type _T0;
00550         typedef typename Type<T1> ::_Type _T1;
00551         typedef typename Type<T2> ::_Type _T2;
00552         typedef typename Type<T3> ::_Type _T3;
00553         typedef typename Type<T4> ::_Type _T4;
00554         typedef typename Type<T5> ::_Type _T5;
00555         typedef typename Type<T6> ::_Type _T6;
00556         typedef typename Type<T7> ::_Type _T7;
00557         typedef typename Type<T8> ::_Type _T8;
00558         typedef typename Type<T9> ::_Type _T9;
00559         typedef typename Type<T10>::_Type _T10;
00560         typedef typename Type<T11>::_Type _T11;
00561         typedef typename Type<T12>::_Type _T12;
00562         typedef typename Type<T13>::_Type _T13;
00563         typedef typename Type<T14>::_Type _T14;
00564         typedef typename Type<R>  ::_StorageType _SR;
00565         typedef typename Type<T0> ::_StorageType _ST0;
00566         typedef typename Type<T1> ::_StorageType _ST1;
00567         typedef typename Type<T2> ::_StorageType _ST2;
00568         typedef typename Type<T3> ::_StorageType _ST3;
00569         typedef typename Type<T4> ::_StorageType _ST4;
00570         typedef typename Type<T5> ::_StorageType _ST5;
00571         typedef typename Type<T6> ::_StorageType _ST6;
00572         typedef typename Type<T7> ::_StorageType _ST7;
00573         typedef typename Type<T8> ::_StorageType _ST8;
00574         typedef typename Type<T9> ::_StorageType _ST9;
00575         typedef typename Type<T10>::_StorageType _ST10;
00576         typedef typename Type<T11>::_StorageType _ST11;
00577         typedef typename Type<T12>::_StorageType _ST12;
00578         typedef typename Type<T13>::_StorageType _ST13;
00579         typedef typename Type<T14>::_StorageType _ST14;
00580 
00581     public:
00582         _SR   Return;
00583         _ST0  Param0;
00584         _ST1  Param1;
00585         _ST2  Param2;
00586         _ST3  Param3;
00587         _ST4  Param4;
00588         _ST5  Param5;
00589         _ST6  Param6;
00590         _ST7  Param7;
00591         _ST8  Param8;
00592         _ST9  Param9;
00593         _ST10 Param10;
00594         _ST11 Param11;
00595         _ST12 Param12;
00596         _ST13 Param13;
00597         _ST14 Param14;
00598 
00599     public:
00600         static Params FromString(const String &sParams) {
00601             ParamsParser cParser;
00602             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
00603             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
00604             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
00605             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
00606             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
00607             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
00608             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
00609             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
00610             _T8  t8  = (cParser.Next()                  ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
00611             _T9  t9  = (cParser.Next()                  ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
00612             _T10 t10 = (cParser.Next()                  ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
00613             _T11 t11 = (cParser.Next()                  ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
00614             _T12 t12 = (cParser.Next()                  ? Type<T12>::ConvertFromString(cParser.GetValue()) : DefaultValue<T12>::Default());
00615             _T13 t13 = (cParser.Next()                  ? Type<T13>::ConvertFromString(cParser.GetValue()) : DefaultValue<T13>::Default());
00616             _T14 t14 = (cParser.Next()                  ? Type<T14>::ConvertFromString(cParser.GetValue()) : DefaultValue<T14>::Default());
00617             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
00618         }
00619 
00620         static Params FromXml(const XmlElement &cElement) {
00621             ParamsParserXml cParser;
00622             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
00623             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
00624             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
00625             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
00626             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
00627             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
00628             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
00629             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
00630             _T8  t8  = (cParser.Next()              ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
00631             _T9  t9  = (cParser.Next()              ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
00632             _T10 t10 = (cParser.Next()              ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
00633             _T11 t11 = (cParser.Next()              ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
00634             _T12 t12 = (cParser.Next()              ? Type<T12>::ConvertFromString(cParser.GetValue()) : DefaultValue<T12>::Default());
00635             _T13 t13 = (cParser.Next()              ? Type<T13>::ConvertFromString(cParser.GetValue()) : DefaultValue<T13>::Default());
00636             _T14 t14 = (cParser.Next()              ? Type<T14>::ConvertFromString(cParser.GetValue()) : DefaultValue<T14>::Default());
00637             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
00638         }
00639 
00640     public:
00641         Params(const Params &cParams) :
00642             Return(DefaultValue<_SR>::Default()),
00643             Param0(cParams.Param0),
00644             Param1(cParams.Param1),
00645             Param2(cParams.Param2),
00646             Param3(cParams.Param3),
00647             Param4(cParams.Param4),
00648             Param5(cParams.Param5),
00649             Param6(cParams.Param6),
00650             Param7(cParams.Param7),
00651             Param8(cParams.Param8),
00652             Param9(cParams.Param9),
00653             Param10(cParams.Param10),
00654             Param11(cParams.Param11),
00655             Param12(cParams.Param12),
00656             Param13(cParams.Param13),
00657             Param14(cParams.Param14)
00658         {
00659         }
00660 
00661         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11, _T12 t12, _T13 t13, _T14 t14) :
00662             Return(DefaultValue<_SR>::Default()),
00663             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
00664             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
00665             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
00666             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
00667             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
00668             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
00669             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
00670             Param7(Type<T7>  ::ConvertRealToStorage(t7)),
00671             Param8(Type<T8>  ::ConvertRealToStorage(t8)),
00672             Param9(Type<T9>  ::ConvertRealToStorage(t9)),
00673             Param10(Type<T10>::ConvertRealToStorage(t10)),
00674             Param11(Type<T11>::ConvertRealToStorage(t11)),
00675             Param12(Type<T12>::ConvertRealToStorage(t12)),
00676             Param13(Type<T13>::ConvertRealToStorage(t13)),
00677             Param14(Type<T14>::ConvertRealToStorage(t14))
00678         {
00679         }
00680 
00681         virtual ~Params()
00682         {
00683         }
00684 
00685         Params &operator =(const Params &cParams)
00686         {
00687             Return  = cParams.Return;
00688             Param0  = cParams.Param0;
00689             Param1  = cParams.Param1;
00690             Param2  = cParams.Param2;
00691             Param3  = cParams.Param3;
00692             Param4  = cParams.Param4;
00693             Param5  = cParams.Param5;
00694             Param6  = cParams.Param6;
00695             Param7  = cParams.Param7;
00696             Param8  = cParams.Param8;
00697             Param9  = cParams.Param9;
00698             Param10 = cParams.Param10;
00699             Param11 = cParams.Param11;
00700             Param12 = cParams.Param12;
00701             Param13 = cParams.Param13;
00702             Param14 = cParams.Param14;
00703             return *this;
00704         }
00705 
00706         virtual String GetSignature() const override
00707         {
00708             return Signature<R, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>::GetSignatureID();
00709         }
00710 
00711         virtual int GetReturnTypeID() const override
00712         {
00713             return Type<R>::TypeID;
00714         }
00715 
00716         virtual void *GetPointerToReturnValue() override
00717         {
00718             return (void*)&Return;
00719         }
00720 
00721         virtual uint32 GetNumOfParameters() const override
00722         {
00723             return 15;
00724         }
00725 
00726         virtual int GetParameterTypeID(uint32 nIndex) const override
00727         {
00728             switch (nIndex) {
00729                 case 0:     return Type<T0> ::TypeID;
00730                 case 1:     return Type<T1> ::TypeID;
00731                 case 2:     return Type<T2> ::TypeID;
00732                 case 3:     return Type<T3> ::TypeID;
00733                 case 4:     return Type<T4> ::TypeID;
00734                 case 5:     return Type<T5> ::TypeID;
00735                 case 6:     return Type<T6> ::TypeID;
00736                 case 7:     return Type<T7> ::TypeID;
00737                 case 8:     return Type<T8> ::TypeID;
00738                 case 9:     return Type<T9> ::TypeID;
00739                 case 10:    return Type<T10>::TypeID;
00740                 case 11:    return Type<T11>::TypeID;
00741                 case 12:    return Type<T12>::TypeID;
00742                 case 13:    return Type<T13>::TypeID;
00743                 case 14:    return Type<T14>::TypeID;
00744                 default:    return TypeInvalid;
00745             }
00746         }
00747 
00748         virtual void *GetPointerToParameterValue(uint32 nIndex) override
00749         {
00750             switch (nIndex) {
00751                 case 0:     return (void*)&Param0;
00752                 case 1:     return (void*)&Param1;
00753                 case 2:     return (void*)&Param2;
00754                 case 3:     return (void*)&Param3;
00755                 case 4:     return (void*)&Param4;
00756                 case 5:     return (void*)&Param5;
00757                 case 6:     return (void*)&Param6;
00758                 case 7:     return (void*)&Param7;
00759                 case 8:     return (void*)&Param8;
00760                 case 9:     return (void*)&Param9;
00761                 case 10:    return (void*)&Param10;
00762                 case 11:    return (void*)&Param11;
00763                 case 12:    return (void*)&Param12;
00764                 case 13:    return (void*)&Param13;
00765                 case 14:    return (void*)&Param14;
00766                 default:    return nullptr;
00767             }
00768         }
00769 };
00770 
00771 /**
00772 *  @brief
00773 *    Parameters
00774 *
00775 *  @remarks
00776 *    Implementation for 15 parameters without a return value
00777 */
00778 template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
00779 class Params<void, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> : public DynParams {
00780     public:
00781         typedef typename Type<T0> ::_Type _T0;
00782         typedef typename Type<T1> ::_Type _T1;
00783         typedef typename Type<T2> ::_Type _T2;
00784         typedef typename Type<T3> ::_Type _T3;
00785         typedef typename Type<T4> ::_Type _T4;
00786         typedef typename Type<T5> ::_Type _T5;
00787         typedef typename Type<T6> ::_Type _T6;
00788         typedef typename Type<T7> ::_Type _T7;
00789         typedef typename Type<T8> ::_Type _T8;
00790         typedef typename Type<T9> ::_Type _T9;
00791         typedef typename Type<T10>::_Type _T10;
00792         typedef typename Type<T11>::_Type _T11;
00793         typedef typename Type<T12>::_Type _T12;
00794         typedef typename Type<T13>::_Type _T13;
00795         typedef typename Type<T14>::_Type _T14;
00796         typedef typename Type<T0> ::_StorageType _ST0;
00797         typedef typename Type<T1> ::_StorageType _ST1;
00798         typedef typename Type<T2> ::_StorageType _ST2;
00799         typedef typename Type<T3> ::_StorageType _ST3;
00800         typedef typename Type<T4> ::_StorageType _ST4;
00801         typedef typename Type<T5> ::_StorageType _ST5;
00802         typedef typename Type<T6> ::_StorageType _ST6;
00803         typedef typename Type<T7> ::_StorageType _ST7;
00804         typedef typename Type<T8> ::_StorageType _ST8;
00805         typedef typename Type<T9> ::_StorageType _ST9;
00806         typedef typename Type<T10>::_StorageType _ST10;
00807         typedef typename Type<T11>::_StorageType _ST11;
00808         typedef typename Type<T12>::_StorageType _ST12;
00809         typedef typename Type<T13>::_StorageType _ST13;
00810         typedef typename Type<T14>::_StorageType _ST14;
00811 
00812     public:
00813         _ST0  Param0;
00814         _ST1  Param1;
00815         _ST2  Param2;
00816         _ST3  Param3;
00817         _ST4  Param4;
00818         _ST5  Param5;
00819         _ST6  Param6;
00820         _ST7  Param7;
00821         _ST8  Param8;
00822         _ST9  Param9;
00823         _ST10 Param10;
00824         _ST11 Param11;
00825         _ST12 Param12;
00826         _ST13 Param13;
00827         _ST14 Param14;
00828 
00829     public:
00830         static Params FromString(const String &sParams) {
00831             ParamsParser cParser;
00832             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
00833             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
00834             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
00835             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
00836             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
00837             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
00838             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
00839             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
00840             _T8  t8  = (cParser.Next()                  ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
00841             _T9  t9  = (cParser.Next()                  ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
00842             _T10 t10 = (cParser.Next()                  ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
00843             _T11 t11 = (cParser.Next()                  ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
00844             _T12 t12 = (cParser.Next()                  ? Type<T12>::ConvertFromString(cParser.GetValue()) : DefaultValue<T12>::Default());
00845             _T13 t13 = (cParser.Next()                  ? Type<T13>::ConvertFromString(cParser.GetValue()) : DefaultValue<T13>::Default());
00846             _T14 t14 = (cParser.Next()                  ? Type<T14>::ConvertFromString(cParser.GetValue()) : DefaultValue<T14>::Default());
00847             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
00848         }
00849 
00850         static Params FromXml(const XmlElement &cElement) {
00851             ParamsParserXml cParser;
00852             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
00853             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
00854             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
00855             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
00856             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
00857             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
00858             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
00859             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
00860             _T8  t8  = (cParser.Next()              ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
00861             _T9  t9  = (cParser.Next()              ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
00862             _T10 t10 = (cParser.Next()              ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
00863             _T11 t11 = (cParser.Next()              ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
00864             _T12 t12 = (cParser.Next()              ? Type<T12>::ConvertFromString(cParser.GetValue()) : DefaultValue<T12>::Default());
00865             _T13 t13 = (cParser.Next()              ? Type<T13>::ConvertFromString(cParser.GetValue()) : DefaultValue<T13>::Default());
00866             _T14 t14 = (cParser.Next()              ? Type<T14>::ConvertFromString(cParser.GetValue()) : DefaultValue<T14>::Default());
00867             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
00868         }
00869 
00870     public:
00871         Params(const Params &cParams) :
00872             Param0(cParams.Param0),
00873             Param1(cParams.Param1),
00874             Param2(cParams.Param2),
00875             Param3(cParams.Param3),
00876             Param4(cParams.Param4),
00877             Param5(cParams.Param5),
00878             Param6(cParams.Param6),
00879             Param7(cParams.Param7),
00880             Param8(cParams.Param8),
00881             Param9(cParams.Param9),
00882             Param10(cParams.Param10),
00883             Param11(cParams.Param11),
00884             Param12(cParams.Param12),
00885             Param13(cParams.Param13),
00886             Param14(cParams.Param14)
00887         {
00888         }
00889 
00890         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11, _T12 t12, _T13 t13, _T14 t14) :
00891             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
00892             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
00893             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
00894             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
00895             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
00896             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
00897             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
00898             Param7(Type<T7>  ::ConvertRealToStorage(t7)),
00899             Param8(Type<T8>  ::ConvertRealToStorage(t8)),
00900             Param9(Type<T9>  ::ConvertRealToStorage(t9)),
00901             Param10(Type<T10>::ConvertRealToStorage(t10)),
00902             Param11(Type<T11>::ConvertRealToStorage(t11)),
00903             Param12(Type<T12>::ConvertRealToStorage(t12)),
00904             Param13(Type<T13>::ConvertRealToStorage(t13)),
00905             Param14(Type<T14>::ConvertRealToStorage(t14))
00906         {
00907         }
00908 
00909         virtual ~Params()
00910         {
00911         }
00912 
00913         Params &operator =(const Params &cParams)
00914         {
00915             Param0  = cParams.Param0;
00916             Param1  = cParams.Param1;
00917             Param2  = cParams.Param2;
00918             Param3  = cParams.Param3;
00919             Param4  = cParams.Param4;
00920             Param5  = cParams.Param5;
00921             Param6  = cParams.Param6;
00922             Param7  = cParams.Param7;
00923             Param8  = cParams.Param8;
00924             Param9  = cParams.Param9;
00925             Param10 = cParams.Param10;
00926             Param11 = cParams.Param11;
00927             Param12 = cParams.Param12;
00928             Param13 = cParams.Param13;
00929             Param14 = cParams.Param14;
00930             return *this;
00931         }
00932 
00933         virtual String GetSignature() const override
00934         {
00935             return Signature<void, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>::GetSignatureID();
00936         }
00937 
00938         virtual uint32 GetNumOfParameters() const override
00939         {
00940             return 15;
00941         }
00942 
00943         virtual int GetParameterTypeID(uint32 nIndex) const override
00944         {
00945             switch (nIndex) {
00946                 case 0:     return Type<T0> ::TypeID;
00947                 case 1:     return Type<T1> ::TypeID;
00948                 case 2:     return Type<T2> ::TypeID;
00949                 case 3:     return Type<T3> ::TypeID;
00950                 case 4:     return Type<T4> ::TypeID;
00951                 case 5:     return Type<T5> ::TypeID;
00952                 case 6:     return Type<T6> ::TypeID;
00953                 case 7:     return Type<T7> ::TypeID;
00954                 case 8:     return Type<T8> ::TypeID;
00955                 case 9:     return Type<T9> ::TypeID;
00956                 case 10:    return Type<T10>::TypeID;
00957                 case 11:    return Type<T11>::TypeID;
00958                 case 12:    return Type<T12>::TypeID;
00959                 case 13:    return Type<T13>::TypeID;
00960                 case 14:    return Type<T14>::TypeID;
00961                 default:    return TypeInvalid;
00962             }
00963         }
00964 
00965         virtual void *GetPointerToParameterValue(uint32 nIndex) override
00966         {
00967             switch (nIndex) {
00968                 case 0:     return (void*)&Param0;
00969                 case 1:     return (void*)&Param1;
00970                 case 2:     return (void*)&Param2;
00971                 case 3:     return (void*)&Param3;
00972                 case 4:     return (void*)&Param4;
00973                 case 5:     return (void*)&Param5;
00974                 case 6:     return (void*)&Param6;
00975                 case 7:     return (void*)&Param7;
00976                 case 8:     return (void*)&Param8;
00977                 case 9:     return (void*)&Param9;
00978                 case 10:    return (void*)&Param10;
00979                 case 11:    return (void*)&Param11;
00980                 case 12:    return (void*)&Param12;
00981                 case 13:    return (void*)&Param13;
00982                 case 14:    return (void*)&Param14;
00983                 default:    return nullptr;
00984             }
00985         }
00986 };
00987 
00988 /**
00989 *  @brief
00990 *    Parameters
00991 *
00992 *  @remarks
00993 *    Implementation for 14 parameters and a return value
00994 */
00995 template <typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
00996 class Params<R, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> : public DynParams {
00997     public:
00998         typedef typename Type<R>  ::_Type _R;
00999         typedef typename Type<T0> ::_Type _T0;
01000         typedef typename Type<T1> ::_Type _T1;
01001         typedef typename Type<T2> ::_Type _T2;
01002         typedef typename Type<T3> ::_Type _T3;
01003         typedef typename Type<T4> ::_Type _T4;
01004         typedef typename Type<T5> ::_Type _T5;
01005         typedef typename Type<T6> ::_Type _T6;
01006         typedef typename Type<T7> ::_Type _T7;
01007         typedef typename Type<T8> ::_Type _T8;
01008         typedef typename Type<T9> ::_Type _T9;
01009         typedef typename Type<T10>::_Type _T10;
01010         typedef typename Type<T11>::_Type _T11;
01011         typedef typename Type<T12>::_Type _T12;
01012         typedef typename Type<T13>::_Type _T13;
01013         typedef typename Type<R>  ::_StorageType _SR;
01014         typedef typename Type<T0> ::_StorageType _ST0;
01015         typedef typename Type<T1> ::_StorageType _ST1;
01016         typedef typename Type<T2> ::_StorageType _ST2;
01017         typedef typename Type<T3> ::_StorageType _ST3;
01018         typedef typename Type<T4> ::_StorageType _ST4;
01019         typedef typename Type<T5> ::_StorageType _ST5;
01020         typedef typename Type<T6> ::_StorageType _ST6;
01021         typedef typename Type<T7> ::_StorageType _ST7;
01022         typedef typename Type<T8> ::_StorageType _ST8;
01023         typedef typename Type<T9> ::_StorageType _ST9;
01024         typedef typename Type<T10>::_StorageType _ST10;
01025         typedef typename Type<T11>::_StorageType _ST11;
01026         typedef typename Type<T12>::_StorageType _ST12;
01027         typedef typename Type<T13>::_StorageType _ST13;
01028 
01029     public:
01030         _SR   Return;
01031         _ST0  Param0;
01032         _ST1  Param1;
01033         _ST2  Param2;
01034         _ST3  Param3;
01035         _ST4  Param4;
01036         _ST5  Param5;
01037         _ST6  Param6;
01038         _ST7  Param7;
01039         _ST8  Param8;
01040         _ST9  Param9;
01041         _ST10 Param10;
01042         _ST11 Param11;
01043         _ST12 Param12;
01044         _ST13 Param13;
01045 
01046     public:
01047         static Params FromString(const String &sParams) {
01048             ParamsParser cParser;
01049             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
01050             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
01051             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
01052             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
01053             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
01054             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
01055             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
01056             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
01057             _T8  t8  = (cParser.Next()                  ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
01058             _T9  t9  = (cParser.Next()                  ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
01059             _T10 t10 = (cParser.Next()                  ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
01060             _T11 t11 = (cParser.Next()                  ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
01061             _T12 t12 = (cParser.Next()                  ? Type<T12>::ConvertFromString(cParser.GetValue()) : DefaultValue<T12>::Default());
01062             _T13 t13 = (cParser.Next()                  ? Type<T13>::ConvertFromString(cParser.GetValue()) : DefaultValue<T13>::Default());
01063             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
01064         }
01065 
01066         static Params FromXml(const XmlElement &cElement) {
01067             ParamsParserXml cParser;
01068             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
01069             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
01070             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
01071             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
01072             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
01073             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
01074             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
01075             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
01076             _T8  t8  = (cParser.Next()              ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
01077             _T9  t9  = (cParser.Next()              ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
01078             _T10 t10 = (cParser.Next()              ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
01079             _T11 t11 = (cParser.Next()              ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
01080             _T12 t12 = (cParser.Next()              ? Type<T12>::ConvertFromString(cParser.GetValue()) : DefaultValue<T12>::Default());
01081             _T13 t13 = (cParser.Next()              ? Type<T13>::ConvertFromString(cParser.GetValue()) : DefaultValue<T13>::Default());
01082             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
01083         }
01084 
01085     public:
01086         Params(const Params &cParams) :
01087             Return(DefaultValue<_SR>::Default()),
01088             Param0(cParams.Param0),
01089             Param1(cParams.Param1),
01090             Param2(cParams.Param2),
01091             Param3(cParams.Param3),
01092             Param4(cParams.Param4),
01093             Param5(cParams.Param5),
01094             Param6(cParams.Param6),
01095             Param7(cParams.Param7),
01096             Param8(cParams.Param8),
01097             Param9(cParams.Param9),
01098             Param10(cParams.Param10),
01099             Param11(cParams.Param11),
01100             Param12(cParams.Param12),
01101             Param13(cParams.Param13)
01102         {
01103         }
01104 
01105         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11, _T12 t12, _T13 t13) :
01106             Return(DefaultValue<_SR>::Default()),
01107             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
01108             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
01109             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
01110             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
01111             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
01112             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
01113             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
01114             Param7(Type<T7>  ::ConvertRealToStorage(t7)),
01115             Param8(Type<T8>  ::ConvertRealToStorage(t8)),
01116             Param9(Type<T9>  ::ConvertRealToStorage(t9)),
01117             Param10(Type<T10>::ConvertRealToStorage(t10)),
01118             Param11(Type<T11>::ConvertRealToStorage(t11)),
01119             Param12(Type<T12>::ConvertRealToStorage(t12)),
01120             Param13(Type<T13>::ConvertRealToStorage(t13))
01121         {
01122         }
01123 
01124         virtual ~Params()
01125         {
01126         }
01127 
01128         Params &operator =(const Params &cParams)
01129         {
01130             Return  = cParams.Return;
01131             Param0  = cParams.Param0;
01132             Param1  = cParams.Param1;
01133             Param2  = cParams.Param2;
01134             Param3  = cParams.Param3;
01135             Param4  = cParams.Param4;
01136             Param5  = cParams.Param5;
01137             Param6  = cParams.Param6;
01138             Param7  = cParams.Param7;
01139             Param8  = cParams.Param8;
01140             Param9  = cParams.Param9;
01141             Param10 = cParams.Param10;
01142             Param11 = cParams.Param11;
01143             Param12 = cParams.Param12;
01144             Param13 = cParams.Param13;
01145             return *this;
01146         }
01147 
01148         virtual String GetSignature() const override
01149         {
01150             return Signature<R, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::GetSignatureID();
01151         }
01152 
01153         virtual int GetReturnTypeID() const override
01154         {
01155             return Type<R>::TypeID;
01156         }
01157 
01158         virtual void *GetPointerToReturnValue() override
01159         {
01160             return (void*)&Return;
01161         }
01162 
01163         virtual uint32 GetNumOfParameters() const override
01164         {
01165             return 14;
01166         }
01167 
01168         virtual int GetParameterTypeID(uint32 nIndex) const override
01169         {
01170             switch (nIndex) {
01171                 case 0:     return Type<T0> ::TypeID;
01172                 case 1:     return Type<T1> ::TypeID;
01173                 case 2:     return Type<T2> ::TypeID;
01174                 case 3:     return Type<T3> ::TypeID;
01175                 case 4:     return Type<T4> ::TypeID;
01176                 case 5:     return Type<T5> ::TypeID;
01177                 case 6:     return Type<T6> ::TypeID;
01178                 case 7:     return Type<T7> ::TypeID;
01179                 case 8:     return Type<T8> ::TypeID;
01180                 case 9:     return Type<T9> ::TypeID;
01181                 case 10:    return Type<T10>::TypeID;
01182                 case 11:    return Type<T11>::TypeID;
01183                 case 12:    return Type<T12>::TypeID;
01184                 case 13:    return Type<T13>::TypeID;
01185                 default:    return TypeInvalid;
01186             }
01187         }
01188 
01189         virtual void *GetPointerToParameterValue(uint32 nIndex) override
01190         {
01191             switch (nIndex) {
01192                 case 0:     return (void*)&Param0;
01193                 case 1:     return (void*)&Param1;
01194                 case 2:     return (void*)&Param2;
01195                 case 3:     return (void*)&Param3;
01196                 case 4:     return (void*)&Param4;
01197                 case 5:     return (void*)&Param5;
01198                 case 6:     return (void*)&Param6;
01199                 case 7:     return (void*)&Param7;
01200                 case 8:     return (void*)&Param8;
01201                 case 9:     return (void*)&Param9;
01202                 case 10:    return (void*)&Param10;
01203                 case 11:    return (void*)&Param11;
01204                 case 12:    return (void*)&Param12;
01205                 case 13:    return (void*)&Param13;
01206                 default:    return nullptr;
01207             }
01208         }
01209 };
01210 
01211 /**
01212 *  @brief
01213 *    Parameters
01214 *
01215 *  @remarks
01216 *    Implementation for 14 parameters without a return value
01217 */
01218 template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
01219 class Params<void, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> : public DynParams {
01220     public:
01221         typedef typename Type<T0> ::_Type _T0;
01222         typedef typename Type<T1> ::_Type _T1;
01223         typedef typename Type<T2> ::_Type _T2;
01224         typedef typename Type<T3> ::_Type _T3;
01225         typedef typename Type<T4> ::_Type _T4;
01226         typedef typename Type<T5> ::_Type _T5;
01227         typedef typename Type<T6> ::_Type _T6;
01228         typedef typename Type<T7> ::_Type _T7;
01229         typedef typename Type<T8> ::_Type _T8;
01230         typedef typename Type<T9> ::_Type _T9;
01231         typedef typename Type<T10>::_Type _T10;
01232         typedef typename Type<T11>::_Type _T11;
01233         typedef typename Type<T12>::_Type _T12;
01234         typedef typename Type<T13>::_Type _T13;
01235         typedef typename Type<T0> ::_StorageType _ST0;
01236         typedef typename Type<T1> ::_StorageType _ST1;
01237         typedef typename Type<T2> ::_StorageType _ST2;
01238         typedef typename Type<T3> ::_StorageType _ST3;
01239         typedef typename Type<T4> ::_StorageType _ST4;
01240         typedef typename Type<T5> ::_StorageType _ST5;
01241         typedef typename Type<T6> ::_StorageType _ST6;
01242         typedef typename Type<T7> ::_StorageType _ST7;
01243         typedef typename Type<T8> ::_StorageType _ST8;
01244         typedef typename Type<T9> ::_StorageType _ST9;
01245         typedef typename Type<T10>::_StorageType _ST10;
01246         typedef typename Type<T11>::_StorageType _ST11;
01247         typedef typename Type<T12>::_StorageType _ST12;
01248         typedef typename Type<T13>::_StorageType _ST13;
01249 
01250     public:
01251         _ST0  Param0;
01252         _ST1  Param1;
01253         _ST2  Param2;
01254         _ST3  Param3;
01255         _ST4  Param4;
01256         _ST5  Param5;
01257         _ST6  Param6;
01258         _ST7  Param7;
01259         _ST8  Param8;
01260         _ST9  Param9;
01261         _ST10 Param10;
01262         _ST11 Param11;
01263         _ST12 Param12;
01264         _ST13 Param13;
01265 
01266     public:
01267         static Params FromString(const String &sParams) {
01268             ParamsParser cParser;
01269             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
01270             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
01271             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
01272             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
01273             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
01274             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
01275             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
01276             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
01277             _T8  t8  = (cParser.Next()                  ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
01278             _T9  t9  = (cParser.Next()                  ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
01279             _T10 t10 = (cParser.Next()                  ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
01280             _T11 t11 = (cParser.Next()                  ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
01281             _T12 t12 = (cParser.Next()                  ? Type<T12>::ConvertFromString(cParser.GetValue()) : DefaultValue<T12>::Default());
01282             _T13 t13 = (cParser.Next()                  ? Type<T13>::ConvertFromString(cParser.GetValue()) : DefaultValue<T13>::Default());
01283             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
01284         }
01285 
01286         static Params FromXml(const XmlElement &cElement) {
01287             ParamsParserXml cParser;
01288             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
01289             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
01290             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
01291             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
01292             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
01293             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
01294             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
01295             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
01296             _T8  t8  = (cParser.Next()              ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
01297             _T9  t9  = (cParser.Next()              ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
01298             _T10 t10 = (cParser.Next()              ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
01299             _T11 t11 = (cParser.Next()              ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
01300             _T12 t12 = (cParser.Next()              ? Type<T12>::ConvertFromString(cParser.GetValue()) : DefaultValue<T12>::Default());
01301             _T13 t13 = (cParser.Next()              ? Type<T13>::ConvertFromString(cParser.GetValue()) : DefaultValue<T13>::Default());
01302             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
01303         }
01304 
01305     public:
01306         Params(const Params &cParams) :
01307             Param0(cParams.Param0),
01308             Param1(cParams.Param1),
01309             Param2(cParams.Param2),
01310             Param3(cParams.Param3),
01311             Param4(cParams.Param4),
01312             Param5(cParams.Param5),
01313             Param6(cParams.Param6),
01314             Param7(cParams.Param7),
01315             Param8(cParams.Param8),
01316             Param9(cParams.Param9),
01317             Param10(cParams.Param10),
01318             Param11(cParams.Param11),
01319             Param12(cParams.Param12),
01320             Param13(cParams.Param13)
01321         {
01322         }
01323 
01324         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11, _T12 t12, _T13 t13) :
01325             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
01326             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
01327             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
01328             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
01329             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
01330             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
01331             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
01332             Param7(Type<T7>  ::ConvertRealToStorage(t7)),
01333             Param8(Type<T8>  ::ConvertRealToStorage(t8)),
01334             Param9(Type<T9>  ::ConvertRealToStorage(t9)),
01335             Param10(Type<T10>::ConvertRealToStorage(t10)),
01336             Param11(Type<T11>::ConvertRealToStorage(t11)),
01337             Param12(Type<T12>::ConvertRealToStorage(t12)),
01338             Param13(Type<T13>::ConvertRealToStorage(t13))
01339         {
01340         }
01341 
01342         virtual ~Params()
01343         {
01344         }
01345 
01346         Params &operator =(const Params &cParams)
01347         {
01348             Param0  = cParams.Param0;
01349             Param1  = cParams.Param1;
01350             Param2  = cParams.Param2;
01351             Param3  = cParams.Param3;
01352             Param4  = cParams.Param4;
01353             Param5  = cParams.Param5;
01354             Param6  = cParams.Param6;
01355             Param7  = cParams.Param7;
01356             Param8  = cParams.Param8;
01357             Param9  = cParams.Param9;
01358             Param10 = cParams.Param10;
01359             Param11 = cParams.Param11;
01360             Param12 = cParams.Param12;
01361             Param13 = cParams.Param13;
01362             return *this;
01363         }
01364 
01365         virtual String GetSignature() const override
01366         {
01367             return Signature<void, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::GetSignatureID();
01368         }
01369 
01370         virtual uint32 GetNumOfParameters() const override
01371         {
01372             return 14;
01373         }
01374 
01375         virtual int GetParameterTypeID(uint32 nIndex) const override
01376         {
01377             switch (nIndex) {
01378                 case 0:     return Type<T0> ::TypeID;
01379                 case 1:     return Type<T1> ::TypeID;
01380                 case 2:     return Type<T2> ::TypeID;
01381                 case 3:     return Type<T3> ::TypeID;
01382                 case 4:     return Type<T4> ::TypeID;
01383                 case 5:     return Type<T5> ::TypeID;
01384                 case 6:     return Type<T6> ::TypeID;
01385                 case 7:     return Type<T7> ::TypeID;
01386                 case 8:     return Type<T8> ::TypeID;
01387                 case 9:     return Type<T9> ::TypeID;
01388                 case 10:    return Type<T10>::TypeID;
01389                 case 11:    return Type<T11>::TypeID;
01390                 case 12:    return Type<T12>::TypeID;
01391                 case 13:    return Type<T13>::TypeID;
01392                 default:    return TypeInvalid;
01393             }
01394         }
01395 
01396         virtual void *GetPointerToParameterValue(uint32 nIndex) override
01397         {
01398             switch (nIndex) {
01399                 case 0:     return (void*)&Param0;
01400                 case 1:     return (void*)&Param1;
01401                 case 2:     return (void*)&Param2;
01402                 case 3:     return (void*)&Param3;
01403                 case 4:     return (void*)&Param4;
01404                 case 5:     return (void*)&Param5;
01405                 case 6:     return (void*)&Param6;
01406                 case 7:     return (void*)&Param7;
01407                 case 8:     return (void*)&Param8;
01408                 case 9:     return (void*)&Param9;
01409                 case 10:    return (void*)&Param10;
01410                 case 11:    return (void*)&Param11;
01411                 case 12:    return (void*)&Param12;
01412                 case 13:    return (void*)&Param13;
01413                 default:    return nullptr;
01414             }
01415         }
01416 };
01417 
01418 /**
01419 *  @brief
01420 *    Parameters
01421 *
01422 *  @remarks
01423 *    Implementation for 13 parameters and a return value
01424 */
01425 template <typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
01426 class Params<R, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> : public DynParams {
01427     public:
01428         typedef typename Type<R>  ::_Type _R;
01429         typedef typename Type<T0> ::_Type _T0;
01430         typedef typename Type<T1> ::_Type _T1;
01431         typedef typename Type<T2> ::_Type _T2;
01432         typedef typename Type<T3> ::_Type _T3;
01433         typedef typename Type<T4> ::_Type _T4;
01434         typedef typename Type<T5> ::_Type _T5;
01435         typedef typename Type<T6> ::_Type _T6;
01436         typedef typename Type<T7> ::_Type _T7;
01437         typedef typename Type<T8> ::_Type _T8;
01438         typedef typename Type<T9> ::_Type _T9;
01439         typedef typename Type<T10>::_Type _T10;
01440         typedef typename Type<T11>::_Type _T11;
01441         typedef typename Type<T12>::_Type _T12;
01442         typedef typename Type<R>  ::_StorageType _SR;
01443         typedef typename Type<T0> ::_StorageType _ST0;
01444         typedef typename Type<T1> ::_StorageType _ST1;
01445         typedef typename Type<T2> ::_StorageType _ST2;
01446         typedef typename Type<T3> ::_StorageType _ST3;
01447         typedef typename Type<T4> ::_StorageType _ST4;
01448         typedef typename Type<T5> ::_StorageType _ST5;
01449         typedef typename Type<T6> ::_StorageType _ST6;
01450         typedef typename Type<T7> ::_StorageType _ST7;
01451         typedef typename Type<T8> ::_StorageType _ST8;
01452         typedef typename Type<T9> ::_StorageType _ST9;
01453         typedef typename Type<T10>::_StorageType _ST10;
01454         typedef typename Type<T11>::_StorageType _ST11;
01455         typedef typename Type<T12>::_StorageType _ST12;
01456 
01457     public:
01458         _SR   Return;
01459         _ST0  Param0;
01460         _ST1  Param1;
01461         _ST2  Param2;
01462         _ST3  Param3;
01463         _ST4  Param4;
01464         _ST5  Param5;
01465         _ST6  Param6;
01466         _ST7  Param7;
01467         _ST8  Param8;
01468         _ST9  Param9;
01469         _ST10 Param10;
01470         _ST11 Param11;
01471         _ST12 Param12;
01472 
01473     public:
01474         static Params FromString(const String &sParams) {
01475             ParamsParser cParser;
01476             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
01477             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
01478             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
01479             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
01480             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
01481             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
01482             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
01483             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
01484             _T8  t8  = (cParser.Next()                  ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
01485             _T9  t9  = (cParser.Next()                  ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
01486             _T10 t10 = (cParser.Next()                  ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
01487             _T11 t11 = (cParser.Next()                  ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
01488             _T12 t12 = (cParser.Next()                  ? Type<T12>::ConvertFromString(cParser.GetValue()) : DefaultValue<T12>::Default());
01489             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
01490         }
01491 
01492         static Params FromXml(const XmlElement &cElement) {
01493             ParamsParserXml cParser;
01494             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
01495             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
01496             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
01497             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
01498             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
01499             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
01500             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
01501             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
01502             _T8  t8  = (cParser.Next()              ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
01503             _T9  t9  = (cParser.Next()              ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
01504             _T10 t10 = (cParser.Next()              ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
01505             _T11 t11 = (cParser.Next()              ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
01506             _T12 t12 = (cParser.Next()              ? Type<T12>::ConvertFromString(cParser.GetValue()) : DefaultValue<T12>::Default());
01507             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
01508         }
01509 
01510     public:
01511         Params(const Params &cParams) :
01512             Return(DefaultValue<_SR>::Default()),
01513             Param0(cParams.Param0),
01514             Param1(cParams.Param1),
01515             Param2(cParams.Param2),
01516             Param3(cParams.Param3),
01517             Param4(cParams.Param4),
01518             Param5(cParams.Param5),
01519             Param6(cParams.Param6),
01520             Param7(cParams.Param7),
01521             Param8(cParams.Param8),
01522             Param9(cParams.Param9),
01523             Param10(cParams.Param10),
01524             Param11(cParams.Param11),
01525             Param12(cParams.Param12)
01526         {
01527         }
01528 
01529         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11, _T12 t12) :
01530             Return(DefaultValue<_SR>::Default()),
01531             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
01532             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
01533             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
01534             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
01535             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
01536             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
01537             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
01538             Param7(Type<T7>  ::ConvertRealToStorage(t7)),
01539             Param8(Type<T8>  ::ConvertRealToStorage(t8)),
01540             Param9(Type<T9>  ::ConvertRealToStorage(t9)),
01541             Param10(Type<T10>::ConvertRealToStorage(t10)),
01542             Param11(Type<T11>::ConvertRealToStorage(t11)),
01543             Param12(Type<T12>::ConvertRealToStorage(t12))
01544         {
01545         }
01546 
01547         virtual ~Params()
01548         {
01549         }
01550 
01551         Params &operator =(const Params &cParams)
01552         {
01553             Return  = cParams.Return;
01554             Param0  = cParams.Param0;
01555             Param1  = cParams.Param1;
01556             Param2  = cParams.Param2;
01557             Param3  = cParams.Param3;
01558             Param4  = cParams.Param4;
01559             Param5  = cParams.Param5;
01560             Param6  = cParams.Param6;
01561             Param7  = cParams.Param7;
01562             Param8  = cParams.Param8;
01563             Param9  = cParams.Param9;
01564             Param10 = cParams.Param10;
01565             Param11 = cParams.Param11;
01566             Param12 = cParams.Param12;
01567             return *this;
01568         }
01569 
01570         virtual String GetSignature() const override
01571         {
01572             return Signature<R, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::GetSignatureID();
01573         }
01574 
01575         virtual int GetReturnTypeID() const override
01576         {
01577             return Type<R>::TypeID;
01578         }
01579 
01580         virtual void *GetPointerToReturnValue() override
01581         {
01582             return (void*)&Return;
01583         }
01584 
01585         virtual uint32 GetNumOfParameters() const override
01586         {
01587             return 13;
01588         }
01589 
01590         virtual int GetParameterTypeID(uint32 nIndex) const override
01591         {
01592             switch (nIndex) {
01593                 case 0:     return Type<T0> ::TypeID;
01594                 case 1:     return Type<T1> ::TypeID;
01595                 case 2:     return Type<T2> ::TypeID;
01596                 case 3:     return Type<T3> ::TypeID;
01597                 case 4:     return Type<T4> ::TypeID;
01598                 case 5:     return Type<T5> ::TypeID;
01599                 case 6:     return Type<T6> ::TypeID;
01600                 case 7:     return Type<T7> ::TypeID;
01601                 case 8:     return Type<T8> ::TypeID;
01602                 case 9:     return Type<T9> ::TypeID;
01603                 case 10:    return Type<T10>::TypeID;
01604                 case 11:    return Type<T11>::TypeID;
01605                 case 12:    return Type<T12>::TypeID;
01606                 default:    return TypeInvalid;
01607             }
01608         }
01609 
01610         virtual void *GetPointerToParameterValue(uint32 nIndex) override
01611         {
01612             switch (nIndex) {
01613                 case 0:     return (void*)&Param0;
01614                 case 1:     return (void*)&Param1;
01615                 case 2:     return (void*)&Param2;
01616                 case 3:     return (void*)&Param3;
01617                 case 4:     return (void*)&Param4;
01618                 case 5:     return (void*)&Param5;
01619                 case 6:     return (void*)&Param6;
01620                 case 7:     return (void*)&Param7;
01621                 case 8:     return (void*)&Param8;
01622                 case 9:     return (void*)&Param9;
01623                 case 10:    return (void*)&Param10;
01624                 case 11:    return (void*)&Param11;
01625                 case 12:    return (void*)&Param12;
01626                 default:    return nullptr;
01627             }
01628         }
01629 };
01630 
01631 /**
01632 *  @brief
01633 *    Parameters
01634 *
01635 *  @remarks
01636 *    Implementation for 13 parameters without a return value
01637 */
01638 template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
01639 class Params<void, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> : public DynParams {
01640     public:
01641         typedef typename Type<T0> ::_Type _T0;
01642         typedef typename Type<T1> ::_Type _T1;
01643         typedef typename Type<T2> ::_Type _T2;
01644         typedef typename Type<T3> ::_Type _T3;
01645         typedef typename Type<T4> ::_Type _T4;
01646         typedef typename Type<T5> ::_Type _T5;
01647         typedef typename Type<T6> ::_Type _T6;
01648         typedef typename Type<T7> ::_Type _T7;
01649         typedef typename Type<T8> ::_Type _T8;
01650         typedef typename Type<T9> ::_Type _T9;
01651         typedef typename Type<T10>::_Type _T10;
01652         typedef typename Type<T11>::_Type _T11;
01653         typedef typename Type<T12>::_Type _T12;
01654         typedef typename Type<T0> ::_StorageType _ST0;
01655         typedef typename Type<T1> ::_StorageType _ST1;
01656         typedef typename Type<T2> ::_StorageType _ST2;
01657         typedef typename Type<T3> ::_StorageType _ST3;
01658         typedef typename Type<T4> ::_StorageType _ST4;
01659         typedef typename Type<T5> ::_StorageType _ST5;
01660         typedef typename Type<T6> ::_StorageType _ST6;
01661         typedef typename Type<T7> ::_StorageType _ST7;
01662         typedef typename Type<T8> ::_StorageType _ST8;
01663         typedef typename Type<T9> ::_StorageType _ST9;
01664         typedef typename Type<T10>::_StorageType _ST10;
01665         typedef typename Type<T11>::_StorageType _ST11;
01666         typedef typename Type<T12>::_StorageType _ST12;
01667 
01668     public:
01669         _ST0  Param0;
01670         _ST1  Param1;
01671         _ST2  Param2;
01672         _ST3  Param3;
01673         _ST4  Param4;
01674         _ST5  Param5;
01675         _ST6  Param6;
01676         _ST7  Param7;
01677         _ST8  Param8;
01678         _ST9  Param9;
01679         _ST10 Param10;
01680         _ST11 Param11;
01681         _ST12 Param12;
01682 
01683     public:
01684         static Params FromString(const String &sParams) {
01685             ParamsParser cParser;
01686             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
01687             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
01688             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
01689             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
01690             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
01691             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
01692             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
01693             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
01694             _T8  t8  = (cParser.Next()                  ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
01695             _T9  t9  = (cParser.Next()                  ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
01696             _T10 t10 = (cParser.Next()                  ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
01697             _T11 t11 = (cParser.Next()                  ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
01698             _T12 t12 = (cParser.Next()                  ? Type<T12>::ConvertFromString(cParser.GetValue()) : DefaultValue<T12>::Default());
01699             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
01700         }
01701 
01702         static Params FromXml(const XmlElement &cElement) {
01703             ParamsParserXml cParser;
01704             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
01705             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
01706             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
01707             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
01708             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
01709             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
01710             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
01711             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
01712             _T8  t8  = (cParser.Next()              ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
01713             _T9  t9  = (cParser.Next()              ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
01714             _T10 t10 = (cParser.Next()              ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
01715             _T11 t11 = (cParser.Next()              ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
01716             _T12 t12 = (cParser.Next()              ? Type<T12>::ConvertFromString(cParser.GetValue()) : DefaultValue<T12>::Default());
01717             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
01718         }
01719 
01720     public:
01721         Params(const Params &cParams) :
01722             Param0(cParams.Param0),
01723             Param1(cParams.Param1),
01724             Param2(cParams.Param2),
01725             Param3(cParams.Param3),
01726             Param4(cParams.Param4),
01727             Param5(cParams.Param5),
01728             Param6(cParams.Param6),
01729             Param7(cParams.Param7),
01730             Param8(cParams.Param8),
01731             Param9(cParams.Param9),
01732             Param10(cParams.Param10),
01733             Param11(cParams.Param11),
01734             Param12(cParams.Param12)
01735         {
01736         }
01737 
01738         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11, _T12 t12) :
01739             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
01740             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
01741             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
01742             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
01743             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
01744             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
01745             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
01746             Param7(Type<T7>  ::ConvertRealToStorage(t7)),
01747             Param8(Type<T8>  ::ConvertRealToStorage(t8)),
01748             Param9(Type<T9>  ::ConvertRealToStorage(t9)),
01749             Param10(Type<T10>::ConvertRealToStorage(t10)),
01750             Param11(Type<T11>::ConvertRealToStorage(t11)),
01751             Param12(Type<T12>::ConvertRealToStorage(t12))
01752         {
01753         }
01754 
01755         virtual ~Params()
01756         {
01757         }
01758 
01759         Params &operator =(const Params &cParams)
01760         {
01761             Param0  = cParams.Param0;
01762             Param1  = cParams.Param1;
01763             Param2  = cParams.Param2;
01764             Param3  = cParams.Param3;
01765             Param4  = cParams.Param4;
01766             Param5  = cParams.Param5;
01767             Param6  = cParams.Param6;
01768             Param7  = cParams.Param7;
01769             Param8  = cParams.Param8;
01770             Param9  = cParams.Param9;
01771             Param10 = cParams.Param10;
01772             Param11 = cParams.Param11;
01773             Param12 = cParams.Param12;
01774             return *this;
01775         }
01776 
01777         virtual String GetSignature() const override
01778         {
01779             return Signature<void, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::GetSignatureID();
01780         }
01781 
01782         virtual uint32 GetNumOfParameters() const override
01783         {
01784             return 13;
01785         }
01786 
01787         virtual int GetParameterTypeID(uint32 nIndex) const override
01788         {
01789             switch (nIndex) {
01790                 case 0:     return Type<T0> ::TypeID;
01791                 case 1:     return Type<T1> ::TypeID;
01792                 case 2:     return Type<T2> ::TypeID;
01793                 case 3:     return Type<T3> ::TypeID;
01794                 case 4:     return Type<T4> ::TypeID;
01795                 case 5:     return Type<T5> ::TypeID;
01796                 case 6:     return Type<T6> ::TypeID;
01797                 case 7:     return Type<T7> ::TypeID;
01798                 case 8:     return Type<T8> ::TypeID;
01799                 case 9:     return Type<T9> ::TypeID;
01800                 case 10:    return Type<T10>::TypeID;
01801                 case 11:    return Type<T11>::TypeID;
01802                 case 12:    return Type<T12>::TypeID;
01803                 default:    return TypeInvalid;
01804             }
01805         }
01806 
01807         virtual void *GetPointerToParameterValue(uint32 nIndex) override
01808         {
01809             switch (nIndex) {
01810                 case 0:     return (void*)&Param0;
01811                 case 1:     return (void*)&Param1;
01812                 case 2:     return (void*)&Param2;
01813                 case 3:     return (void*)&Param3;
01814                 case 4:     return (void*)&Param4;
01815                 case 5:     return (void*)&Param5;
01816                 case 6:     return (void*)&Param6;
01817                 case 7:     return (void*)&Param7;
01818                 case 8:     return (void*)&Param8;
01819                 case 9:     return (void*)&Param9;
01820                 case 10:    return (void*)&Param10;
01821                 case 11:    return (void*)&Param11;
01822                 case 12:    return (void*)&Param12;
01823                 default:    return nullptr;
01824             }
01825         }
01826 };
01827 
01828 /**
01829 *  @brief
01830 *    Parameters
01831 *
01832 *  @remarks
01833 *    Implementation for 12 parameters and a return value
01834 */
01835 template <typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
01836 class Params<R, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> : public DynParams {
01837     public:
01838         typedef typename Type<R>  ::_Type _R;
01839         typedef typename Type<T0> ::_Type _T0;
01840         typedef typename Type<T1> ::_Type _T1;
01841         typedef typename Type<T2> ::_Type _T2;
01842         typedef typename Type<T3> ::_Type _T3;
01843         typedef typename Type<T4> ::_Type _T4;
01844         typedef typename Type<T5> ::_Type _T5;
01845         typedef typename Type<T6> ::_Type _T6;
01846         typedef typename Type<T7> ::_Type _T7;
01847         typedef typename Type<T8> ::_Type _T8;
01848         typedef typename Type<T9> ::_Type _T9;
01849         typedef typename Type<T10>::_Type _T10;
01850         typedef typename Type<T11>::_Type _T11;
01851         typedef typename Type<R>  ::_StorageType _SR;
01852         typedef typename Type<T0> ::_StorageType _ST0;
01853         typedef typename Type<T1> ::_StorageType _ST1;
01854         typedef typename Type<T2> ::_StorageType _ST2;
01855         typedef typename Type<T3> ::_StorageType _ST3;
01856         typedef typename Type<T4> ::_StorageType _ST4;
01857         typedef typename Type<T5> ::_StorageType _ST5;
01858         typedef typename Type<T6> ::_StorageType _ST6;
01859         typedef typename Type<T7> ::_StorageType _ST7;
01860         typedef typename Type<T8> ::_StorageType _ST8;
01861         typedef typename Type<T9> ::_StorageType _ST9;
01862         typedef typename Type<T10>::_StorageType _ST10;
01863         typedef typename Type<T11>::_StorageType _ST11;
01864 
01865     public:
01866         _SR   Return;
01867         _ST0  Param0;
01868         _ST1  Param1;
01869         _ST2  Param2;
01870         _ST3  Param3;
01871         _ST4  Param4;
01872         _ST5  Param5;
01873         _ST6  Param6;
01874         _ST7  Param7;
01875         _ST8  Param8;
01876         _ST9  Param9;
01877         _ST10 Param10;
01878         _ST11 Param11;
01879 
01880     public:
01881         static Params FromString(const String &sParams) {
01882             ParamsParser cParser;
01883             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
01884             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
01885             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
01886             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
01887             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
01888             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
01889             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
01890             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
01891             _T8  t8  = (cParser.Next()                  ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
01892             _T9  t9  = (cParser.Next()                  ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
01893             _T10 t10 = (cParser.Next()                  ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
01894             _T11 t11 = (cParser.Next()                  ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
01895             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
01896         }
01897 
01898         static Params FromXml(const XmlElement &cElement) {
01899             ParamsParserXml cParser;
01900             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
01901             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
01902             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
01903             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
01904             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
01905             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
01906             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
01907             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
01908             _T8  t8  = (cParser.Next()              ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
01909             _T9  t9  = (cParser.Next()              ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
01910             _T10 t10 = (cParser.Next()              ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
01911             _T11 t11 = (cParser.Next()              ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
01912             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
01913         }
01914 
01915     public:
01916         Params(const Params &cParams) :
01917             Return(DefaultValue<_SR>::Default()),
01918             Param0(cParams.Param0),
01919             Param1(cParams.Param1),
01920             Param2(cParams.Param2),
01921             Param3(cParams.Param3),
01922             Param4(cParams.Param4),
01923             Param5(cParams.Param5),
01924             Param6(cParams.Param6),
01925             Param7(cParams.Param7),
01926             Param8(cParams.Param8),
01927             Param9(cParams.Param9),
01928             Param10(cParams.Param10),
01929             Param11(cParams.Param11)
01930         {
01931         }
01932 
01933         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11) :
01934             Return(DefaultValue<_SR>::Default()),
01935             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
01936             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
01937             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
01938             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
01939             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
01940             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
01941             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
01942             Param7(Type<T7>  ::ConvertRealToStorage(t7)),
01943             Param8(Type<T8>  ::ConvertRealToStorage(t8)),
01944             Param9(Type<T9>  ::ConvertRealToStorage(t9)),
01945             Param10(Type<T10>::ConvertRealToStorage(t10)),
01946             Param11(Type<T11>::ConvertRealToStorage(t11))
01947         {
01948         }
01949 
01950         virtual ~Params()
01951         {
01952         }
01953 
01954         Params &operator =(const Params &cParams)
01955         {
01956             Return  = cParams.Return;
01957             Param0  = cParams.Param0;
01958             Param1  = cParams.Param1;
01959             Param2  = cParams.Param2;
01960             Param3  = cParams.Param3;
01961             Param4  = cParams.Param4;
01962             Param5  = cParams.Param5;
01963             Param6  = cParams.Param6;
01964             Param7  = cParams.Param7;
01965             Param8  = cParams.Param8;
01966             Param9  = cParams.Param9;
01967             Param10 = cParams.Param10;
01968             Param11 = cParams.Param11;
01969             return *this;
01970         }
01971 
01972         virtual String GetSignature() const override
01973         {
01974             return Signature<R, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::GetSignatureID();
01975         }
01976 
01977         virtual int GetReturnTypeID() const override
01978         {
01979             return Type<R>::TypeID;
01980         }
01981 
01982         virtual void *GetPointerToReturnValue() override
01983         {
01984             return (void*)&Return;
01985         }
01986 
01987         virtual uint32 GetNumOfParameters() const override
01988         {
01989             return 12;
01990         }
01991 
01992         virtual int GetParameterTypeID(uint32 nIndex) const override
01993         {
01994             switch (nIndex) {
01995                 case 0:     return Type<T0> ::TypeID;
01996                 case 1:     return Type<T1> ::TypeID;
01997                 case 2:     return Type<T2> ::TypeID;
01998                 case 3:     return Type<T3> ::TypeID;
01999                 case 4:     return Type<T4> ::TypeID;
02000                 case 5:     return Type<T5> ::TypeID;
02001                 case 6:     return Type<T6> ::TypeID;
02002                 case 7:     return Type<T7> ::TypeID;
02003                 case 8:     return Type<T8> ::TypeID;
02004                 case 9:     return Type<T9> ::TypeID;
02005                 case 10:    return Type<T10>::TypeID;
02006                 case 11:    return Type<T11>::TypeID;
02007                 default:    return TypeInvalid;
02008             }
02009         }
02010 
02011         virtual void *GetPointerToParameterValue(uint32 nIndex) override
02012         {
02013             switch (nIndex) {
02014                 case 0:     return (void*)&Param0;
02015                 case 1:     return (void*)&Param1;
02016                 case 2:     return (void*)&Param2;
02017                 case 3:     return (void*)&Param3;
02018                 case 4:     return (void*)&Param4;
02019                 case 5:     return (void*)&Param5;
02020                 case 6:     return (void*)&Param6;
02021                 case 7:     return (void*)&Param7;
02022                 case 8:     return (void*)&Param8;
02023                 case 9:     return (void*)&Param9;
02024                 case 10:    return (void*)&Param10;
02025                 case 11:    return (void*)&Param11;
02026                 default:    return nullptr;
02027             }
02028         }
02029 };
02030 
02031 /**
02032 *  @brief
02033 *    Parameters
02034 *
02035 *  @remarks
02036 *    Implementation for 12 parameters without a return value
02037 */
02038 template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
02039 class Params<void, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> : public DynParams {
02040     public:
02041         typedef typename Type<T0> ::_Type _T0;
02042         typedef typename Type<T1> ::_Type _T1;
02043         typedef typename Type<T2> ::_Type _T2;
02044         typedef typename Type<T3> ::_Type _T3;
02045         typedef typename Type<T4> ::_Type _T4;
02046         typedef typename Type<T5> ::_Type _T5;
02047         typedef typename Type<T6> ::_Type _T6;
02048         typedef typename Type<T7> ::_Type _T7;
02049         typedef typename Type<T8> ::_Type _T8;
02050         typedef typename Type<T9> ::_Type _T9;
02051         typedef typename Type<T10>::_Type _T10;
02052         typedef typename Type<T11>::_Type _T11;
02053         typedef typename Type<T0> ::_StorageType _ST0;
02054         typedef typename Type<T1> ::_StorageType _ST1;
02055         typedef typename Type<T2> ::_StorageType _ST2;
02056         typedef typename Type<T3> ::_StorageType _ST3;
02057         typedef typename Type<T4> ::_StorageType _ST4;
02058         typedef typename Type<T5> ::_StorageType _ST5;
02059         typedef typename Type<T6> ::_StorageType _ST6;
02060         typedef typename Type<T7> ::_StorageType _ST7;
02061         typedef typename Type<T8> ::_StorageType _ST8;
02062         typedef typename Type<T9> ::_StorageType _ST9;
02063         typedef typename Type<T10>::_StorageType _ST10;
02064         typedef typename Type<T11>::_StorageType _ST11;
02065 
02066     public:
02067         _ST0  Param0;
02068         _ST1  Param1;
02069         _ST2  Param2;
02070         _ST3  Param3;
02071         _ST4  Param4;
02072         _ST5  Param5;
02073         _ST6  Param6;
02074         _ST7  Param7;
02075         _ST8  Param8;
02076         _ST9  Param9;
02077         _ST10 Param10;
02078         _ST11 Param11;
02079 
02080     public:
02081         static Params FromString(const String &sParams) {
02082             ParamsParser cParser;
02083             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
02084             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
02085             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
02086             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
02087             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
02088             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
02089             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
02090             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
02091             _T8  t8  = (cParser.Next()                  ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
02092             _T9  t9  = (cParser.Next()                  ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
02093             _T10 t10 = (cParser.Next()                  ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
02094             _T11 t11 = (cParser.Next()                  ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
02095             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
02096         }
02097 
02098         static Params FromXml(const XmlElement &cElement) {
02099             ParamsParserXml cParser;
02100             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
02101             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
02102             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
02103             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
02104             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
02105             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
02106             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
02107             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
02108             _T8  t8  = (cParser.Next()              ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
02109             _T9  t9  = (cParser.Next()              ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
02110             _T10 t10 = (cParser.Next()              ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
02111             _T11 t11 = (cParser.Next()              ? Type<T11>::ConvertFromString(cParser.GetValue()) : DefaultValue<T11>::Default());
02112             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
02113         }
02114 
02115     public:
02116         Params(const Params &cParams) :
02117             Param0(cParams.Param0),
02118             Param1(cParams.Param1),
02119             Param2(cParams.Param2),
02120             Param3(cParams.Param3),
02121             Param4(cParams.Param4),
02122             Param5(cParams.Param5),
02123             Param6(cParams.Param6),
02124             Param7(cParams.Param7),
02125             Param8(cParams.Param8),
02126             Param9(cParams.Param9),
02127             Param10(cParams.Param10),
02128             Param11(cParams.Param11)
02129         {
02130         }
02131 
02132         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11) :
02133             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
02134             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
02135             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
02136             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
02137             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
02138             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
02139             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
02140             Param7(Type<T7>  ::ConvertRealToStorage(t7)),
02141             Param8(Type<T8>  ::ConvertRealToStorage(t8)),
02142             Param9(Type<T9>  ::ConvertRealToStorage(t9)),
02143             Param10(Type<T10>::ConvertRealToStorage(t10)),
02144             Param11(Type<T11>::ConvertRealToStorage(t11))
02145         {
02146         }
02147 
02148         virtual ~Params()
02149         {
02150         }
02151 
02152         Params &operator =(const Params &cParams)
02153         {
02154             Param0  = cParams.Param0;
02155             Param1  = cParams.Param1;
02156             Param2  = cParams.Param2;
02157             Param3  = cParams.Param3;
02158             Param4  = cParams.Param4;
02159             Param5  = cParams.Param5;
02160             Param6  = cParams.Param6;
02161             Param7  = cParams.Param7;
02162             Param8  = cParams.Param8;
02163             Param9  = cParams.Param9;
02164             Param10 = cParams.Param10;
02165             Param11 = cParams.Param11;
02166             return *this;
02167         }
02168 
02169         virtual String GetSignature() const override
02170         {
02171             return Signature<void, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::GetSignatureID();
02172         }
02173 
02174         virtual uint32 GetNumOfParameters() const override
02175         {
02176             return 12;
02177         }
02178 
02179         virtual int GetParameterTypeID(uint32 nIndex) const override
02180         {
02181             switch (nIndex) {
02182                 case 0:     return Type<T0> ::TypeID;
02183                 case 1:     return Type<T1> ::TypeID;
02184                 case 2:     return Type<T2> ::TypeID;
02185                 case 3:     return Type<T3> ::TypeID;
02186                 case 4:     return Type<T4> ::TypeID;
02187                 case 5:     return Type<T5> ::TypeID;
02188                 case 6:     return Type<T6> ::TypeID;
02189                 case 7:     return Type<T7> ::TypeID;
02190                 case 8:     return Type<T8> ::TypeID;
02191                 case 9:     return Type<T9> ::TypeID;
02192                 case 10:    return Type<T10>::TypeID;
02193                 case 11:    return Type<T11>::TypeID;
02194                 default:    return TypeInvalid;
02195             }
02196         }
02197 
02198         virtual void *GetPointerToParameterValue(uint32 nIndex) override
02199         {
02200             switch (nIndex) {
02201                 case 0:     return (void*)&Param0;
02202                 case 1:     return (void*)&Param1;
02203                 case 2:     return (void*)&Param2;
02204                 case 3:     return (void*)&Param3;
02205                 case 4:     return (void*)&Param4;
02206                 case 5:     return (void*)&Param5;
02207                 case 6:     return (void*)&Param6;
02208                 case 7:     return (void*)&Param7;
02209                 case 8:     return (void*)&Param8;
02210                 case 9:     return (void*)&Param9;
02211                 case 10:    return (void*)&Param10;
02212                 case 11:    return (void*)&Param11;
02213                 default:    return nullptr;
02214             }
02215         }
02216 };
02217 
02218 /**
02219 *  @brief
02220 *    Parameters
02221 *
02222 *  @remarks
02223 *    Implementation for 11 parameters and a return value
02224 */
02225 template <typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
02226 class Params<R, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> : public DynParams {
02227     public:
02228         typedef typename Type<R>  ::_Type _R;
02229         typedef typename Type<T0> ::_Type _T0;
02230         typedef typename Type<T1> ::_Type _T1;
02231         typedef typename Type<T2> ::_Type _T2;
02232         typedef typename Type<T3> ::_Type _T3;
02233         typedef typename Type<T4> ::_Type _T4;
02234         typedef typename Type<T5> ::_Type _T5;
02235         typedef typename Type<T6> ::_Type _T6;
02236         typedef typename Type<T7> ::_Type _T7;
02237         typedef typename Type<T8> ::_Type _T8;
02238         typedef typename Type<T9> ::_Type _T9;
02239         typedef typename Type<T10>::_Type _T10;
02240         typedef typename Type<R>  ::_StorageType _SR;
02241         typedef typename Type<T0> ::_StorageType _ST0;
02242         typedef typename Type<T1> ::_StorageType _ST1;
02243         typedef typename Type<T2> ::_StorageType _ST2;
02244         typedef typename Type<T3> ::_StorageType _ST3;
02245         typedef typename Type<T4> ::_StorageType _ST4;
02246         typedef typename Type<T5> ::_StorageType _ST5;
02247         typedef typename Type<T6> ::_StorageType _ST6;
02248         typedef typename Type<T7> ::_StorageType _ST7;
02249         typedef typename Type<T8> ::_StorageType _ST8;
02250         typedef typename Type<T9> ::_StorageType _ST9;
02251         typedef typename Type<T10>::_StorageType _ST10;
02252 
02253     public:
02254         _SR   Return;
02255         _ST0  Param0;
02256         _ST1  Param1;
02257         _ST2  Param2;
02258         _ST3  Param3;
02259         _ST4  Param4;
02260         _ST5  Param5;
02261         _ST6  Param6;
02262         _ST7  Param7;
02263         _ST8  Param8;
02264         _ST9  Param9;
02265         _ST10 Param10;
02266 
02267     public:
02268         static Params FromString(const String &sParams) {
02269             ParamsParser cParser;
02270             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
02271             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
02272             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
02273             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
02274             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
02275             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
02276             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
02277             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
02278             _T8  t8  = (cParser.Next()                  ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
02279             _T9  t9  = (cParser.Next()                  ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
02280             _T10 t10 = (cParser.Next()                  ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
02281             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
02282         }
02283 
02284         static Params FromXml(const XmlElement &cElement) {
02285             ParamsParserXml cParser;
02286             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
02287             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
02288             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
02289             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
02290             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
02291             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
02292             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
02293             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
02294             _T8  t8  = (cParser.Next()              ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
02295             _T9  t9  = (cParser.Next()              ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
02296             _T10 t10 = (cParser.Next()              ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
02297             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
02298         }
02299 
02300     public:
02301         Params(const Params &cParams) :
02302             Return(DefaultValue<_SR>::Default()),
02303             Param0(cParams.Param0),
02304             Param1(cParams.Param1),
02305             Param2(cParams.Param2),
02306             Param3(cParams.Param3),
02307             Param4(cParams.Param4),
02308             Param5(cParams.Param5),
02309             Param6(cParams.Param6),
02310             Param7(cParams.Param7),
02311             Param8(cParams.Param8),
02312             Param9(cParams.Param9),
02313             Param10(cParams.Param10)
02314         {
02315         }
02316 
02317         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10) :
02318             Return(DefaultValue<_SR>::Default()),
02319             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
02320             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
02321             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
02322             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
02323             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
02324             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
02325             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
02326             Param7(Type<T7>  ::ConvertRealToStorage(t7)),
02327             Param8(Type<T8>  ::ConvertRealToStorage(t8)),
02328             Param9(Type<T9>  ::ConvertRealToStorage(t9)),
02329             Param10(Type<T10>::ConvertRealToStorage(t10))
02330         {
02331         }
02332 
02333         virtual ~Params()
02334         {
02335         }
02336 
02337         Params &operator =(const Params &cParams)
02338         {
02339             Return  = cParams.Return;
02340             Param0  = cParams.Param0;
02341             Param1  = cParams.Param1;
02342             Param2  = cParams.Param2;
02343             Param3  = cParams.Param3;
02344             Param4  = cParams.Param4;
02345             Param5  = cParams.Param5;
02346             Param6  = cParams.Param6;
02347             Param7  = cParams.Param7;
02348             Param8  = cParams.Param8;
02349             Param9  = cParams.Param9;
02350             Param10 = cParams.Param10;
02351             return *this;
02352         }
02353 
02354         virtual String GetSignature() const override
02355         {
02356             return Signature<R, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::GetSignatureID();
02357         }
02358 
02359         virtual int GetReturnTypeID() const override
02360         {
02361             return Type<R>::TypeID;
02362         }
02363 
02364         virtual void *GetPointerToReturnValue() override
02365         {
02366             return (void*)&Return;
02367         }
02368 
02369         virtual uint32 GetNumOfParameters() const override
02370         {
02371             return 11;
02372         }
02373 
02374         virtual int GetParameterTypeID(uint32 nIndex) const override
02375         {
02376             switch (nIndex) {
02377                 case 0:     return Type<T0> ::TypeID;
02378                 case 1:     return Type<T1> ::TypeID;
02379                 case 2:     return Type<T2> ::TypeID;
02380                 case 3:     return Type<T3> ::TypeID;
02381                 case 4:     return Type<T4> ::TypeID;
02382                 case 5:     return Type<T5> ::TypeID;
02383                 case 6:     return Type<T6> ::TypeID;
02384                 case 7:     return Type<T7> ::TypeID;
02385                 case 8:     return Type<T8> ::TypeID;
02386                 case 9:     return Type<T9> ::TypeID;
02387                 case 10:    return Type<T10>::TypeID;
02388                 default:    return TypeInvalid;
02389             }
02390         }
02391 
02392         virtual void *GetPointerToParameterValue(uint32 nIndex) override
02393         {
02394             switch (nIndex) {
02395                 case 0:     return (void*)&Param0;
02396                 case 1:     return (void*)&Param1;
02397                 case 2:     return (void*)&Param2;
02398                 case 3:     return (void*)&Param3;
02399                 case 4:     return (void*)&Param4;
02400                 case 5:     return (void*)&Param5;
02401                 case 6:     return (void*)&Param6;
02402                 case 7:     return (void*)&Param7;
02403                 case 8:     return (void*)&Param8;
02404                 case 9:     return (void*)&Param9;
02405                 case 10:    return (void*)&Param10;
02406                 default:    return nullptr;
02407             }
02408         }
02409 };
02410 
02411 /**
02412 *  @brief
02413 *    Parameters
02414 *
02415 *  @remarks
02416 *    Implementation for 11 parameters without a return value
02417 */
02418 template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
02419 class Params<void, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> : public DynParams {
02420     public:
02421         typedef typename Type<T0> ::_Type _T0;
02422         typedef typename Type<T1> ::_Type _T1;
02423         typedef typename Type<T2> ::_Type _T2;
02424         typedef typename Type<T3> ::_Type _T3;
02425         typedef typename Type<T4> ::_Type _T4;
02426         typedef typename Type<T5> ::_Type _T5;
02427         typedef typename Type<T6> ::_Type _T6;
02428         typedef typename Type<T7> ::_Type _T7;
02429         typedef typename Type<T8> ::_Type _T8;
02430         typedef typename Type<T9> ::_Type _T9;
02431         typedef typename Type<T10>::_Type _T10;
02432         typedef typename Type<T0> ::_StorageType _ST0;
02433         typedef typename Type<T1> ::_StorageType _ST1;
02434         typedef typename Type<T2> ::_StorageType _ST2;
02435         typedef typename Type<T3> ::_StorageType _ST3;
02436         typedef typename Type<T4> ::_StorageType _ST4;
02437         typedef typename Type<T5> ::_StorageType _ST5;
02438         typedef typename Type<T6> ::_StorageType _ST6;
02439         typedef typename Type<T7> ::_StorageType _ST7;
02440         typedef typename Type<T8> ::_StorageType _ST8;
02441         typedef typename Type<T9> ::_StorageType _ST9;
02442         typedef typename Type<T10>::_StorageType _ST10;
02443 
02444     public:
02445         _ST0  Param0;
02446         _ST1  Param1;
02447         _ST2  Param2;
02448         _ST3  Param3;
02449         _ST4  Param4;
02450         _ST5  Param5;
02451         _ST6  Param6;
02452         _ST7  Param7;
02453         _ST8  Param8;
02454         _ST9  Param9;
02455         _ST10 Param10;
02456 
02457     public:
02458         static Params FromString(const String &sParams) {
02459             ParamsParser cParser;
02460             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
02461             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
02462             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
02463             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
02464             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
02465             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
02466             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
02467             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
02468             _T8  t8  = (cParser.Next()                  ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
02469             _T9  t9  = (cParser.Next()                  ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
02470             _T10 t10 = (cParser.Next()                  ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
02471             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
02472         }
02473 
02474         static Params FromXml(const XmlElement &cElement) {
02475             ParamsParserXml cParser;
02476             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
02477             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
02478             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
02479             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
02480             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
02481             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
02482             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
02483             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
02484             _T8  t8  = (cParser.Next()              ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
02485             _T9  t9  = (cParser.Next()              ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
02486             _T10 t10 = (cParser.Next()              ? Type<T10>::ConvertFromString(cParser.GetValue()) : DefaultValue<T10>::Default());
02487             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
02488         }
02489 
02490     public:
02491         Params(const Params &cParams) :
02492             Param0(cParams.Param0),
02493             Param1(cParams.Param1),
02494             Param2(cParams.Param2),
02495             Param3(cParams.Param3),
02496             Param4(cParams.Param4),
02497             Param5(cParams.Param5),
02498             Param6(cParams.Param6),
02499             Param7(cParams.Param7),
02500             Param8(cParams.Param8),
02501             Param9(cParams.Param9),
02502             Param10(cParams.Param10)
02503         {
02504         }
02505 
02506         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10) :
02507             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
02508             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
02509             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
02510             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
02511             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
02512             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
02513             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
02514             Param7(Type<T7>  ::ConvertRealToStorage(t7)),
02515             Param8(Type<T8>  ::ConvertRealToStorage(t8)),
02516             Param9(Type<T9>  ::ConvertRealToStorage(t9)),
02517             Param10(Type<T10>::ConvertRealToStorage(t10))
02518         {
02519         }
02520 
02521         virtual ~Params()
02522         {
02523         }
02524 
02525         Params &operator =(const Params &cParams)
02526         {
02527             Param0  = cParams.Param0;
02528             Param1  = cParams.Param1;
02529             Param2  = cParams.Param2;
02530             Param3  = cParams.Param3;
02531             Param4  = cParams.Param4;
02532             Param5  = cParams.Param5;
02533             Param6  = cParams.Param6;
02534             Param7  = cParams.Param7;
02535             Param8  = cParams.Param8;
02536             Param9  = cParams.Param9;
02537             Param10 = cParams.Param10;
02538             return *this;
02539         }
02540 
02541         virtual String GetSignature() const override
02542         {
02543             return Signature<void, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::GetSignatureID();
02544         }
02545 
02546         virtual uint32 GetNumOfParameters() const override
02547         {
02548             return 11;
02549         }
02550 
02551         virtual int GetParameterTypeID(uint32 nIndex) const override
02552         {
02553             switch (nIndex) {
02554                 case 0:     return Type<T0> ::TypeID;
02555                 case 1:     return Type<T1> ::TypeID;
02556                 case 2:     return Type<T2> ::TypeID;
02557                 case 3:     return Type<T3> ::TypeID;
02558                 case 4:     return Type<T4> ::TypeID;
02559                 case 5:     return Type<T5> ::TypeID;
02560                 case 6:     return Type<T6> ::TypeID;
02561                 case 7:     return Type<T7> ::TypeID;
02562                 case 8:     return Type<T8> ::TypeID;
02563                 case 9:     return Type<T9> ::TypeID;
02564                 case 10:    return Type<T10>::TypeID;
02565                 default:    return TypeInvalid;
02566             }
02567         }
02568 
02569         virtual void *GetPointerToParameterValue(uint32 nIndex) override
02570         {
02571             switch (nIndex) {
02572                 case 0:     return (void*)&Param0;
02573                 case 1:     return (void*)&Param1;
02574                 case 2:     return (void*)&Param2;
02575                 case 3:     return (void*)&Param3;
02576                 case 4:     return (void*)&Param4;
02577                 case 5:     return (void*)&Param5;
02578                 case 6:     return (void*)&Param6;
02579                 case 7:     return (void*)&Param7;
02580                 case 8:     return (void*)&Param8;
02581                 case 9:     return (void*)&Param9;
02582                 case 10:    return (void*)&Param10;
02583                 default:    return nullptr;
02584             }
02585         }
02586 };
02587 
02588 /**
02589 *  @brief
02590 *    Parameters
02591 *
02592 *  @remarks
02593 *    Implementation for 10 parameters and a return value
02594 */
02595 template <typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
02596 class Params<R, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> : public DynParams {
02597     public:
02598         typedef typename Type<R>  ::_Type _R;
02599         typedef typename Type<T0> ::_Type _T0;
02600         typedef typename Type<T1> ::_Type _T1;
02601         typedef typename Type<T2> ::_Type _T2;
02602         typedef typename Type<T3> ::_Type _T3;
02603         typedef typename Type<T4> ::_Type _T4;
02604         typedef typename Type<T5> ::_Type _T5;
02605         typedef typename Type<T6> ::_Type _T6;
02606         typedef typename Type<T7> ::_Type _T7;
02607         typedef typename Type<T8> ::_Type _T8;
02608         typedef typename Type<T9> ::_Type _T9;
02609         typedef typename Type<R> ::_StorageType _SR;
02610         typedef typename Type<T0>::_StorageType _ST0;
02611         typedef typename Type<T1>::_StorageType _ST1;
02612         typedef typename Type<T2>::_StorageType _ST2;
02613         typedef typename Type<T3>::_StorageType _ST3;
02614         typedef typename Type<T4>::_StorageType _ST4;
02615         typedef typename Type<T5>::_StorageType _ST5;
02616         typedef typename Type<T6>::_StorageType _ST6;
02617         typedef typename Type<T7>::_StorageType _ST7;
02618         typedef typename Type<T8>::_StorageType _ST8;
02619         typedef typename Type<T9>::_StorageType _ST9;
02620 
02621     public:
02622         _SR   Return;
02623         _ST0  Param0;
02624         _ST1  Param1;
02625         _ST2  Param2;
02626         _ST3  Param3;
02627         _ST4  Param4;
02628         _ST5  Param5;
02629         _ST6  Param6;
02630         _ST7  Param7;
02631         _ST8  Param8;
02632         _ST9  Param9;
02633 
02634     public:
02635         static Params FromString(const String &sParams) {
02636             ParamsParser cParser;
02637             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
02638             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
02639             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
02640             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
02641             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
02642             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
02643             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
02644             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
02645             _T8  t8  = (cParser.Next()                  ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
02646             _T9  t9  = (cParser.Next()                  ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
02647             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9);
02648         }
02649 
02650         static Params FromXml(const XmlElement &cElement) {
02651             ParamsParserXml cParser;
02652             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
02653             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
02654             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
02655             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
02656             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
02657             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
02658             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
02659             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
02660             _T8  t8  = (cParser.Next()              ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
02661             _T9  t9  = (cParser.Next()              ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
02662             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9);
02663         }
02664 
02665     public:
02666         Params(const Params &cParams) :
02667             Return(DefaultValue<_SR>::Default()),
02668             Param0(cParams.Param0),
02669             Param1(cParams.Param1),
02670             Param2(cParams.Param2),
02671             Param3(cParams.Param3),
02672             Param4(cParams.Param4),
02673             Param5(cParams.Param5),
02674             Param6(cParams.Param6),
02675             Param7(cParams.Param7),
02676             Param8(cParams.Param8),
02677             Param9(cParams.Param9)
02678         {
02679         }
02680 
02681         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9) :
02682             Return(DefaultValue<_SR>::Default()),
02683             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
02684             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
02685             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
02686             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
02687             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
02688             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
02689             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
02690             Param7(Type<T7>  ::ConvertRealToStorage(t7)),
02691             Param8(Type<T8>  ::ConvertRealToStorage(t8)),
02692             Param9(Type<T9>  ::ConvertRealToStorage(t9))
02693         {
02694         }
02695 
02696         virtual ~Params()
02697         {
02698         }
02699 
02700         Params &operator =(const Params &cParams)
02701         {
02702             Return = cParams.Return;
02703             Param0 = cParams.Param0;
02704             Param1 = cParams.Param1;
02705             Param2 = cParams.Param2;
02706             Param3 = cParams.Param3;
02707             Param4 = cParams.Param4;
02708             Param5 = cParams.Param5;
02709             Param6 = cParams.Param6;
02710             Param7 = cParams.Param7;
02711             Param8 = cParams.Param8;
02712             Param9 = cParams.Param9;
02713             return *this;
02714         }
02715 
02716         virtual String GetSignature() const override
02717         {
02718             return Signature<R, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::GetSignatureID();
02719         }
02720 
02721         virtual int GetReturnTypeID() const override
02722         {
02723             return Type<R>::TypeID;
02724         }
02725 
02726         virtual void *GetPointerToReturnValue() override
02727         {
02728             return (void*)&Return;
02729         }
02730 
02731         virtual uint32 GetNumOfParameters() const override
02732         {
02733             return 10;
02734         }
02735 
02736         virtual int GetParameterTypeID(uint32 nIndex) const override
02737         {
02738             switch (nIndex) {
02739                 case 0:     return Type<T0> ::TypeID;
02740                 case 1:     return Type<T1> ::TypeID;
02741                 case 2:     return Type<T2> ::TypeID;
02742                 case 3:     return Type<T3> ::TypeID;
02743                 case 4:     return Type<T4> ::TypeID;
02744                 case 5:     return Type<T5> ::TypeID;
02745                 case 6:     return Type<T6> ::TypeID;
02746                 case 7:     return Type<T7> ::TypeID;
02747                 case 8:     return Type<T8> ::TypeID;
02748                 case 9:     return Type<T9> ::TypeID;
02749                 default:    return TypeInvalid;
02750             }
02751         }
02752 
02753         virtual void *GetPointerToParameterValue(uint32 nIndex) override
02754         {
02755             switch (nIndex) {
02756                 case 0:     return (void*)&Param0;
02757                 case 1:     return (void*)&Param1;
02758                 case 2:     return (void*)&Param2;
02759                 case 3:     return (void*)&Param3;
02760                 case 4:     return (void*)&Param4;
02761                 case 5:     return (void*)&Param5;
02762                 case 6:     return (void*)&Param6;
02763                 case 7:     return (void*)&Param7;
02764                 case 8:     return (void*)&Param8;
02765                 case 9:     return (void*)&Param9;
02766                 default:    return nullptr;
02767             }
02768         }
02769 };
02770 
02771 /**
02772 *  @brief
02773 *    Parameters
02774 *
02775 *  @remarks
02776 *    Implementation for 10 parameters without a return value
02777 */
02778 template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
02779 class Params<void, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> : public DynParams {
02780     public:
02781         typedef typename Type<T0> ::_Type _T0;
02782         typedef typename Type<T1> ::_Type _T1;
02783         typedef typename Type<T2> ::_Type _T2;
02784         typedef typename Type<T3> ::_Type _T3;
02785         typedef typename Type<T4> ::_Type _T4;
02786         typedef typename Type<T5> ::_Type _T5;
02787         typedef typename Type<T6> ::_Type _T6;
02788         typedef typename Type<T7> ::_Type _T7;
02789         typedef typename Type<T8> ::_Type _T8;
02790         typedef typename Type<T9> ::_Type _T9;
02791         typedef typename Type<T0>::_StorageType _ST0;
02792         typedef typename Type<T1>::_StorageType _ST1;
02793         typedef typename Type<T2>::_StorageType _ST2;
02794         typedef typename Type<T3>::_StorageType _ST3;
02795         typedef typename Type<T4>::_StorageType _ST4;
02796         typedef typename Type<T5>::_StorageType _ST5;
02797         typedef typename Type<T6>::_StorageType _ST6;
02798         typedef typename Type<T7>::_StorageType _ST7;
02799         typedef typename Type<T8>::_StorageType _ST8;
02800         typedef typename Type<T9>::_StorageType _ST9;
02801 
02802     public:
02803         _ST0  Param0;
02804         _ST1  Param1;
02805         _ST2  Param2;
02806         _ST3  Param3;
02807         _ST4  Param4;
02808         _ST5  Param5;
02809         _ST6  Param6;
02810         _ST7  Param7;
02811         _ST8  Param8;
02812         _ST9  Param9;
02813 
02814     public:
02815         static Params FromString(const String &sParams) {
02816             ParamsParser cParser;
02817             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
02818             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
02819             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
02820             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
02821             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
02822             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
02823             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
02824             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
02825             _T8  t8  = (cParser.Next()                  ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
02826             _T9  t9  = (cParser.Next()                  ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
02827             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9);
02828         }
02829 
02830         static Params FromXml(const XmlElement &cElement) {
02831             ParamsParserXml cParser;
02832             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
02833             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
02834             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
02835             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
02836             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
02837             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
02838             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
02839             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
02840             _T8  t8  = (cParser.Next()              ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
02841             _T9  t9  = (cParser.Next()              ? Type<T9> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T9> ::Default());
02842             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9);
02843         }
02844 
02845     public:
02846         Params(const Params &cParams) :
02847             Param0(cParams.Param0),
02848             Param1(cParams.Param1),
02849             Param2(cParams.Param2),
02850             Param3(cParams.Param3),
02851             Param4(cParams.Param4),
02852             Param5(cParams.Param5),
02853             Param6(cParams.Param6),
02854             Param7(cParams.Param7),
02855             Param8(cParams.Param8),
02856             Param9(cParams.Param9)
02857         {
02858         }
02859 
02860         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9) :
02861             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
02862             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
02863             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
02864             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
02865             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
02866             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
02867             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
02868             Param7(Type<T7>  ::ConvertRealToStorage(t7)),
02869             Param8(Type<T8>  ::ConvertRealToStorage(t8)),
02870             Param9(Type<T9>  ::ConvertRealToStorage(t9))
02871         {
02872         }
02873 
02874         virtual ~Params()
02875         {
02876         }
02877 
02878         Params &operator =(const Params &cParams)
02879         {
02880             Param0 = cParams.Param0;
02881             Param1 = cParams.Param1;
02882             Param2 = cParams.Param2;
02883             Param3 = cParams.Param3;
02884             Param4 = cParams.Param4;
02885             Param5 = cParams.Param5;
02886             Param6 = cParams.Param6;
02887             Param7 = cParams.Param7;
02888             Param8 = cParams.Param8;
02889             Param9 = cParams.Param9;
02890             return *this;
02891         }
02892 
02893         virtual String GetSignature() const override
02894         {
02895             return Signature<void, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::GetSignatureID();
02896         }
02897 
02898         virtual uint32 GetNumOfParameters() const override
02899         {
02900             return 10;
02901         }
02902 
02903         virtual int GetParameterTypeID(uint32 nIndex) const override
02904         {
02905             switch (nIndex) {
02906                 case 0:     return Type<T0> ::TypeID;
02907                 case 1:     return Type<T1> ::TypeID;
02908                 case 2:     return Type<T2> ::TypeID;
02909                 case 3:     return Type<T3> ::TypeID;
02910                 case 4:     return Type<T4> ::TypeID;
02911                 case 5:     return Type<T5> ::TypeID;
02912                 case 6:     return Type<T6> ::TypeID;
02913                 case 7:     return Type<T7> ::TypeID;
02914                 case 8:     return Type<T8> ::TypeID;
02915                 case 9:     return Type<T9> ::TypeID;
02916                 default:    return TypeInvalid;
02917             }
02918         }
02919 
02920         virtual void *GetPointerToParameterValue(uint32 nIndex) override
02921         {
02922             switch (nIndex) {
02923                 case 0:     return (void*)&Param0;
02924                 case 1:     return (void*)&Param1;
02925                 case 2:     return (void*)&Param2;
02926                 case 3:     return (void*)&Param3;
02927                 case 4:     return (void*)&Param4;
02928                 case 5:     return (void*)&Param5;
02929                 case 6:     return (void*)&Param6;
02930                 case 7:     return (void*)&Param7;
02931                 case 8:     return (void*)&Param8;
02932                 case 9:     return (void*)&Param9;
02933                 default:    return nullptr;
02934             }
02935         }
02936 };
02937 
02938 /**
02939 *  @brief
02940 *    Parameters
02941 *
02942 *  @remarks
02943 *    Implementation for 9 parameters and a return value
02944 */
02945 template <typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
02946 class Params<R, T0, T1, T2, T3, T4, T5, T6, T7, T8> : public DynParams {
02947     public:
02948         typedef typename Type<R>  ::_Type _R;
02949         typedef typename Type<T0> ::_Type _T0;
02950         typedef typename Type<T1> ::_Type _T1;
02951         typedef typename Type<T2> ::_Type _T2;
02952         typedef typename Type<T3> ::_Type _T3;
02953         typedef typename Type<T4> ::_Type _T4;
02954         typedef typename Type<T5> ::_Type _T5;
02955         typedef typename Type<T6> ::_Type _T6;
02956         typedef typename Type<T7> ::_Type _T7;
02957         typedef typename Type<T8> ::_Type _T8;
02958         typedef typename Type<R> ::_StorageType _SR;
02959         typedef typename Type<T0>::_StorageType _ST0;
02960         typedef typename Type<T1>::_StorageType _ST1;
02961         typedef typename Type<T2>::_StorageType _ST2;
02962         typedef typename Type<T3>::_StorageType _ST3;
02963         typedef typename Type<T4>::_StorageType _ST4;
02964         typedef typename Type<T5>::_StorageType _ST5;
02965         typedef typename Type<T6>::_StorageType _ST6;
02966         typedef typename Type<T7>::_StorageType _ST7;
02967         typedef typename Type<T8>::_StorageType _ST8;
02968 
02969     public:
02970         _SR   Return;
02971         _ST0  Param0;
02972         _ST1  Param1;
02973         _ST2  Param2;
02974         _ST3  Param3;
02975         _ST4  Param4;
02976         _ST5  Param5;
02977         _ST6  Param6;
02978         _ST7  Param7;
02979         _ST8  Param8;
02980 
02981     public:
02982         static Params FromString(const String &sParams) {
02983             ParamsParser cParser;
02984             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
02985             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
02986             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
02987             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
02988             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
02989             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
02990             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
02991             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
02992             _T8  t8  = (cParser.Next()                  ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
02993             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8);
02994         }
02995 
02996         static Params FromXml(const XmlElement &cElement) {
02997             ParamsParserXml cParser;
02998             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
02999             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
03000             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
03001             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
03002             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
03003             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
03004             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
03005             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
03006             _T8  t8  = (cParser.Next()              ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
03007             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8);
03008         }
03009 
03010     public:
03011         Params(const Params &cParams) :
03012             Return(DefaultValue<_SR>::Default()),
03013             Param0(cParams.Param0),
03014             Param1(cParams.Param1),
03015             Param2(cParams.Param2),
03016             Param3(cParams.Param3),
03017             Param4(cParams.Param4),
03018             Param5(cParams.Param5),
03019             Param6(cParams.Param6),
03020             Param7(cParams.Param7),
03021             Param8(cParams.Param8)
03022         {
03023         }
03024 
03025         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8) :
03026             Return(DefaultValue<_SR>::Default()),
03027             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
03028             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
03029             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
03030             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
03031             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
03032             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
03033             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
03034             Param7(Type<T7>  ::ConvertRealToStorage(t7)),
03035             Param8(Type<T8>  ::ConvertRealToStorage(t8))
03036         {
03037         }
03038 
03039         virtual ~Params()
03040         {
03041         }
03042 
03043         Params &operator =(const Params &cParams)
03044         {
03045             Return = cParams.Return;
03046             Param0 = cParams.Param0;
03047             Param1 = cParams.Param1;
03048             Param2 = cParams.Param2;
03049             Param3 = cParams.Param3;
03050             Param4 = cParams.Param4;
03051             Param5 = cParams.Param5;
03052             Param6 = cParams.Param6;
03053             Param7 = cParams.Param7;
03054             Param8 = cParams.Param8;
03055             return *this;
03056         }
03057 
03058         virtual String GetSignature() const override
03059         {
03060             return Signature<R, T0, T1, T2, T3, T4, T5, T6, T7, T8>::GetSignatureID();
03061         }
03062 
03063         virtual int GetReturnTypeID() const override
03064         {
03065             return Type<R>::TypeID;
03066         }
03067 
03068         virtual void *GetPointerToReturnValue() override
03069         {
03070             return (void*)&Return;
03071         }
03072 
03073         virtual uint32 GetNumOfParameters() const override
03074         {
03075             return 9;
03076         }
03077 
03078         virtual int GetParameterTypeID(uint32 nIndex) const override
03079         {
03080             switch (nIndex) {
03081                 case 0:     return Type<T0> ::TypeID;
03082                 case 1:     return Type<T1> ::TypeID;
03083                 case 2:     return Type<T2> ::TypeID;
03084                 case 3:     return Type<T3> ::TypeID;
03085                 case 4:     return Type<T4> ::TypeID;
03086                 case 5:     return Type<T5> ::TypeID;
03087                 case 6:     return Type<T6> ::TypeID;
03088                 case 7:     return Type<T7> ::TypeID;
03089                 case 8:     return Type<T8> ::TypeID;
03090                 default:    return TypeInvalid;
03091             }
03092         }
03093 
03094         virtual void *GetPointerToParameterValue(uint32 nIndex) override
03095         {
03096             switch (nIndex) {
03097                 case 0:     return (void*)&Param0;
03098                 case 1:     return (void*)&Param1;
03099                 case 2:     return (void*)&Param2;
03100                 case 3:     return (void*)&Param3;
03101                 case 4:     return (void*)&Param4;
03102                 case 5:     return (void*)&Param5;
03103                 case 6:     return (void*)&Param6;
03104                 case 7:     return (void*)&Param7;
03105                 case 8:     return (void*)&Param8;
03106                 default:    return nullptr;
03107             }
03108         }
03109 };
03110 
03111 /**
03112 *  @brief
03113 *    Parameters
03114 *
03115 *  @remarks
03116 *    Implementation for 9 parameters without a return value
03117 */
03118 template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
03119 class Params<void, T0, T1, T2, T3, T4, T5, T6, T7, T8> : public DynParams {
03120     public:
03121         typedef typename Type<T0> ::_Type _T0;
03122         typedef typename Type<T1> ::_Type _T1;
03123         typedef typename Type<T2> ::_Type _T2;
03124         typedef typename Type<T3> ::_Type _T3;
03125         typedef typename Type<T4> ::_Type _T4;
03126         typedef typename Type<T5> ::_Type _T5;
03127         typedef typename Type<T6> ::_Type _T6;
03128         typedef typename Type<T7> ::_Type _T7;
03129         typedef typename Type<T8> ::_Type _T8;
03130         typedef typename Type<T0>::_StorageType _ST0;
03131         typedef typename Type<T1>::_StorageType _ST1;
03132         typedef typename Type<T2>::_StorageType _ST2;
03133         typedef typename Type<T3>::_StorageType _ST3;
03134         typedef typename Type<T4>::_StorageType _ST4;
03135         typedef typename Type<T5>::_StorageType _ST5;
03136         typedef typename Type<T6>::_StorageType _ST6;
03137         typedef typename Type<T7>::_StorageType _ST7;
03138         typedef typename Type<T8>::_StorageType _ST8;
03139 
03140     public:
03141         _ST0  Param0;
03142         _ST1  Param1;
03143         _ST2  Param2;
03144         _ST3  Param3;
03145         _ST4  Param4;
03146         _ST5  Param5;
03147         _ST6  Param6;
03148         _ST7  Param7;
03149         _ST8  Param8;
03150 
03151     public:
03152         static Params FromString(const String &sParams) {
03153             ParamsParser cParser;
03154             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
03155             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
03156             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
03157             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
03158             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
03159             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
03160             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
03161             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
03162             _T8  t8  = (cParser.Next()                  ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
03163             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8);
03164         }
03165 
03166         static Params FromXml(const XmlElement &cElement) {
03167             ParamsParserXml cParser;
03168             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
03169             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
03170             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
03171             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
03172             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
03173             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
03174             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
03175             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
03176             _T8  t8  = (cParser.Next()              ? Type<T8> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T8> ::Default());
03177             return Params(t0, t1, t2, t3, t4, t5, t6, t7, t8);
03178         }
03179 
03180     public:
03181         Params(const Params &cParams) :
03182             Param0(cParams.Param0),
03183             Param1(cParams.Param1),
03184             Param2(cParams.Param2),
03185             Param3(cParams.Param3),
03186             Param4(cParams.Param4),
03187             Param5(cParams.Param5),
03188             Param6(cParams.Param6),
03189             Param7(cParams.Param7),
03190             Param8(cParams.Param8)
03191         {
03192         }
03193 
03194         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8) :
03195             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
03196             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
03197             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
03198             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
03199             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
03200             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
03201             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
03202             Param7(Type<T7>  ::ConvertRealToStorage(t7)),
03203             Param8(Type<T8>  ::ConvertRealToStorage(t8))
03204         {
03205         }
03206 
03207         virtual ~Params()
03208         {
03209         }
03210 
03211         Params &operator =(const Params &cParams)
03212         {
03213             Param0 = cParams.Param0;
03214             Param1 = cParams.Param1;
03215             Param2 = cParams.Param2;
03216             Param3 = cParams.Param3;
03217             Param4 = cParams.Param4;
03218             Param5 = cParams.Param5;
03219             Param6 = cParams.Param6;
03220             Param7 = cParams.Param7;
03221             Param8 = cParams.Param8;
03222             return *this;
03223         }
03224 
03225         virtual String GetSignature() const override
03226         {
03227             return Signature<void, T0, T1, T2, T3, T4, T5, T6, T7, T8>::GetSignatureID();
03228         }
03229 
03230         virtual uint32 GetNumOfParameters() const override
03231         {
03232             return 9;
03233         }
03234 
03235         virtual int GetParameterTypeID(uint32 nIndex) const override
03236         {
03237             switch (nIndex) {
03238                 case 0:     return Type<T0> ::TypeID;
03239                 case 1:     return Type<T1> ::TypeID;
03240                 case 2:     return Type<T2> ::TypeID;
03241                 case 3:     return Type<T3> ::TypeID;
03242                 case 4:     return Type<T4> ::TypeID;
03243                 case 5:     return Type<T5> ::TypeID;
03244                 case 6:     return Type<T6> ::TypeID;
03245                 case 7:     return Type<T7> ::TypeID;
03246                 case 8:     return Type<T8> ::TypeID;
03247                 default:    return TypeInvalid;
03248             }
03249         }
03250 
03251         virtual void *GetPointerToParameterValue(uint32 nIndex) override
03252         {
03253             switch (nIndex) {
03254                 case 0:     return (void*)&Param0;
03255                 case 1:     return (void*)&Param1;
03256                 case 2:     return (void*)&Param2;
03257                 case 3:     return (void*)&Param3;
03258                 case 4:     return (void*)&Param4;
03259                 case 5:     return (void*)&Param5;
03260                 case 6:     return (void*)&Param6;
03261                 case 7:     return (void*)&Param7;
03262                 case 8:     return (void*)&Param8;
03263                 default:    return nullptr;
03264             }
03265         }
03266 };
03267 
03268 /**
03269 *  @brief
03270 *    Parameters
03271 *
03272 *  @remarks
03273 *    Implementation for 8 parameters and a return value
03274 */
03275 template <typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
03276 class Params<R, T0, T1, T2, T3, T4, T5, T6, T7> : public DynParams {
03277     public:
03278         typedef typename Type<R>  ::_Type _R;
03279         typedef typename Type<T0> ::_Type _T0;
03280         typedef typename Type<T1> ::_Type _T1;
03281         typedef typename Type<T2> ::_Type _T2;
03282         typedef typename Type<T3> ::_Type _T3;
03283         typedef typename Type<T4> ::_Type _T4;
03284         typedef typename Type<T5> ::_Type _T5;
03285         typedef typename Type<T6> ::_Type _T6;
03286         typedef typename Type<T7> ::_Type _T7;
03287         typedef typename Type<R> ::_StorageType _SR;
03288         typedef typename Type<T0>::_StorageType _ST0;
03289         typedef typename Type<T1>::_StorageType _ST1;
03290         typedef typename Type<T2>::_StorageType _ST2;
03291         typedef typename Type<T3>::_StorageType _ST3;
03292         typedef typename Type<T4>::_StorageType _ST4;
03293         typedef typename Type<T5>::_StorageType _ST5;
03294         typedef typename Type<T6>::_StorageType _ST6;
03295         typedef typename Type<T7>::_StorageType _ST7;
03296 
03297     public:
03298         _SR   Return;
03299         _ST0  Param0;
03300         _ST1  Param1;
03301         _ST2  Param2;
03302         _ST3  Param3;
03303         _ST4  Param4;
03304         _ST5  Param5;
03305         _ST6  Param6;
03306         _ST7  Param7;
03307 
03308     public:
03309         static Params FromString(const String &sParams) {
03310             ParamsParser cParser;
03311             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
03312             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
03313             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
03314             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
03315             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
03316             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
03317             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
03318             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
03319             return Params(t0, t1, t2, t3, t4, t5, t6, t7);
03320         }
03321 
03322         static Params FromXml(const XmlElement &cElement) {
03323             ParamsParserXml cParser;
03324             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
03325             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
03326             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
03327             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
03328             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
03329             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
03330             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
03331             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
03332             return Params(t0, t1, t2, t3, t4, t5, t6, t7);
03333         }
03334 
03335     public:
03336         Params(const Params &cParams) :
03337             Return(DefaultValue<_SR>::Default()),
03338             Param0(cParams.Param0),
03339             Param1(cParams.Param1),
03340             Param2(cParams.Param2),
03341             Param3(cParams.Param3),
03342             Param4(cParams.Param4),
03343             Param5(cParams.Param5),
03344             Param6(cParams.Param6),
03345             Param7(cParams.Param7)
03346         {
03347         }
03348 
03349         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7) :
03350             Return(DefaultValue<_SR>::Default()),
03351             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
03352             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
03353             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
03354             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
03355             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
03356             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
03357             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
03358             Param7(Type<T7>  ::ConvertRealToStorage(t7))
03359         {
03360         }
03361 
03362         virtual ~Params()
03363         {
03364         }
03365 
03366         Params &operator =(const Params &cParams)
03367         {
03368             Return = cParams.Return;
03369             Param0 = cParams.Param0;
03370             Param1 = cParams.Param1;
03371             Param2 = cParams.Param2;
03372             Param3 = cParams.Param3;
03373             Param4 = cParams.Param4;
03374             Param5 = cParams.Param5;
03375             Param6 = cParams.Param6;
03376             Param7 = cParams.Param7;
03377             return *this;
03378         }
03379 
03380         virtual String GetSignature() const override
03381         {
03382             return Signature<R, T0, T1, T2, T3, T4, T5, T6, T7>::GetSignatureID();
03383         }
03384 
03385         virtual int GetReturnTypeID() const override
03386         {
03387             return Type<R>::TypeID;
03388         }
03389 
03390         virtual void *GetPointerToReturnValue() override
03391         {
03392             return (void*)&Return;
03393         }
03394 
03395         virtual uint32 GetNumOfParameters() const override
03396         {
03397             return 8;
03398         }
03399 
03400         virtual int GetParameterTypeID(uint32 nIndex) const override
03401         {
03402             switch (nIndex) {
03403                 case 0:     return Type<T0> ::TypeID;
03404                 case 1:     return Type<T1> ::TypeID;
03405                 case 2:     return Type<T2> ::TypeID;
03406                 case 3:     return Type<T3> ::TypeID;
03407                 case 4:     return Type<T4> ::TypeID;
03408                 case 5:     return Type<T5> ::TypeID;
03409                 case 6:     return Type<T6> ::TypeID;
03410                 case 7:     return Type<T7> ::TypeID;
03411                 default:    return TypeInvalid;
03412             }
03413         }
03414 
03415         virtual void *GetPointerToParameterValue(uint32 nIndex) override
03416         {
03417             switch (nIndex) {
03418                 case 0:     return (void*)&Param0;
03419                 case 1:     return (void*)&Param1;
03420                 case 2:     return (void*)&Param2;
03421                 case 3:     return (void*)&Param3;
03422                 case 4:     return (void*)&Param4;
03423                 case 5:     return (void*)&Param5;
03424                 case 6:     return (void*)&Param6;
03425                 case 7:     return (void*)&Param7;
03426                 default:    return nullptr;
03427             }
03428         }
03429 };
03430 
03431 /**
03432 *  @brief
03433 *    Parameters
03434 *
03435 *  @remarks
03436 *    Implementation for 8 parameters without a return value
03437 */
03438 template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
03439 class Params<void, T0, T1, T2, T3, T4, T5, T6, T7> : public DynParams {
03440     public:
03441         typedef typename Type<T0> ::_Type _T0;
03442         typedef typename Type<T1> ::_Type _T1;
03443         typedef typename Type<T2> ::_Type _T2;
03444         typedef typename Type<T3> ::_Type _T3;
03445         typedef typename Type<T4> ::_Type _T4;
03446         typedef typename Type<T5> ::_Type _T5;
03447         typedef typename Type<T6> ::_Type _T6;
03448         typedef typename Type<T7> ::_Type _T7;
03449         typedef typename Type<T0>::_StorageType _ST0;
03450         typedef typename Type<T1>::_StorageType _ST1;
03451         typedef typename Type<T2>::_StorageType _ST2;
03452         typedef typename Type<T3>::_StorageType _ST3;
03453         typedef typename Type<T4>::_StorageType _ST4;
03454         typedef typename Type<T5>::_StorageType _ST5;
03455         typedef typename Type<T6>::_StorageType _ST6;
03456         typedef typename Type<T7>::_StorageType _ST7;
03457 
03458     public:
03459         _ST0  Param0;
03460         _ST1  Param1;
03461         _ST2  Param2;
03462         _ST3  Param3;
03463         _ST4  Param4;
03464         _ST5  Param5;
03465         _ST6  Param6;
03466         _ST7  Param7;
03467 
03468     public:
03469         static Params FromString(const String &sParams) {
03470             ParamsParser cParser;
03471             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
03472             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
03473             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
03474             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
03475             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
03476             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
03477             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
03478             _T7  t7  = (cParser.Next()                  ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
03479             return Params(t0, t1, t2, t3, t4, t5, t6, t7);
03480         }
03481 
03482         static Params FromXml(const XmlElement &cElement) {
03483             ParamsParserXml cParser;
03484             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
03485             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
03486             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
03487             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
03488             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
03489             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
03490             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
03491             _T7  t7  = (cParser.Next()              ? Type<T7> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T7> ::Default());
03492             return Params(t0, t1, t2, t3, t4, t5, t6, t7);
03493         }
03494 
03495     public:
03496         Params(const Params &cParams) :
03497             Param0(cParams.Param0),
03498             Param1(cParams.Param1),
03499             Param2(cParams.Param2),
03500             Param3(cParams.Param3),
03501             Param4(cParams.Param4),
03502             Param5(cParams.Param5),
03503             Param6(cParams.Param6),
03504             Param7(cParams.Param7)
03505         {
03506         }
03507 
03508         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7) :
03509             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
03510             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
03511             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
03512             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
03513             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
03514             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
03515             Param6(Type<T6>  ::ConvertRealToStorage(t6)),
03516             Param7(Type<T7>  ::ConvertRealToStorage(t7))
03517         {
03518         }
03519 
03520         virtual ~Params()
03521         {
03522         }
03523 
03524         Params &operator =(const Params &cParams)
03525         {
03526             Param0 = cParams.Param0;
03527             Param1 = cParams.Param1;
03528             Param2 = cParams.Param2;
03529             Param3 = cParams.Param3;
03530             Param4 = cParams.Param4;
03531             Param5 = cParams.Param5;
03532             Param6 = cParams.Param6;
03533             Param7 = cParams.Param7;
03534             return *this;
03535         }
03536 
03537         virtual String GetSignature() const override
03538         {
03539             return Signature<void, T0, T1, T2, T3, T4, T5, T6, T7>::GetSignatureID();
03540         }
03541 
03542         virtual uint32 GetNumOfParameters() const override
03543         {
03544             return 8;
03545         }
03546 
03547         virtual int GetParameterTypeID(uint32 nIndex) const override
03548         {
03549             switch (nIndex) {
03550                 case 0:     return Type<T0> ::TypeID;
03551                 case 1:     return Type<T1> ::TypeID;
03552                 case 2:     return Type<T2> ::TypeID;
03553                 case 3:     return Type<T3> ::TypeID;
03554                 case 4:     return Type<T4> ::TypeID;
03555                 case 5:     return Type<T5> ::TypeID;
03556                 case 6:     return Type<T6> ::TypeID;
03557                 case 7:     return Type<T7> ::TypeID;
03558                 default:    return TypeInvalid;
03559             }
03560         }
03561 
03562         virtual void *GetPointerToParameterValue(uint32 nIndex) override
03563         {
03564             switch (nIndex) {
03565                 case 0:     return (void*)&Param0;
03566                 case 1:     return (void*)&Param1;
03567                 case 2:     return (void*)&Param2;
03568                 case 3:     return (void*)&Param3;
03569                 case 4:     return (void*)&Param4;
03570                 case 5:     return (void*)&Param5;
03571                 case 6:     return (void*)&Param6;
03572                 case 7:     return (void*)&Param7;
03573                 default:    return nullptr;
03574             }
03575         }
03576 };
03577 
03578 /**
03579 *  @brief
03580 *    Parameters
03581 *
03582 *  @remarks
03583 *    Implementation for 7 parameters and a return value
03584 */
03585 template <typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
03586 class Params<R, T0, T1, T2, T3, T4, T5, T6> : public DynParams {
03587     public:
03588         typedef typename Type<R>  ::_Type _R;
03589         typedef typename Type<T0> ::_Type _T0;
03590         typedef typename Type<T1> ::_Type _T1;
03591         typedef typename Type<T2> ::_Type _T2;
03592         typedef typename Type<T3> ::_Type _T3;
03593         typedef typename Type<T4> ::_Type _T4;
03594         typedef typename Type<T5> ::_Type _T5;
03595         typedef typename Type<T6> ::_Type _T6;
03596         typedef typename Type<R> ::_StorageType _SR;
03597         typedef typename Type<T0>::_StorageType _ST0;
03598         typedef typename Type<T1>::_StorageType _ST1;
03599         typedef typename Type<T2>::_StorageType _ST2;
03600         typedef typename Type<T3>::_StorageType _ST3;
03601         typedef typename Type<T4>::_StorageType _ST4;
03602         typedef typename Type<T5>::_StorageType _ST5;
03603         typedef typename Type<T6>::_StorageType _ST6;
03604 
03605     public:
03606         _SR   Return;
03607         _ST0  Param0;
03608         _ST1  Param1;
03609         _ST2  Param2;
03610         _ST3  Param3;
03611         _ST4  Param4;
03612         _ST5  Param5;
03613         _ST6  Param6;
03614 
03615     public:
03616         static Params FromString(const String &sParams) {
03617             ParamsParser cParser;
03618             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
03619             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
03620             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
03621             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
03622             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
03623             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
03624             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
03625             return Params(t0, t1, t2, t3, t4, t5, t6);
03626         }
03627 
03628         static Params FromXml(const XmlElement &cElement) {
03629             ParamsParserXml cParser;
03630             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
03631             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
03632             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
03633             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
03634             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
03635             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
03636             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
03637             return Params(t0, t1, t2, t3, t4, t5, t6);
03638         }
03639 
03640     public:
03641         Params(const Params &cParams) :
03642             Return(DefaultValue<_SR>::Default()),
03643             Param0(cParams.Param0),
03644             Param1(cParams.Param1),
03645             Param2(cParams.Param2),
03646             Param3(cParams.Param3),
03647             Param4(cParams.Param4),
03648             Param5(cParams.Param5),
03649             Param6(cParams.Param6)
03650         {
03651         }
03652 
03653         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6) :
03654             Return(DefaultValue<_SR>::Default()),
03655             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
03656             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
03657             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
03658             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
03659             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
03660             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
03661             Param6(Type<T6>  ::ConvertRealToStorage(t6))
03662         {
03663         }
03664 
03665         virtual ~Params()
03666         {
03667         }
03668 
03669         Params &operator =(const Params &cParams)
03670         {
03671             Return = cParams.Return;
03672             Param0 = cParams.Param0;
03673             Param1 = cParams.Param1;
03674             Param2 = cParams.Param2;
03675             Param3 = cParams.Param3;
03676             Param4 = cParams.Param4;
03677             Param5 = cParams.Param5;
03678             Param6 = cParams.Param6;
03679             return *this;
03680         }
03681 
03682         virtual String GetSignature() const override
03683         {
03684             return Signature<R, T0, T1, T2, T3, T4, T5, T6>::GetSignatureID();
03685         }
03686 
03687         virtual int GetReturnTypeID() const override
03688         {
03689             return Type<R>::TypeID;
03690         }
03691 
03692         virtual void *GetPointerToReturnValue() override
03693         {
03694             return (void*)&Return;
03695         }
03696 
03697         virtual uint32 GetNumOfParameters() const override
03698         {
03699             return 7;
03700         }
03701 
03702         virtual int GetParameterTypeID(uint32 nIndex) const override
03703         {
03704             switch (nIndex) {
03705                 case 0:     return Type<T0> ::TypeID;
03706                 case 1:     return Type<T1> ::TypeID;
03707                 case 2:     return Type<T2> ::TypeID;
03708                 case 3:     return Type<T3> ::TypeID;
03709                 case 4:     return Type<T4> ::TypeID;
03710                 case 5:     return Type<T5> ::TypeID;
03711                 case 6:     return Type<T6> ::TypeID;
03712                 default:    return TypeInvalid;
03713             }
03714         }
03715 
03716         virtual void *GetPointerToParameterValue(uint32 nIndex) override
03717         {
03718             switch (nIndex) {
03719                 case 0:     return (void*)&Param0;
03720                 case 1:     return (void*)&Param1;
03721                 case 2:     return (void*)&Param2;
03722                 case 3:     return (void*)&Param3;
03723                 case 4:     return (void*)&Param4;
03724                 case 5:     return (void*)&Param5;
03725                 case 6:     return (void*)&Param6;
03726                 default:    return nullptr;
03727             }
03728         }
03729 };
03730 
03731 /**
03732 *  @brief
03733 *    Parameters
03734 *
03735 *  @remarks
03736 *    Implementation for 7 parameters without a return value
03737 */
03738 template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
03739 class Params<void, T0, T1, T2, T3, T4, T5, T6> : public DynParams {
03740     public:
03741         typedef typename Type<T0> ::_Type _T0;
03742         typedef typename Type<T1> ::_Type _T1;
03743         typedef typename Type<T2> ::_Type _T2;
03744         typedef typename Type<T3> ::_Type _T3;
03745         typedef typename Type<T4> ::_Type _T4;
03746         typedef typename Type<T5> ::_Type _T5;
03747         typedef typename Type<T6> ::_Type _T6;
03748         typedef typename Type<T0>::_StorageType _ST0;
03749         typedef typename Type<T1>::_StorageType _ST1;
03750         typedef typename Type<T2>::_StorageType _ST2;
03751         typedef typename Type<T3>::_StorageType _ST3;
03752         typedef typename Type<T4>::_StorageType _ST4;
03753         typedef typename Type<T5>::_StorageType _ST5;
03754         typedef typename Type<T6>::_StorageType _ST6;
03755 
03756     public:
03757         _ST0  Param0;
03758         _ST1  Param1;
03759         _ST2  Param2;
03760         _ST3  Param3;
03761         _ST4  Param4;
03762         _ST5  Param5;
03763         _ST6  Param6;
03764 
03765     public:
03766         static Params FromString(const String &sParams) {
03767             ParamsParser cParser;
03768             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
03769             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
03770             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
03771             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
03772             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
03773             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
03774             _T6  t6  = (cParser.Next()                  ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
03775             return Params(t0, t1, t2, t3, t4, t5, t6);
03776         }
03777 
03778         static Params FromXml(const XmlElement &cElement) {
03779             ParamsParserXml cParser;
03780             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
03781             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
03782             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
03783             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
03784             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
03785             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
03786             _T6  t6  = (cParser.Next()              ? Type<T6> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T6> ::Default());
03787             return Params(t0, t1, t2, t3, t4, t5, t6);
03788         }
03789 
03790     public:
03791         Params(const Params &cParams) :
03792             Param0(cParams.Param0),
03793             Param1(cParams.Param1),
03794             Param2(cParams.Param2),
03795             Param3(cParams.Param3),
03796             Param4(cParams.Param4),
03797             Param5(cParams.Param5),
03798             Param6(cParams.Param6)
03799         {
03800         }
03801 
03802         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6) :
03803             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
03804             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
03805             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
03806             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
03807             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
03808             Param5(Type<T5>  ::ConvertRealToStorage(t5)),
03809             Param6(Type<T6>  ::ConvertRealToStorage(t6))
03810         {
03811         }
03812 
03813         virtual ~Params()
03814         {
03815         }
03816 
03817         Params &operator =(const Params &cParams)
03818         {
03819             Param0 = cParams.Param0;
03820             Param1 = cParams.Param1;
03821             Param2 = cParams.Param2;
03822             Param3 = cParams.Param3;
03823             Param4 = cParams.Param4;
03824             Param5 = cParams.Param5;
03825             Param6 = cParams.Param6;
03826             return *this;
03827         }
03828 
03829         virtual String GetSignature() const override
03830         {
03831             return Signature<void, T0, T1, T2, T3, T4, T5, T6>::GetSignatureID();
03832         }
03833 
03834         virtual uint32 GetNumOfParameters() const override
03835         {
03836             return 7;
03837         }
03838 
03839         virtual int GetParameterTypeID(uint32 nIndex) const override
03840         {
03841             switch (nIndex) {
03842                 case 0:     return Type<T0> ::TypeID;
03843                 case 1:     return Type<T1> ::TypeID;
03844                 case 2:     return Type<T2> ::TypeID;
03845                 case 3:     return Type<T3> ::TypeID;
03846                 case 4:     return Type<T4> ::TypeID;
03847                 case 5:     return Type<T5> ::TypeID;
03848                 case 6:     return Type<T6> ::TypeID;
03849                 default:    return TypeInvalid;
03850             }
03851         }
03852 
03853         virtual void *GetPointerToParameterValue(uint32 nIndex) override
03854         {
03855             switch (nIndex) {
03856                 case 0:     return (void*)&Param0;
03857                 case 1:     return (void*)&Param1;
03858                 case 2:     return (void*)&Param2;
03859                 case 3:     return (void*)&Param3;
03860                 case 4:     return (void*)&Param4;
03861                 case 5:     return (void*)&Param5;
03862                 case 6:     return (void*)&Param6;
03863                 default:    return nullptr;
03864             }
03865         }
03866 };
03867 
03868 /**
03869 *  @brief
03870 *    Parameters
03871 *
03872 *  @remarks
03873 *    Implementation for 6 parameters and a return value
03874 */
03875 template <typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
03876 class Params<R, T0, T1, T2, T3, T4, T5> : public DynParams {
03877     public:
03878         typedef typename Type<R>  ::_Type _R;
03879         typedef typename Type<T0> ::_Type _T0;
03880         typedef typename Type<T1> ::_Type _T1;
03881         typedef typename Type<T2> ::_Type _T2;
03882         typedef typename Type<T3> ::_Type _T3;
03883         typedef typename Type<T4> ::_Type _T4;
03884         typedef typename Type<T5> ::_Type _T5;
03885         typedef typename Type<R> ::_StorageType _SR;
03886         typedef typename Type<T0>::_StorageType _ST0;
03887         typedef typename Type<T1>::_StorageType _ST1;
03888         typedef typename Type<T2>::_StorageType _ST2;
03889         typedef typename Type<T3>::_StorageType _ST3;
03890         typedef typename Type<T4>::_StorageType _ST4;
03891         typedef typename Type<T5>::_StorageType _ST5;
03892 
03893     public:
03894         _SR   Return;
03895         _ST0  Param0;
03896         _ST1  Param1;
03897         _ST2  Param2;
03898         _ST3  Param3;
03899         _ST4  Param4;
03900         _ST5  Param5;
03901 
03902     public:
03903         static Params FromString(const String &sParams) {
03904             ParamsParser cParser;
03905             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
03906             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
03907             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
03908             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
03909             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
03910             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
03911             return Params(t0, t1, t2, t3, t4, t5);
03912         }
03913 
03914         static Params FromXml(const XmlElement &cElement) {
03915             ParamsParserXml cParser;
03916             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
03917             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
03918             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
03919             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
03920             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
03921             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
03922             return Params(t0, t1, t2, t3, t4, t5);
03923         }
03924 
03925     public:
03926         Params(const Params &cParams) :
03927             Return(DefaultValue<_SR>::Default()),
03928             Param0(cParams.Param0),
03929             Param1(cParams.Param1),
03930             Param2(cParams.Param2),
03931             Param3(cParams.Param3),
03932             Param4(cParams.Param4),
03933             Param5(cParams.Param5)
03934         {
03935         }
03936 
03937         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5) :
03938             Return(DefaultValue<_SR>::Default()),
03939             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
03940             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
03941             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
03942             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
03943             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
03944             Param5(Type<T5>  ::ConvertRealToStorage(t5))
03945         {
03946         }
03947 
03948         virtual ~Params()
03949         {
03950         }
03951 
03952         Params &operator =(const Params &cParams)
03953         {
03954             Return = cParams.Return;
03955             Param0 = cParams.Param0;
03956             Param1 = cParams.Param1;
03957             Param2 = cParams.Param2;
03958             Param3 = cParams.Param3;
03959             Param4 = cParams.Param4;
03960             Param5 = cParams.Param5;
03961             return *this;
03962         }
03963 
03964         virtual String GetSignature() const override
03965         {
03966             return Signature<R, T0, T1, T2, T3, T4, T5>::GetSignatureID();
03967         }
03968 
03969         virtual int GetReturnTypeID() const override
03970         {
03971             return Type<R>::TypeID;
03972         }
03973 
03974         virtual void *GetPointerToReturnValue() override
03975         {
03976             return (void*)&Return;
03977         }
03978 
03979         virtual uint32 GetNumOfParameters() const override
03980         {
03981             return 6;
03982         }
03983 
03984         virtual int GetParameterTypeID(uint32 nIndex) const override
03985         {
03986             switch (nIndex) {
03987                 case 0:     return Type<T0> ::TypeID;
03988                 case 1:     return Type<T1> ::TypeID;
03989                 case 2:     return Type<T2> ::TypeID;
03990                 case 3:     return Type<T3> ::TypeID;
03991                 case 4:     return Type<T4> ::TypeID;
03992                 case 5:     return Type<T5> ::TypeID;
03993                 default:    return TypeInvalid;
03994             }
03995         }
03996 
03997         virtual void *GetPointerToParameterValue(uint32 nIndex) override
03998         {
03999             switch (nIndex) {
04000                 case 0:     return (void*)&Param0;
04001                 case 1:     return (void*)&Param1;
04002                 case 2:     return (void*)&Param2;
04003                 case 3:     return (void*)&Param3;
04004                 case 4:     return (void*)&Param4;
04005                 case 5:     return (void*)&Param5;
04006                 default:    return nullptr;
04007             }
04008         }
04009 };
04010 
04011 /**
04012 *  @brief
04013 *    Parameters
04014 *
04015 *  @remarks
04016 *    Implementation for 6 parameters without a return value
04017 */
04018 template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
04019 class Params<void, T0, T1, T2, T3, T4, T5> : public DynParams {
04020     public:
04021         typedef typename Type<T0> ::_Type _T0;
04022         typedef typename Type<T1> ::_Type _T1;
04023         typedef typename Type<T2> ::_Type _T2;
04024         typedef typename Type<T3> ::_Type _T3;
04025         typedef typename Type<T4> ::_Type _T4;
04026         typedef typename Type<T5> ::_Type _T5;
04027         typedef typename Type<T0>::_StorageType _ST0;
04028         typedef typename Type<T1>::_StorageType _ST1;
04029         typedef typename Type<T2>::_StorageType _ST2;
04030         typedef typename Type<T3>::_StorageType _ST3;
04031         typedef typename Type<T4>::_StorageType _ST4;
04032         typedef typename Type<T5>::_StorageType _ST5;
04033 
04034     public:
04035         _ST0  Param0;
04036         _ST1  Param1;
04037         _ST2  Param2;
04038         _ST3  Param3;
04039         _ST4  Param4;
04040         _ST5  Param5;
04041 
04042     public:
04043         static Params FromString(const String &sParams) {
04044             ParamsParser cParser;
04045             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04046             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04047             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
04048             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
04049             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
04050             _T5  t5  = (cParser.Next()                  ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
04051             return Params(t0, t1, t2, t3, t4, t5);
04052         }
04053 
04054         static Params FromXml(const XmlElement &cElement) {
04055             ParamsParserXml cParser;
04056             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04057             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04058             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
04059             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
04060             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
04061             _T5  t5  = (cParser.Next()              ? Type<T5> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T5> ::Default());
04062             return Params(t0, t1, t2, t3, t4, t5);
04063         }
04064 
04065     public:
04066         Params(const Params &cParams) :
04067             Param0(cParams.Param0),
04068             Param1(cParams.Param1),
04069             Param2(cParams.Param2),
04070             Param3(cParams.Param3),
04071             Param4(cParams.Param4),
04072             Param5(cParams.Param5)
04073         {
04074         }
04075 
04076         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5) :
04077             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
04078             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
04079             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
04080             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
04081             Param4(Type<T4>  ::ConvertRealToStorage(t4)),
04082             Param5(Type<T5>  ::ConvertRealToStorage(t5))
04083         {
04084         }
04085 
04086         virtual ~Params()
04087         {
04088         }
04089 
04090         Params &operator =(const Params &cParams)
04091         {
04092             Param0 = cParams.Param0;
04093             Param1 = cParams.Param1;
04094             Param2 = cParams.Param2;
04095             Param3 = cParams.Param3;
04096             Param4 = cParams.Param4;
04097             Param5 = cParams.Param5;
04098             return *this;
04099         }
04100 
04101         virtual String GetSignature() const override
04102         {
04103             return Signature<void, T0, T1, T2, T3, T4, T5>::GetSignatureID();
04104         }
04105 
04106         virtual uint32 GetNumOfParameters() const override
04107         {
04108             return 6;
04109         }
04110 
04111         virtual int GetParameterTypeID(uint32 nIndex) const override
04112         {
04113             switch (nIndex) {
04114                 case 0:     return Type<T0> ::TypeID;
04115                 case 1:     return Type<T1> ::TypeID;
04116                 case 2:     return Type<T2> ::TypeID;
04117                 case 3:     return Type<T3> ::TypeID;
04118                 case 4:     return Type<T4> ::TypeID;
04119                 case 5:     return Type<T5> ::TypeID;
04120                 default:    return TypeInvalid;
04121             }
04122         }
04123 
04124         virtual void *GetPointerToParameterValue(uint32 nIndex) override
04125         {
04126             switch (nIndex) {
04127                 case 0:     return (void*)&Param0;
04128                 case 1:     return (void*)&Param1;
04129                 case 2:     return (void*)&Param2;
04130                 case 3:     return (void*)&Param3;
04131                 case 4:     return (void*)&Param4;
04132                 case 5:     return (void*)&Param5;
04133                 default:    return nullptr;
04134             }
04135         }
04136 };
04137 
04138 /**
04139 *  @brief
04140 *    Parameters
04141 *
04142 *  @remarks
04143 *    Implementation for 5 parameters and a return value
04144 */
04145 template <typename R, typename T0, typename T1, typename T2, typename T3, typename T4>
04146 class Params<R, T0, T1, T2, T3, T4> : public DynParams {
04147     public:
04148         typedef typename Type<R>  ::_Type _R;
04149         typedef typename Type<T0> ::_Type _T0;
04150         typedef typename Type<T1> ::_Type _T1;
04151         typedef typename Type<T2> ::_Type _T2;
04152         typedef typename Type<T3> ::_Type _T3;
04153         typedef typename Type<T4> ::_Type _T4;
04154         typedef typename Type<R> ::_StorageType _SR;
04155         typedef typename Type<T0>::_StorageType _ST0;
04156         typedef typename Type<T1>::_StorageType _ST1;
04157         typedef typename Type<T2>::_StorageType _ST2;
04158         typedef typename Type<T3>::_StorageType _ST3;
04159         typedef typename Type<T4>::_StorageType _ST4;
04160 
04161     public:
04162         _SR   Return;
04163         _ST0  Param0;
04164         _ST1  Param1;
04165         _ST2  Param2;
04166         _ST3  Param3;
04167         _ST4  Param4;
04168 
04169     public:
04170         static Params FromString(const String &sParams) {
04171             ParamsParser cParser;
04172             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04173             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04174             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
04175             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
04176             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
04177             return Params(t0, t1, t2, t3, t4);
04178         }
04179 
04180         static Params FromXml(const XmlElement &cElement) {
04181             ParamsParserXml cParser;
04182             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04183             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04184             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
04185             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
04186             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
04187             return Params(t0, t1, t2, t3, t4);
04188         }
04189 
04190     public:
04191         Params(const Params &cParams) :
04192             Return(DefaultValue<_SR>::Default()),
04193             Param0(cParams.Param0),
04194             Param1(cParams.Param1),
04195             Param2(cParams.Param2),
04196             Param3(cParams.Param3),
04197             Param4(cParams.Param4)
04198         {
04199         }
04200 
04201         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4) :
04202             Return(DefaultValue<_SR>::Default()),
04203             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
04204             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
04205             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
04206             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
04207             Param4(Type<T4>  ::ConvertRealToStorage(t4))
04208         {
04209         }
04210 
04211         virtual ~Params()
04212         {
04213         }
04214 
04215         Params &operator =(const Params &cParams)
04216         {
04217             Return = cParams.Return;
04218             Param0 = cParams.Param0;
04219             Param1 = cParams.Param1;
04220             Param2 = cParams.Param2;
04221             Param3 = cParams.Param3;
04222             Param4 = cParams.Param4;
04223             return *this;
04224         }
04225 
04226         virtual String GetSignature() const override
04227         {
04228             return Signature<R, T0, T1, T2, T3, T4>::GetSignatureID();
04229         }
04230 
04231         virtual int GetReturnTypeID() const override
04232         {
04233             return Type<R>::TypeID;
04234         }
04235 
04236         virtual void *GetPointerToReturnValue() override
04237         {
04238             return (void*)&Return;
04239         }
04240 
04241         virtual uint32 GetNumOfParameters() const override
04242         {
04243             return 5;
04244         }
04245 
04246         virtual int GetParameterTypeID(uint32 nIndex) const override
04247         {
04248             switch (nIndex) {
04249                 case 0:     return Type<T0> ::TypeID;
04250                 case 1:     return Type<T1> ::TypeID;
04251                 case 2:     return Type<T2> ::TypeID;
04252                 case 3:     return Type<T3> ::TypeID;
04253                 case 4:     return Type<T4> ::TypeID;
04254                 default:    return TypeInvalid;
04255             }
04256         }
04257 
04258         virtual void *GetPointerToParameterValue(uint32 nIndex) override
04259         {
04260             switch (nIndex) {
04261                 case 0:     return (void*)&Param0;
04262                 case 1:     return (void*)&Param1;
04263                 case 2:     return (void*)&Param2;
04264                 case 3:     return (void*)&Param3;
04265                 case 4:     return (void*)&Param4;
04266                 default:    return nullptr;
04267             }
04268         }
04269 };
04270 
04271 /**
04272 *  @brief
04273 *    Parameters
04274 *
04275 *  @remarks
04276 *    Implementation for 5 parameters without a return value
04277 */
04278 template <typename T0, typename T1, typename T2, typename T3, typename T4>
04279 class Params<void, T0, T1, T2, T3, T4> : public DynParams {
04280     public:
04281         typedef typename Type<T0> ::_Type _T0;
04282         typedef typename Type<T1> ::_Type _T1;
04283         typedef typename Type<T2> ::_Type _T2;
04284         typedef typename Type<T3> ::_Type _T3;
04285         typedef typename Type<T4> ::_Type _T4;
04286         typedef typename Type<T0>::_StorageType _ST0;
04287         typedef typename Type<T1>::_StorageType _ST1;
04288         typedef typename Type<T2>::_StorageType _ST2;
04289         typedef typename Type<T3>::_StorageType _ST3;
04290         typedef typename Type<T4>::_StorageType _ST4;
04291 
04292     public:
04293         _ST0  Param0;
04294         _ST1  Param1;
04295         _ST2  Param2;
04296         _ST3  Param3;
04297         _ST4  Param4;
04298 
04299     public:
04300         static Params FromString(const String &sParams) {
04301             ParamsParser cParser;
04302             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04303             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04304             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
04305             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
04306             _T4  t4  = (cParser.Next()                  ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
04307             return Params(t0, t1, t2, t3, t4);
04308         }
04309 
04310         static Params FromXml(const XmlElement &cElement) {
04311             ParamsParserXml cParser;
04312             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04313             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04314             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
04315             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
04316             _T4  t4  = (cParser.Next()              ? Type<T4> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T4> ::Default());
04317             return Params(t0, t1, t2, t3, t4);
04318         }
04319 
04320     public:
04321         Params(const Params &cParams) :
04322             Param0(cParams.Param0),
04323             Param1(cParams.Param1),
04324             Param2(cParams.Param2),
04325             Param3(cParams.Param3),
04326             Param4(cParams.Param4)
04327         {
04328         }
04329 
04330         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4) :
04331             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
04332             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
04333             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
04334             Param3(Type<T3>  ::ConvertRealToStorage(t3)),
04335             Param4(Type<T4>  ::ConvertRealToStorage(t4))
04336         {
04337         }
04338 
04339         virtual ~Params()
04340         {
04341         }
04342 
04343         Params &operator =(const Params &cParams)
04344         {
04345             Param0 = cParams.Param0;
04346             Param1 = cParams.Param1;
04347             Param2 = cParams.Param2;
04348             Param3 = cParams.Param3;
04349             Param4 = cParams.Param4;
04350             return *this;
04351         }
04352 
04353         virtual String GetSignature() const override
04354         {
04355             return Signature<void, T0, T1, T2, T3, T4>::GetSignatureID();
04356         }
04357 
04358         virtual uint32 GetNumOfParameters() const override
04359         {
04360             return 5;
04361         }
04362 
04363         virtual int GetParameterTypeID(uint32 nIndex) const override
04364         {
04365             switch (nIndex) {
04366                 case 0:     return Type<T0> ::TypeID;
04367                 case 1:     return Type<T1> ::TypeID;
04368                 case 2:     return Type<T2> ::TypeID;
04369                 case 3:     return Type<T3> ::TypeID;
04370                 case 4:     return Type<T4> ::TypeID;
04371                 default:    return TypeInvalid;
04372             }
04373         }
04374 
04375         virtual void *GetPointerToParameterValue(uint32 nIndex) override
04376         {
04377             switch (nIndex) {
04378                 case 0:     return (void*)&Param0;
04379                 case 1:     return (void*)&Param1;
04380                 case 2:     return (void*)&Param2;
04381                 case 3:     return (void*)&Param3;
04382                 case 4:     return (void*)&Param4;
04383                 default:    return nullptr;
04384             }
04385         }
04386 };
04387 
04388 /**
04389 *  @brief
04390 *    Parameters
04391 *
04392 *  @remarks
04393 *    Implementation for 4 parameters and a return value
04394 */
04395 template <typename R, typename T0, typename T1, typename T2, typename T3>
04396 class Params<R, T0, T1, T2, T3> : public DynParams {
04397     public:
04398         typedef typename Type<R>  ::_Type _R;
04399         typedef typename Type<T0> ::_Type _T0;
04400         typedef typename Type<T1> ::_Type _T1;
04401         typedef typename Type<T2> ::_Type _T2;
04402         typedef typename Type<T3> ::_Type _T3;
04403         typedef typename Type<R> ::_StorageType _SR;
04404         typedef typename Type<T0>::_StorageType _ST0;
04405         typedef typename Type<T1>::_StorageType _ST1;
04406         typedef typename Type<T2>::_StorageType _ST2;
04407         typedef typename Type<T3>::_StorageType _ST3;
04408 
04409     public:
04410         _SR   Return;
04411         _ST0  Param0;
04412         _ST1  Param1;
04413         _ST2  Param2;
04414         _ST3  Param3;
04415 
04416     public:
04417         static Params FromString(const String &sParams) {
04418             ParamsParser cParser;
04419             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04420             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04421             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
04422             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
04423             return Params(t0, t1, t2, t3);
04424         }
04425 
04426         static Params FromXml(const XmlElement &cElement) {
04427             ParamsParserXml cParser;
04428             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04429             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04430             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
04431             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
04432             return Params(t0, t1, t2, t3);
04433         }
04434 
04435     public:
04436         Params(const Params &cParams) :
04437             Return(DefaultValue<_SR>::Default()),
04438             Param0(cParams.Param0),
04439             Param1(cParams.Param1),
04440             Param2(cParams.Param2),
04441             Param3(cParams.Param3)
04442         {
04443         }
04444 
04445         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3) :
04446             Return(DefaultValue<_SR>::Default()),
04447             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
04448             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
04449             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
04450             Param3(Type<T3>  ::ConvertRealToStorage(t3))
04451         {
04452         }
04453 
04454         virtual ~Params()
04455         {
04456         }
04457 
04458         Params &operator =(const Params &cParams)
04459         {
04460             Return = cParams.Return;
04461             Param0 = cParams.Param0;
04462             Param1 = cParams.Param1;
04463             Param2 = cParams.Param2;
04464             Param3 = cParams.Param3;
04465             return *this;
04466         }
04467 
04468         virtual String GetSignature() const override
04469         {
04470             return Signature<R, T0, T1, T2, T3>::GetSignatureID();
04471         }
04472 
04473         virtual int GetReturnTypeID() const override
04474         {
04475             return Type<R>::TypeID;
04476         }
04477 
04478         virtual void *GetPointerToReturnValue() override
04479         {
04480             return (void*)&Return;
04481         }
04482 
04483         virtual uint32 GetNumOfParameters() const override
04484         {
04485             return 4;
04486         }
04487 
04488         virtual int GetParameterTypeID(uint32 nIndex) const override
04489         {
04490             switch (nIndex) {
04491                 case 0:     return Type<T0> ::TypeID;
04492                 case 1:     return Type<T1> ::TypeID;
04493                 case 2:     return Type<T2> ::TypeID;
04494                 case 3:     return Type<T3> ::TypeID;
04495                 default:    return TypeInvalid;
04496             }
04497         }
04498 
04499         virtual void *GetPointerToParameterValue(uint32 nIndex) override
04500         {
04501             switch (nIndex) {
04502                 case 0:     return (void*)&Param0;
04503                 case 1:     return (void*)&Param1;
04504                 case 2:     return (void*)&Param2;
04505                 case 3:     return (void*)&Param3;
04506                 default:    return nullptr;
04507             }
04508         }
04509 };
04510 
04511 /**
04512 *  @brief
04513 *    Parameters
04514 *
04515 *  @remarks
04516 *    Implementation for 4 parameters without a return value
04517 */
04518 template <typename T0, typename T1, typename T2, typename T3>
04519 class Params<void, T0, T1, T2, T3> : public DynParams {
04520     public:
04521         typedef typename Type<T0> ::_Type _T0;
04522         typedef typename Type<T1> ::_Type _T1;
04523         typedef typename Type<T2> ::_Type _T2;
04524         typedef typename Type<T3> ::_Type _T3;
04525         typedef typename Type<T0>::_StorageType _ST0;
04526         typedef typename Type<T1>::_StorageType _ST1;
04527         typedef typename Type<T2>::_StorageType _ST2;
04528         typedef typename Type<T3>::_StorageType _ST3;
04529 
04530     public:
04531         _ST0  Param0;
04532         _ST1  Param1;
04533         _ST2  Param2;
04534         _ST3  Param3;
04535 
04536     public:
04537         static Params FromString(const String &sParams) {
04538             ParamsParser cParser;
04539             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04540             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04541             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
04542             _T3  t3  = (cParser.Next()                  ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
04543             return Params(t0, t1, t2, t3);
04544         }
04545 
04546         static Params FromXml(const XmlElement &cElement) {
04547             ParamsParserXml cParser;
04548             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04549             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04550             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
04551             _T3  t3  = (cParser.Next()              ? Type<T3> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T3> ::Default());
04552             return Params(t0, t1, t2, t3);
04553         }
04554 
04555     public:
04556         Params(const Params &cParams) :
04557             Param0(cParams.Param0),
04558             Param1(cParams.Param1),
04559             Param2(cParams.Param2),
04560             Param3(cParams.Param3)
04561         {
04562         }
04563 
04564         Params(_T0 t0, _T1 t1, _T2 t2, _T3 t3) :
04565             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
04566             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
04567             Param2(Type<T2>  ::ConvertRealToStorage(t2)),
04568             Param3(Type<T3>  ::ConvertRealToStorage(t3))
04569         {
04570         }
04571 
04572         virtual ~Params()
04573         {
04574         }
04575 
04576         Params &operator =(const Params &cParams)
04577         {
04578             Param0 = cParams.Param0;
04579             Param1 = cParams.Param1;
04580             Param2 = cParams.Param2;
04581             Param3 = cParams.Param3;
04582             return *this;
04583         }
04584 
04585         virtual String GetSignature() const override
04586         {
04587             return Signature<void, T0, T1, T2, T3>::GetSignatureID();
04588         }
04589 
04590         virtual uint32 GetNumOfParameters() const override
04591         {
04592             return 4;
04593         }
04594 
04595         virtual int GetParameterTypeID(uint32 nIndex) const override
04596         {
04597             switch (nIndex) {
04598                 case 0:     return Type<T0> ::TypeID;
04599                 case 1:     return Type<T1> ::TypeID;
04600                 case 2:     return Type<T2> ::TypeID;
04601                 case 3:     return Type<T3> ::TypeID;
04602                 default:    return TypeInvalid;
04603             }
04604         }
04605 
04606         virtual void *GetPointerToParameterValue(uint32 nIndex) override
04607         {
04608             switch (nIndex) {
04609                 case 0:     return (void*)&Param0;
04610                 case 1:     return (void*)&Param1;
04611                 case 2:     return (void*)&Param2;
04612                 case 3:     return (void*)&Param3;
04613                 default:    return nullptr;
04614             }
04615         }
04616 };
04617 
04618 /**
04619 *  @brief
04620 *    Parameters
04621 *
04622 *  @remarks
04623 *    Implementation for 3 parameters and a return value
04624 */
04625 template <typename R, typename T0, typename T1, typename T2>
04626 class Params<R, T0, T1, T2> : public DynParams {
04627     public:
04628         typedef typename Type<R>  ::_Type _R;
04629         typedef typename Type<T0> ::_Type _T0;
04630         typedef typename Type<T1> ::_Type _T1;
04631         typedef typename Type<T2> ::_Type _T2;
04632         typedef typename Type<R> ::_StorageType _SR;
04633         typedef typename Type<T0>::_StorageType _ST0;
04634         typedef typename Type<T1>::_StorageType _ST1;
04635         typedef typename Type<T2>::_StorageType _ST2;
04636 
04637     public:
04638         _SR   Return;
04639         _ST0  Param0;
04640         _ST1  Param1;
04641         _ST2  Param2;
04642 
04643     public:
04644         static Params FromString(const String &sParams) {
04645             ParamsParser cParser;
04646             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04647             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04648             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
04649             return Params(t0, t1, t2);
04650         }
04651 
04652         static Params FromXml(const XmlElement &cElement) {
04653             ParamsParserXml cParser;
04654             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04655             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04656             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
04657             return Params(t0, t1, t2);
04658         }
04659 
04660     public:
04661         Params(const Params &cParams) :
04662             Return(DefaultValue<_SR>::Default()),
04663             Param0(cParams.Param0),
04664             Param1(cParams.Param1),
04665             Param2(cParams.Param2)
04666         {
04667         }
04668 
04669         Params(_T0 t0, _T1 t1, _T2 t2) :
04670             Return(DefaultValue<_SR>::Default()),
04671             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
04672             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
04673             Param2(Type<T2>  ::ConvertRealToStorage(t2))
04674         {
04675         }
04676 
04677         virtual ~Params()
04678         {
04679         }
04680 
04681         Params &operator =(const Params &cParams)
04682         {
04683             Return = cParams.Return;
04684             Param0 = cParams.Param0;
04685             Param1 = cParams.Param1;
04686             Param2 = cParams.Param2;
04687             return *this;
04688         }
04689 
04690         virtual String GetSignature() const override
04691         {
04692             return Signature<R, T0, T1, T2>::GetSignatureID();
04693         }
04694 
04695         virtual int GetReturnTypeID() const override
04696         {
04697             return Type<R>::TypeID;
04698         }
04699 
04700         virtual void *GetPointerToReturnValue() override
04701         {
04702             return (void*)&Return;
04703         }
04704 
04705         virtual uint32 GetNumOfParameters() const override
04706         {
04707             return 3;
04708         }
04709 
04710         virtual int GetParameterTypeID(uint32 nIndex) const override
04711         {
04712             switch (nIndex) {
04713                 case 0:     return Type<T0> ::TypeID;
04714                 case 1:     return Type<T1> ::TypeID;
04715                 case 2:     return Type<T2> ::TypeID;
04716                 default:    return TypeInvalid;
04717             }
04718         }
04719 
04720         virtual void *GetPointerToParameterValue(uint32 nIndex) override
04721         {
04722             switch (nIndex) {
04723                 case 0:     return (void*)&Param0;
04724                 case 1:     return (void*)&Param1;
04725                 case 2:     return (void*)&Param2;
04726                 default:    return nullptr;
04727             }
04728         }
04729 };
04730 
04731 /**
04732 *  @brief
04733 *    Parameters
04734 *
04735 *  @remarks
04736 *    Implementation for 3 parameters without a return value
04737 */
04738 template <typename T0, typename T1, typename T2>
04739 class Params<void, T0, T1, T2> : public DynParams {
04740     public:
04741         typedef typename Type<T0> ::_Type _T0;
04742         typedef typename Type<T1> ::_Type _T1;
04743         typedef typename Type<T2> ::_Type _T2;
04744         typedef typename Type<T0>::_StorageType _ST0;
04745         typedef typename Type<T1>::_StorageType _ST1;
04746         typedef typename Type<T2>::_StorageType _ST2;
04747 
04748     public:
04749         _ST0  Param0;
04750         _ST1  Param1;
04751         _ST2  Param2;
04752 
04753     public:
04754         static Params FromString(const String &sParams) {
04755             ParamsParser cParser;
04756             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04757             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04758             _T2  t2  = (cParser.Next()                  ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
04759             return Params(t0, t1, t2);
04760         }
04761 
04762         static Params FromXml(const XmlElement &cElement) {
04763             ParamsParserXml cParser;
04764             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04765             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04766             _T2  t2  = (cParser.Next()              ? Type<T2> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T2> ::Default());
04767             return Params(t0, t1, t2);
04768         }
04769 
04770     public:
04771         Params(const Params &cParams) :
04772             Param0(cParams.Param0),
04773             Param1(cParams.Param1),
04774             Param2(cParams.Param2)
04775         {
04776         }
04777 
04778         Params(_T0 t0, _T1 t1, _T2 t2) :
04779             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
04780             Param1(Type<T1>  ::ConvertRealToStorage(t1)),
04781             Param2(Type<T2>  ::ConvertRealToStorage(t2))
04782         {
04783         }
04784 
04785         virtual ~Params()
04786         {
04787         }
04788 
04789         Params &operator =(const Params &cParams)
04790         {
04791             Param0 = cParams.Param0;
04792             Param1 = cParams.Param1;
04793             Param2 = cParams.Param2;
04794             return *this;
04795         }
04796 
04797         virtual String GetSignature() const override
04798         {
04799             return Signature<void, T0, T1, T2>::GetSignatureID();
04800         }
04801 
04802         virtual uint32 GetNumOfParameters() const override
04803         {
04804             return 3;
04805         }
04806 
04807         virtual int GetParameterTypeID(uint32 nIndex) const override
04808         {
04809             switch (nIndex) {
04810                 case 0:     return Type<T0> ::TypeID;
04811                 case 1:     return Type<T1> ::TypeID;
04812                 case 2:     return Type<T2> ::TypeID;
04813                 default:    return TypeInvalid;
04814             }
04815         }
04816 
04817         virtual void *GetPointerToParameterValue(uint32 nIndex) override
04818         {
04819             switch (nIndex) {
04820                 case 0:     return (void*)&Param0;
04821                 case 1:     return (void*)&Param1;
04822                 case 2:     return (void*)&Param2;
04823                 default:    return nullptr;
04824             }
04825         }
04826 };
04827 
04828 /**
04829 *  @brief
04830 *    Parameters
04831 *
04832 *  @remarks
04833 *    Implementation for 2 parameters and a return value
04834 */
04835 template <typename R, typename T0, typename T1>
04836 class Params<R, T0, T1> : public DynParams {
04837     public:
04838         typedef typename Type<R>  ::_Type _R;
04839         typedef typename Type<T0> ::_Type _T0;
04840         typedef typename Type<T1> ::_Type _T1;
04841         typedef typename Type<R> ::_StorageType _SR;
04842         typedef typename Type<T0>::_StorageType _ST0;
04843         typedef typename Type<T1>::_StorageType _ST1;
04844 
04845     public:
04846         _SR   Return;
04847         _ST0  Param0;
04848         _ST1  Param1;
04849 
04850     public:
04851         static Params FromString(const String &sParams) {
04852             ParamsParser cParser;
04853             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04854             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04855             return Params(t0, t1);
04856         }
04857 
04858         static Params FromXml(const XmlElement &cElement) {
04859             ParamsParserXml cParser;
04860             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04861             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04862             return Params(t0, t1);
04863         }
04864 
04865     public:
04866         Params(const Params &cParams) :
04867             Return(DefaultValue<_SR>::Default()),
04868             Param0(cParams.Param0),
04869             Param1(cParams.Param1)
04870         {
04871         }
04872 
04873         Params(_T0 t0, _T1 t1) :
04874             Return(DefaultValue<_SR>::Default()),
04875             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
04876             Param1(Type<T1>  ::ConvertRealToStorage(t1))
04877         {
04878         }
04879 
04880         virtual ~Params()
04881         {
04882         }
04883 
04884         Params &operator =(const Params &cParams)
04885         {
04886             Return = cParams.Return;
04887             Param0 = cParams.Param0;
04888             Param1 = cParams.Param1;
04889             return *this;
04890         }
04891 
04892         virtual String GetSignature() const override
04893         {
04894             return Signature<R, T0, T1>::GetSignatureID();
04895         }
04896 
04897         virtual int GetReturnTypeID() const override
04898         {
04899             return Type<R>::TypeID;
04900         }
04901 
04902         virtual void *GetPointerToReturnValue() override
04903         {
04904             return (void*)&Return;
04905         }
04906 
04907         virtual uint32 GetNumOfParameters() const override
04908         {
04909             return 2;
04910         }
04911 
04912         virtual int GetParameterTypeID(uint32 nIndex) const override
04913         {
04914             switch (nIndex) {
04915                 case 0:     return Type<T0> ::TypeID;
04916                 case 1:     return Type<T1> ::TypeID;
04917                 default:    return TypeInvalid;
04918             }
04919         }
04920 
04921         virtual void *GetPointerToParameterValue(uint32 nIndex) override
04922         {
04923             switch (nIndex) {
04924                 case 0:     return (void*)&Param0;
04925                 case 1:     return (void*)&Param1;
04926                 default:    return nullptr;
04927             }
04928         }
04929 };
04930 
04931 /**
04932 *  @brief
04933 *    Parameters
04934 *
04935 *  @remarks
04936 *    Implementation for 2 parameters without a return value
04937 */
04938 template <typename T0, typename T1>
04939 class Params<void, T0, T1> : public DynParams {
04940     public:
04941         typedef typename Type<T0> ::_Type _T0;
04942         typedef typename Type<T1> ::_Type _T1;
04943         typedef typename Type<T0>::_StorageType _ST0;
04944         typedef typename Type<T1>::_StorageType _ST1;
04945 
04946     public:
04947         _ST0  Param0;
04948         _ST1  Param1;
04949 
04950     public:
04951         static Params FromString(const String &sParams) {
04952             ParamsParser cParser;
04953             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04954             _T1  t1  = (cParser.Next()                  ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04955             return Params(t0, t1);
04956         }
04957 
04958         static Params FromXml(const XmlElement &cElement) {
04959             ParamsParserXml cParser;
04960             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
04961             _T1  t1  = (cParser.Next()              ? Type<T1> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T1> ::Default());
04962             return Params(t0, t1);
04963         }
04964 
04965     public:
04966         Params(const Params &cParams) :
04967             Param0(cParams.Param0),
04968             Param1(cParams.Param1)
04969         {
04970         }
04971 
04972         Params(_T0 t0, _T1 t1) :
04973             Param0(Type<T0>  ::ConvertRealToStorage(t0)),
04974             Param1(Type<T1>  ::ConvertRealToStorage(t1))
04975         {
04976         }
04977 
04978         virtual ~Params()
04979         {
04980         }
04981 
04982         Params &operator =(const Params &cParams)
04983         {
04984             Param0 = cParams.Param0;
04985             Param1 = cParams.Param1;
04986             return *this;
04987         }
04988 
04989         virtual String GetSignature() const override
04990         {
04991             return Signature<void, T0, T1>::GetSignatureID();
04992         }
04993 
04994         virtual uint32 GetNumOfParameters() const override
04995         {
04996             return 2;
04997         }
04998 
04999         virtual int GetParameterTypeID(uint32 nIndex) const override
05000         {
05001             switch (nIndex) {
05002                 case 0:     return Type<T0> ::TypeID;
05003                 case 1:     return Type<T1> ::TypeID;
05004                 default:    return TypeInvalid;
05005             }
05006         }
05007 
05008         virtual void *GetPointerToParameterValue(uint32 nIndex) override
05009         {
05010             switch (nIndex) {
05011                 case 0:     return (void*)&Param0;
05012                 case 1:     return (void*)&Param1;
05013                 default:    return nullptr;
05014             }
05015         }
05016 };
05017 
05018 /**
05019 *  @brief
05020 *    Parameters
05021 *
05022 *  @remarks
05023 *    Implementation for 1 parameters and a return value
05024 */
05025 template <typename R, typename T0>
05026 class Params<R, T0> : public DynParams {
05027     public:
05028         typedef typename Type<R>  ::_Type _R;
05029         typedef typename Type<T0> ::_Type _T0;
05030         typedef typename Type<R> ::_StorageType _SR;
05031         typedef typename Type<T0>::_StorageType _ST0;
05032 
05033     public:
05034         _SR   Return;
05035         _ST0  Param0;
05036 
05037     public:
05038         static Params FromString(const String &sParams) {
05039             ParamsParser cParser;
05040             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
05041             return Params(t0);
05042         }
05043 
05044         static Params FromXml(const XmlElement &cElement) {
05045             ParamsParserXml cParser;
05046             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
05047             return Params(t0);
05048         }
05049 
05050     public:
05051         Params(const Params &cParams) :
05052             Return(DefaultValue<_SR>::Default()),
05053             Param0(cParams.Param0)
05054         {
05055         }
05056 
05057         Params(_T0 t0) :
05058             Return(DefaultValue<_SR>::Default()),
05059             Param0(Type<T0>  ::ConvertRealToStorage(t0))
05060         {
05061         }
05062 
05063         virtual ~Params()
05064         {
05065         }
05066 
05067         Params &operator =(const Params &cParams)
05068         {
05069             Return = cParams.Return;
05070             Param0 = cParams.Param0;
05071             return *this;
05072         }
05073 
05074         virtual String GetSignature() const override
05075         {
05076             return Signature<R, T0>::GetSignatureID();
05077         }
05078 
05079         virtual int GetReturnTypeID() const override
05080         {
05081             return Type<R>::TypeID;
05082         }
05083 
05084         virtual void *GetPointerToReturnValue() override
05085         {
05086             return (void*)&Return;
05087         }
05088 
05089         virtual uint32 GetNumOfParameters() const override
05090         {
05091             return 1;
05092         }
05093 
05094         virtual int GetParameterTypeID(uint32 nIndex) const override
05095         {
05096             switch (nIndex) {
05097                 case 0:     return Type<T0> ::TypeID;
05098                 default:    return TypeInvalid;
05099             }
05100         }
05101 
05102         virtual void *GetPointerToParameterValue(uint32 nIndex) override
05103         {
05104             switch (nIndex) {
05105                 case 0:     return (void*)&Param0;
05106                 default:    return nullptr;
05107             }
05108         }
05109 };
05110 
05111 /**
05112 *  @brief
05113 *    Parameters
05114 *
05115 *  @remarks
05116 *    Implementation for 1 parameters without a return value
05117 */
05118 template <typename T0>
05119 class Params<void, T0> : public DynParams {
05120     public:
05121         typedef typename Type<T0> ::_Type _T0;
05122         typedef typename Type<T0>::_StorageType _ST0;
05123 
05124     public:
05125         _ST0  Param0;
05126 
05127     public:
05128         static Params FromString(const String &sParams) {
05129             ParamsParser cParser;
05130             _T0  t0  = (cParser.ParseString(sParams)    ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
05131             return Params(t0);
05132         }
05133 
05134         static Params FromXml(const XmlElement &cElement) {
05135             ParamsParserXml cParser;
05136             _T0  t0  = (cParser.ParseXml(cElement)  ? Type<T0> ::ConvertFromString(cParser.GetValue()) : DefaultValue<T0> ::Default());
05137             return Params(t0);
05138         }
05139 
05140     public:
05141         Params(const Params &cParams) :
05142             Param0(cParams.Param0)
05143         {
05144         }
05145 
05146         Params(_T0 t0) :
05147             Param0(Type<T0>  ::ConvertRealToStorage(t0))
05148         {
05149         }
05150 
05151         virtual ~Params()
05152         {
05153         }
05154 
05155         Params &operator =(const Params &cParams)
05156         {
05157             Param0 = cParams.Param0;
05158             return *this;
05159         }
05160 
05161         virtual String GetSignature() const override
05162         {
05163             return Signature<void, T0>::GetSignatureID();
05164         }
05165 
05166         virtual uint32 GetNumOfParameters() const override
05167         {
05168             return 1;
05169         }
05170 
05171         virtual int GetParameterTypeID(uint32 nIndex) const override
05172         {
05173             switch (nIndex) {
05174                 case 0:     return Type<T0> ::TypeID;
05175                 default:    return TypeInvalid;
05176             }
05177         }
05178 
05179         virtual void *GetPointerToParameterValue(uint32 nIndex) override
05180         {
05181             switch (nIndex) {
05182                 case 0:     return (void*)&Param0;
05183                 default:    return nullptr;
05184             }
05185         }
05186 };
05187 
05188 /**
05189 *  @brief
05190 *    Parameters
05191 *
05192 *  @remarks
05193 *    Implementation for 0 parameters and a return value
05194 */
05195 template <typename R>
05196 class Params<R> : public DynParams {
05197     public:
05198         typedef typename Type<R>  ::_Type _R;
05199         typedef typename Type<R>::_StorageType _SR;
05200 
05201     public:
05202         _SR Return;
05203 
05204     public:
05205         static Params FromString(const String &sParams) {
05206             return Params();
05207         }
05208 
05209         static Params FromXml(const XmlElement &cElement) {
05210             return Params();
05211         }
05212 
05213     public:
05214         Params(const Params &cParams) :
05215             Return(DefaultValue<_SR>::Default())
05216         {
05217         }
05218 
05219         Params() :
05220             Return(DefaultValue<_SR>::Default())
05221         {
05222         }
05223 
05224         virtual ~Params()
05225         {
05226         }
05227 
05228         Params &operator =(const Params &cParams)
05229         {
05230             Return = cParams.Return;
05231             return *this;
05232         }
05233 
05234         virtual String GetSignature() const override
05235         {
05236             return Signature<R>::GetSignatureID();
05237         }
05238 
05239         virtual int GetReturnTypeID() const override
05240         {
05241             return Type<R>::TypeID;
05242         }
05243 
05244         virtual void *GetPointerToReturnValue() override
05245         {
05246             return (void*)&Return;
05247         }
05248 };
05249 
05250 /**
05251 *  @brief
05252 *    Parameters
05253 *
05254 *  @remarks
05255 *    Implementation for 0 parameters without a return value
05256 */
05257 template <>
05258 class Params<void> : public DynParams {
05259     public:
05260         static Params FromString(const String &sParams) {
05261             return Params();
05262         }
05263 
05264         static Params FromXml(const XmlElement &cElement) {
05265             return Params();
05266         }
05267 
05268     public:
05269         Params(const Params &cParams)
05270         {
05271         }
05272 
05273         Params()
05274         {
05275         }
05276 
05277         virtual ~Params()
05278         {
05279         }
05280 
05281         Params &operator =(const Params &cParams)
05282         {
05283             return *this;
05284         }
05285 
05286         virtual String GetSignature() const override
05287         {
05288             return Signature<void>::GetSignatureID();
05289         }
05290 };
05291 
05292 
05293 //[-------------------------------------------------------]
05294 //[ Namespace                                             ]
05295 //[-------------------------------------------------------]
05296 } // PLCore
05297 
05298 
05299 #endif // __PLCORE_PARAMS_H__


PixelLight PixelLight 0.9.11-R1
Copyright (C) 2002-2012 by The PixelLight Team
Last modified Thu Feb 23 2012 14:08:58
The content of this PixelLight document is published under the
Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported