00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __PLCORE_RTTI_H__
00024 #define __PLCORE_RTTI_H__
00025 #pragma once
00026
00027
00028
00029
00030
00031 #include "PLCore/Base/ClassReal.h"
00032 #include "PLCore/Base/ClassManager.h"
00033 #include "PLCore/Base/Var/Var.h"
00034 #include "PLCore/Base/Var/Attribute.h"
00035 #include "PLCore/Base/Func/Method.h"
00036 #include "PLCore/Base/Func/Constructor.h"
00037 #include "PLCore/Base/Event/Signal.h"
00038 #include "PLCore/Base/Event/Slot.h"
00039 #include "PLCore/Base/Tools/TypeTraits.h"
00040
00041
00042
00043
00044
00045 namespace PLCore {
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 #ifdef _DEBUG
00056 #define PLCORE_IS_DEBUGMODE true
00057 #else
00058 #define PLCORE_IS_DEBUGMODE false
00059 #endif
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076 template <typename T> class ModuleID
00077 {
00078
00079
00080
00081
00082
00083 public:
00084
00085
00086
00087
00088
00089
00090
00091 static uint32 GetModuleID();
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106 static void RegisterModule(const String &sName, const String &sVendor, const String &sLicense, const String &sDescription);
00107
00108
00109
00110
00111
00112 private:
00113 static uint32 m_nModuleID;
00114
00115
00116 };
00117
00118
00119 template <typename T> uint32 ModuleID<T>::GetModuleID()
00120 {
00121
00122 if (m_nModuleID == 0)
00123 m_nModuleID = ClassManager::GetInstance()->GetUniqueModuleID();
00124
00125
00126 return m_nModuleID;
00127 }
00128
00129 template <typename T> void ModuleID<T>::RegisterModule(const String &sName, const String &sVendor, const String &sLicense, const String &sDescription)
00130 {
00131 ClassManager::GetInstance()->RegisterModule(GetModuleID(), sName, sVendor, sLicense, sDescription);
00132 }
00133
00134
00135 template <typename T> uint32 ModuleID<T>::m_nModuleID = 0;
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148 #define __pl_enum(ENUM) \
00149 class ENUM##__plcore_enum__ { \
00150 public: \
00151 typedef int _BaseType; \
00152 typedef ENUM _Type; \
00153 \
00154 static bool GetEnumValue(int nIndex, ENUM &nValue, PLCore::String &sName, PLCore::String &sDescription) { \
00155 int nCount = 0; \
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166 #define __pl_enum_direct(ENUM, TYPE) \
00167 class ENUM##__plcore_enum__ { \
00168 public: \
00169 typedef TYPE _BaseType; \
00170 typedef TYPE _Type; \
00171 \
00172 static bool GetEnumValue(int nIndex, TYPE &nValue, PLCore::String &sName, PLCore::String &sDescription) { \
00173 int nCount = 0; \
00174
00175
00176
00177
00178
00179
00180
00181
00182 #define __pl_enum_base(ENUM) \
00183 nCount = PLCore::EnumType<ENUM##__plcore_enum__>::GetNumOfEnumValues(); \
00184 if (nIndex >= 0 && nIndex < nCount) { \
00185 return ENUM##__plcore_enum__::GetEnumValue(nIndex, reinterpret_cast<ENUM&>(nValue), sName, sDescription); \
00186 } else if (nIndex == -1) { \
00187 if (ENUM##__plcore_enum__::GetEnumValue(-1, reinterpret_cast<ENUM&>(nValue), sName, sDescription)) \
00188 return true; \
00189 } \
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200 #define __pl_enum_value(VALUE, DESCRIPTION) \
00201 if (nIndex == nCount) { nValue = VALUE; sName = #VALUE; return true; } \
00202 else if (nIndex == -1 && !sName.GetLength() && nValue == VALUE) { sName = #VALUE; return true; } \
00203 else if (nIndex == -1 && sName == #VALUE) { nValue = VALUE; sDescription = DESCRIPTION; return true; } \
00204 nCount++; \
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217 #define __pl_enum_value_direct(NAME, VALUE, DESCRIPTION) \
00218 if (nIndex == nCount) { nValue = VALUE; sName = #NAME; return true; } \
00219 else if (nIndex == -1 && !sName.GetLength() && nValue == VALUE) { sName = #NAME; return true; } \
00220 else if (nIndex == -1 && sName == #NAME) { nValue = VALUE; sDescription = DESCRIPTION; return true; } \
00221 nCount++; \
00222
00223
00224
00225
00226
00227 #define __pl_enum_end \
00228 return false; \
00229 } \
00230 }; \
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245 #define __pl_class(CLASS, NAMESPACE, BASECLASS, BASECLASSNAME, DESCRIPTION) \
00246 \
00247 public: \
00248 \
00249 typedef CLASS _Self; \
00250 typedef BASECLASS _Base; \
00251 \
00252 \
00253 class _Class : public PLCore::ClassReal { \
00254 friend class CLASS; \
00255 public: \
00256 \
00257 static void Error() { \
00258 PLCore::CheckBaseClass<CLASS, BASECLASS>::Type::Error(); \
00259 } \
00260 \
00261 \
00262 static _Class *GetSingleton(bool bGet = true) {\
00263 static bool MyShutdown = false; \
00264 static _Class *MyInstance = nullptr; \
00265 if (bGet) { \
00266 \
00267 if (!MyInstance && !MyShutdown) { \
00268 MyInstance = new _Class(); \
00269 CLASS::_RegisterProperties(MyInstance); \
00270 } \
00271 } else { \
00272 \
00273 MyShutdown = true; \
00274 if (MyInstance) { \
00275 delete MyInstance; \
00276 MyInstance = nullptr; \
00277 } \
00278 } \
00279 return MyInstance; \
00280 } \
00281 \
00282 \
00283 _Class() : PLCore::ClassReal(PLCore::ModuleID<int>::GetModuleID(), #CLASS, DESCRIPTION, NAMESPACE, BASECLASSNAME) { \
00284 }; \
00285 \
00286 \
00287 virtual ~_Class() { \
00288 }; \
00289 }; \
00290
00291
00292
00293
00294
00295
00296
00297
00298 #define __pl_rtti_export(EXPORT) \
00299 enum { \
00300 _RttiExport = EXPORT \
00301 }; \
00302 \
00303
00304
00305
00306
00307
00308
00309
00310
00311 #define __pl_guard(CLASS) \
00312 \
00313 class _Guard { \
00314 public: \
00315 \
00316 _Guard() { \
00317 _Class::GetSingleton(); \
00318 } \
00319 \
00320 \
00321 ~_Guard() { \
00322 \
00323 _Class::GetSingleton(false); \
00324 } \
00325 }; \
00326
00327
00328
00329
00330
00331 #define __pl_getclass() \
00332 \
00333 virtual PLCore::Class *GetClass() const override \
00334 { \
00335 return _Class::GetSingleton()->GetClass(); \
00336 } \
00337
00338
00339
00340
00341
00342
00343
00344
00345 #define __pl_class_impl(CLASS) \
00346 \
00347 CLASS::_Guard cGuard_##CLASS; \
00348
00349
00350
00351
00352
00353 #define __pl_prop_meth \
00354 \
00355 static inline void _RegisterProperties(PLCore::ClassReal *pClass) { \
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366 #define __pl_prop_prop(NAME, VALUE) \
00367 static_cast<_Class*>(pClass)->AddProperty(NAME, VALUE); \
00368
00369
00370
00371
00372
00373 #define __pl_prop_class_end \
00374 } \
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387 #define __pl_attr_stor(NAME, TYPE, STORAGE) \
00388 template <typename CLASS> class NAME##_GetSet { \
00389 public: \
00390 typedef PLCore::StorageGetSet StorageType; \
00391 typedef PLCore::StorageGetSet BaseStorageType; \
00392 static inline PLCore::Type<TYPE>::_Type Get(PLCore::Object *pObject) { \
00393 return static_cast<CLASS*>(pObject)->Get##NAME(); \
00394 } \
00395 static inline void Set(PLCore::Object *pObject, const PLCore::Type<TYPE>::_Type &Value) { \
00396 static_cast<CLASS*>(pObject)->Set##NAME(Value); \
00397 } \
00398 }; \
00399 \
00400 template <typename BASE> class NAME##_ModAttr { \
00401 public: \
00402 typedef PLCore::StorageModifyAttr StorageType; \
00403 typedef typename BASE::NAME##_Storage::BaseStorageType BaseStorageType; \
00404 static inline PLCore::Type<TYPE>::_Type Get(PLCore::Object *pObject) { \
00405 return static_cast<BASE*>(pObject)->NAME.Get(); \
00406 } \
00407 static inline void Set(PLCore::Object *pObject, const PLCore::Type<TYPE>::_Type &Value) { \
00408 static_cast<BASE*>(pObject)->NAME.Set(Value); \
00409 } \
00410 }; \
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427 #define __pl_attr_desc(NAME, TYPE, DEFAULT, DESCRIPTION, ANNOTATION) \
00428 class NAME##_Desc : public PLCore::VarDesc { \
00429 public: \
00430 NAME##_Desc() : PLCore::VarDesc(PLCore::Type<TYPE>::TypeID, PLCore::Type<TYPE>::GetTypeName(), #NAME, DESCRIPTION, ANNOTATION) { \
00431 bool bRegister = static_cast<bool>(_Self::_RttiExport); \
00432 if (bRegister) \
00433 Register(_Class::GetSingleton()); \
00434 } \
00435 ~NAME##_Desc() { \
00436 } \
00437 private: \
00438 virtual PLCore::String GetDefault() const override { \
00439 return PLCore::Type<TYPE>::ConvertToString(DEFAULT); \
00440 } \
00441 virtual PLCore::DynVar *GetAttribute(const Object &cObject) const override { \
00442 return &reinterpret_cast<_Self&>(const_cast<Object&>(cObject)).NAME; \
00443 } \
00444 }; \
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461 #define __pl_attr_attr(NAME, TYPE, DEFAULT, ACCESS, STORAGE) \
00462 typedef PLCore::SpecializeIfEqual<PLCore::Storage##STORAGE, PLCore::StorageGetSet, NAME##_GetSet, _Self>::Type NAME##_ClassGetSet; \
00463 typedef PLCore::SpecializeIfEqual<PLCore::Storage##STORAGE, PLCore::StorageModifyAttr, NAME##_ModAttr, _Base>::Type NAME##_ClassModAttr; \
00464 typedef PLCore::StorageChooser<PLCore::Storage##STORAGE, NAME##_ClassGetSet, NAME##_ClassModAttr>::Storage NAME##_Storage; \
00465 \
00466 class NAME##_Attr : public PLCore::Attribute<TYPE, PLCore::Access##ACCESS, NAME##_Storage, NAME##_Desc> { \
00467 public: \
00468 typedef PLCore::Type< TYPE >::_Type _Type; \
00469 NAME##_Attr(_Self *pObject) : PLCore::Attribute<TYPE, PLCore::Access##ACCESS, NAME##_Storage, NAME##_Desc>(DEFAULT, pObject) { \
00470 } \
00471 \
00472 NAME##_Attr &operator =(const _Type &Value) { \
00473 return static_cast<NAME##_Attr&>(PLCore::Attribute<TYPE, PLCore::Access##ACCESS, NAME##_Storage, NAME##_Desc>::operator =(Value)); \
00474 } \
00475 }; \
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486 #define __pl_attr_decl(NAME, TYPE) \
00487 NAME##_Attr NAME; \
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501
00502
00503
00504 #define __pl_method_desc(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, DESCRIPTION, ANNOTATION) \
00505 class NAME##_Desc : public PLCore::FuncDesc { \
00506 public: \
00507 typedef _Self ClassType; \
00508 typedef PLCore::Functor<RET,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15> FuncType; \
00509 typedef PLCore::Signature<RET,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15> SigType; \
00510 typedef PLCore::ClassTypelist< _Self, PLCore::Typelist<RET,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15> >::TypeMethodSignature MethType; \
00511 public: \
00512 NAME##_Desc() : PLCore::FuncDesc(SigType::GetSignatureID(), #NAME, #DESCRIPTION, #ANNOTATION) { \
00513 bool bRegister = static_cast<bool>(_Self::_RttiExport); \
00514 if (bRegister) \
00515 Register(_Class::GetSingleton()); \
00516 } \
00517 ~NAME##_Desc() { \
00518 } \
00519 virtual PLCore::DynFuncPtr GetMethod(Object &cObject) const override { \
00520 return new NAME##_Method(reinterpret_cast<_Self&>(cObject)); \
00521 } \
00522 private: \
00523 FuncType m_cFunctor; \
00524 }; \
00525
00526
00527
00528
00529
00530
00531
00532
00533 #define __pl_method_meth(NAME) \
00534 class NAME##_Method : public PLCore::Method<NAME##_Desc> { \
00535 public: \
00536 \
00537 NAME##_Method() : PLCore::Method<NAME##_Desc>((NAME##_Desc::MethType::MemFuncType)(&_Self::NAME), nullptr) { \
00538 \
00539 } \
00540 \
00541 NAME##_Method(_Self &cObject) : PLCore::Method<NAME##_Desc>((NAME##_Desc::MethType::MemFuncType)(&_Self::NAME), &cObject) { \
00542 } \
00543 }; \
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558 #define __pl_signal_desc(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, DESCRIPTION, ANNOTATION) \
00559 class NAME##_Desc : public PLCore::EventDesc { \
00560 public: \
00561 typedef _Self ClassType; \
00562 typedef PLCore::Event<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15> EventType; \
00563 typedef PLCore::Signature<void,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15> SigType; \
00564 public: \
00565 NAME##_Desc() : PLCore::EventDesc(SigType::GetSignatureID(), #NAME, #DESCRIPTION, #ANNOTATION) { \
00566 bool bRegister = static_cast<bool>(_Self::_RttiExport); \
00567 if (bRegister) \
00568 Register(_Class::GetSingleton()); \
00569 } \
00570 ~NAME##_Desc() { \
00571 } \
00572 private: \
00573 virtual PLCore::DynEvent *GetSignal(const Object &cObject) const override { \
00574 return &reinterpret_cast<_Self&>(const_cast<Object&>(cObject)).NAME; \
00575 } \
00576 }; \
00577
00578
00579
00580
00581
00582
00583
00584
00585 #define __pl_signal_evnt(NAME) \
00586 class NAME##_Signal : public PLCore::Signal<NAME##_Desc> { \
00587 public: \
00588 NAME##_Signal() : PLCore::Signal<NAME##_Desc>() { \
00589 } \
00590 }; \
00591
00592
00593
00594
00595
00596
00597
00598
00599 #define __pl_signal_decl(NAME) \
00600 NAME##_Signal NAME; \
00601
00602
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615 #define __pl_slot_desc(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, DESCRIPTION, ANNOTATION) \
00616 class NAME##_Desc : public PLCore::EventHandlerDesc { \
00617 public: \
00618 typedef _Self ClassType; \
00619 typedef PLCore::EventHandler<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15> EventHandlerType; \
00620 typedef PLCore::Signature<void,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15> SigType; \
00621 typedef PLCore::ClassTypelist< _Self, PLCore::Typelist<void,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15> >::TypeMethodSignature MethType; \
00622 public: \
00623 NAME##_Desc() : PLCore::EventHandlerDesc(SigType::GetSignatureID(), #NAME, #DESCRIPTION, #ANNOTATION) { \
00624 bool bRegister = static_cast<bool>(_Self::_RttiExport); \
00625 if (bRegister) \
00626 Register(_Class::GetSingleton()); \
00627 } \
00628 ~NAME##_Desc() { \
00629 } \
00630 private: \
00631 virtual PLCore::DynEventHandler *GetSlot(const Object &cObject) const override { \
00632 return &reinterpret_cast<_Self&>(const_cast<Object&>(cObject)).Slot##NAME; \
00633 } \
00634 }; \
00635
00636
00637
00638
00639
00640
00641
00642
00643 #define __pl_slot_evth(NAME) \
00644 class NAME##_Slot : public PLCore::Slot<NAME##_Desc> { \
00645 public: \
00646 NAME##_Slot(_Self *pObject) : PLCore::Slot<NAME##_Desc>(&_Self::NAME, pObject) { \
00647 } \
00648 }; \
00649
00650
00651
00652
00653
00654
00655
00656
00657 #define __pl_slot_decl(NAME) \
00658 NAME##_Slot Slot##NAME; \
00659
00660
00661
00662
00663
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673 #define __pl_constructor_desc(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, DESCRIPTION, ANNOTATION) \
00674 class NAME##_Desc : public PLCore::ConstructorDesc { \
00675 public: \
00676 typedef _Self ClassType; \
00677 typedef PLCore::Params<Object*,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15> ParamType; \
00678 typedef const PLCore::Params<Object*,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15> ConstParamType; \
00679 typedef PLCore::FuncConstructor<_Self,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15> ConstType; \
00680 typedef PLCore::Signature<Object*,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15> SigType; \
00681 public: \
00682 NAME##_Desc() : PLCore::ConstructorDesc(SigType::GetSignatureID(), #NAME, #DESCRIPTION, #ANNOTATION) { \
00683 bool bRegister = static_cast<bool>(_Self::_RttiExport); \
00684 if (bRegister) \
00685 Register(_Class::GetSingleton()); \
00686 } \
00687 ~NAME##_Desc() { \
00688 } \
00689 private: \
00690 virtual PLCore::DynFunc *GetConstructor() const override { \
00691 return const_cast<PLCore::DynFunc*>(reinterpret_cast<const PLCore::DynFunc*>(&m_Constructor)); \
00692 } \
00693 virtual PLCore::Object *Create(const PLCore::DynParams &cConstParams) override { \
00694 if (cConstParams.GetSignature() == m_Constructor.GetSignature()) { \
00695 ParamType cParams = static_cast<ConstParamType&>(cConstParams); \
00696 m_Constructor.Call(cParams); \
00697 return static_cast<ParamType&>(cParams).Return; \
00698 } else return nullptr; \
00699 } \
00700 virtual PLCore::Object *Create(const PLCore::String &sConstParams) override { \
00701 ParamType cParams = ConstParamType::FromString(sConstParams); \
00702 m_Constructor.Call(cParams); \
00703 return cParams.Return; \
00704 } \
00705 ConstType m_Constructor; \
00706 }; \
00707
00708
00709
00710
00711
00712
00713
00714
00715 #define __pl_constructor_cons(NAME) \
00716 class NAME##_Constructor : public PLCore::Constructor<NAME##_Desc> { \
00717 public: \
00718 NAME##_Constructor() { \
00719 } \
00720 }; \
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730 #define pl_current_module_id() ( PLCore::ModuleID<int>::GetModuleID() )
00731
00732
00733
00734
00735
00736
00737
00738
00739 #define pl_enum(ENUM) \
00740 __pl_enum(ENUM) \
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750
00751 #define pl_enum_direct(ENUM, TYPE) \
00752 __pl_enum_direct(ENUM, TYPE) \
00753
00754
00755
00756
00757
00758
00759
00760
00761 #define pl_enum_base(ENUM) \
00762 __pl_enum_base(ENUM) \
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773 #define pl_enum_value(VALUE, DESCRIPTION) \
00774 __pl_enum_value(VALUE, DESCRIPTION) \
00775
00776
00777
00778
00779
00780
00781
00782
00783
00784
00785
00786
00787 #define pl_enum_value_direct(NAME, VALUE, DESCRIPTION) \
00788 __pl_enum_value_direct(NAME, VALUE, DESCRIPTION) \
00789
00790
00791
00792
00793
00794 #define pl_enum_end \
00795 __pl_enum_end \
00796
00797
00798
00799
00800
00801
00802
00803
00804
00805
00806
00807
00808
00809
00810
00811
00812 #define pl_class(EXPORT, CLASS, NAMESPACE, BASECLASS, DESCRIPTION) \
00813 __pl_class(CLASS, NAMESPACE, BASECLASS, #BASECLASS, DESCRIPTION) \
00814 __pl_guard(CLASS) \
00815 __pl_getclass() \
00816 __pl_rtti_export(EXPORT) \
00817
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828
00829 #define pl_rtti_export 1
00830
00831
00832
00833
00834
00835
00836
00837
00838 #define pl_rtti_import 0
00839
00840
00841
00842
00843
00844
00845
00846
00847
00848
00849
00850
00851
00852
00853
00854
00855
00856
00857
00858
00859 #define pl_class_internal(EXPORT, CLASS, NAMESPACE, BASECLASS, DESCRIPTION) \
00860 __pl_class(CLASS, NAMESPACE, PLCore::ObjectBase, #BASECLASS, DESCRIPTION) \
00861 __pl_guard(CLASS) \
00862 __pl_getclass() \
00863 __pl_rtti_export(EXPORT) \
00864
00865
00866
00867
00868
00869 #define pl_properties \
00870 __pl_prop_meth \
00871
00872
00873
00874
00875
00876
00877
00878
00879
00880
00881 #define pl_property(NAME, VALUE) \
00882 __pl_prop_prop(NAME, VALUE) \
00883
00884
00885
00886
00887
00888 #define pl_properties_end \
00889 __pl_prop_class_end \
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899
00900
00901
00902
00903
00904
00905
00906
00907
00908
00909
00910 #define pl_attribute(NAME, TYPE, DEFAULT, ACCESS, STORAGE, DESCRIPTION, ANNOTATION) \
00911 __pl_attr_stor(NAME, TYPE, STORAGE) \
00912 __pl_attr_desc(NAME, TYPE, DEFAULT, DESCRIPTION, ANNOTATION) \
00913 __pl_attr_attr(NAME, TYPE, DEFAULT, ACCESS, STORAGE) \
00914 __pl_attr_decl(NAME, TYPE) \
00915
00916
00917
00918
00919
00920
00921
00922
00923 #define pl_enum_type(ENUM) PLCore::EnumType< ENUM##__plcore_enum__ >
00924
00925
00926
00927
00928
00929
00930
00931
00932 #define pl_flag_type(ENUM) PLCore::FlagType< ENUM##__plcore_enum__ >
00933
00934
00935
00936
00937
00938
00939
00940
00941
00942
00943
00944
00945
00946
00947
00948
00949 #define pl_method_16(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, DESCRIPTION, ANNOTATION) \
00950 private: \
00951 __pl_method_desc(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, DESCRIPTION, ANNOTATION) \
00952 __pl_method_meth(NAME) \
00953 public: \
00954
00955 #define pl_method_15(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, DESCRIPTION, ANNOTATION) \
00956 pl_method_16(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, PLCore::NullType, DESCRIPTION, ANNOTATION)
00957
00958 #define pl_method_14(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, DESCRIPTION, ANNOTATION) \
00959 pl_method_16(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
00960
00961 #define pl_method_13(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, DESCRIPTION, ANNOTATION) \
00962 pl_method_16(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
00963
00964 #define pl_method_12(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, DESCRIPTION, ANNOTATION) \
00965 pl_method_16(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
00966
00967 #define pl_method_11(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, DESCRIPTION, ANNOTATION) \
00968 pl_method_16(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
00969
00970 #define pl_method_10(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, DESCRIPTION, ANNOTATION) \
00971 pl_method_16(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
00972
00973 #define pl_method_9(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, T8, DESCRIPTION, ANNOTATION) \
00974 pl_method_16(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, T8, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
00975
00976 #define pl_method_8(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, DESCRIPTION, ANNOTATION) \
00977 pl_method_16(NAME, RET, T0, T1, T2, T3, T4, T5, T6, T7, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
00978
00979 #define pl_method_7(NAME, RET, T0, T1, T2, T3, T4, T5, T6, DESCRIPTION, ANNOTATION) \
00980 pl_method_16(NAME, RET, T0, T1, T2, T3, T4, T5, T6, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
00981
00982 #define pl_method_6(NAME, RET, T0, T1, T2, T3, T4, T5, DESCRIPTION, ANNOTATION) \
00983 pl_method_16(NAME, RET, T0, T1, T2, T3, T4, T5, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
00984
00985 #define pl_method_5(NAME, RET, T0, T1, T2, T3, T4, DESCRIPTION, ANNOTATION) \
00986 pl_method_16(NAME, RET, T0, T1, T2, T3, T4, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
00987
00988 #define pl_method_4(NAME, RET, T0, T1, T2, T3, DESCRIPTION, ANNOTATION) \
00989 pl_method_16(NAME, RET, T0, T1, T2, T3, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
00990
00991 #define pl_method_3(NAME, RET, T0, T1, T2, DESCRIPTION, ANNOTATION) \
00992 pl_method_16(NAME, RET, T0, T1, T2, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
00993
00994 #define pl_method_2(NAME, RET, T0, T1, DESCRIPTION, ANNOTATION) \
00995 pl_method_16(NAME, RET, T0, T1, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
00996
00997 #define pl_method_1(NAME, RET, T0, DESCRIPTION, ANNOTATION) \
00998 pl_method_16(NAME, RET, T0, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
00999
01000 #define pl_method_0(NAME, RET, DESCRIPTION, ANNOTATION) \
01001 pl_method_16(NAME, RET, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01002
01003
01004
01005
01006
01007
01008
01009
01010
01011
01012
01013
01014
01015
01016 #define pl_signal_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, DESCRIPTION, ANNOTATION) \
01017 __pl_signal_desc(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, DESCRIPTION, ANNOTATION) \
01018 __pl_signal_evnt(NAME) \
01019 __pl_signal_decl(NAME) \
01020
01021 #define pl_signal_15(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, DESCRIPTION, ANNOTATION) \
01022 pl_signal_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, PLCore::NullType, DESCRIPTION, ANNOTATION)
01023
01024 #define pl_signal_14(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, DESCRIPTION, ANNOTATION) \
01025 pl_signal_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01026
01027 #define pl_signal_13(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, DESCRIPTION, ANNOTATION) \
01028 pl_signal_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01029
01030 #define pl_signal_12(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, DESCRIPTION, ANNOTATION) \
01031 pl_signal_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01032
01033 #define pl_signal_11(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, DESCRIPTION, ANNOTATION) \
01034 pl_signal_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01035
01036 #define pl_signal_10(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, DESCRIPTION, ANNOTATION) \
01037 pl_signal_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01038
01039 #define pl_signal_9(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, DESCRIPTION, ANNOTATION) \
01040 pl_signal_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01041
01042 #define pl_signal_8(NAME, T0, T1, T2, T3, T4, T5, T6, T7, DESCRIPTION, ANNOTATION) \
01043 pl_signal_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01044
01045 #define pl_signal_7(NAME, T0, T1, T2, T3, T4, T5, T6, DESCRIPTION, ANNOTATION) \
01046 pl_signal_16(NAME, T0, T1, T2, T3, T4, T5, T6, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01047
01048 #define pl_signal_6(NAME, T0, T1, T2, T3, T4, T5, DESCRIPTION, ANNOTATION) \
01049 pl_signal_16(NAME, T0, T1, T2, T3, T4, T5, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01050
01051 #define pl_signal_5(NAME, T0, T1, T2, T3, T4, DESCRIPTION, ANNOTATION) \
01052 pl_signal_16(NAME, T0, T1, T2, T3, T4, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01053
01054 #define pl_signal_4(NAME, T0, T1, T2, T3, DESCRIPTION, ANNOTATION) \
01055 pl_signal_16(NAME, T0, T1, T2, T3, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01056
01057 #define pl_signal_3(NAME, T0, T1, T2, DESCRIPTION, ANNOTATION) \
01058 pl_signal_16(NAME, T0, T1, T2, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01059
01060 #define pl_signal_2(NAME, T0, T1, DESCRIPTION, ANNOTATION) \
01061 pl_signal_16(NAME, T0, T1, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01062
01063 #define pl_signal_1(NAME, T0, DESCRIPTION, ANNOTATION) \
01064 pl_signal_16(NAME, T0, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01065
01066 #define pl_signal_0(NAME, DESCRIPTION, ANNOTATION) \
01067 pl_signal_16(NAME, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01068
01069
01070
01071
01072
01073
01074
01075
01076
01077
01078
01079
01080
01081
01082 #define pl_slot_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, DESCRIPTION, ANNOTATION) \
01083 __pl_slot_desc(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, DESCRIPTION, ANNOTATION) \
01084 __pl_slot_evth(NAME) \
01085 __pl_slot_decl(NAME) \
01086
01087 #define pl_slot_15(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, DESCRIPTION, ANNOTATION) \
01088 pl_slot_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, PLCore::NullType, DESCRIPTION, ANNOTATION)
01089
01090 #define pl_slot_14(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, DESCRIPTION, ANNOTATION) \
01091 pl_slot_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01092
01093 #define pl_slot_13(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, DESCRIPTION, ANNOTATION) \
01094 pl_slot_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01095
01096 #define pl_slot_12(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, DESCRIPTION, ANNOTATION) \
01097 pl_slot_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01098
01099 #define pl_slot_11(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, DESCRIPTION, ANNOTATION) \
01100 pl_slot_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01101
01102 #define pl_slot_10(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, DESCRIPTION, ANNOTATION) \
01103 pl_slot_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01104
01105 #define pl_slot_9(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, DESCRIPTION, ANNOTATION) \
01106 pl_slot_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01107
01108 #define pl_slot_8(NAME, T0, T1, T2, T3, T4, T5, T6, T7, DESCRIPTION, ANNOTATION) \
01109 pl_slot_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01110
01111 #define pl_slot_7(NAME, T0, T1, T2, T3, T4, T5, T6, DESCRIPTION, ANNOTATION) \
01112 pl_slot_16(NAME, T0, T1, T2, T3, T4, T5, T6, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01113
01114 #define pl_slot_6(NAME, T0, T1, T2, T3, T4, T5, DESCRIPTION, ANNOTATION) \
01115 pl_slot_16(NAME, T0, T1, T2, T3, T4, T5, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01116
01117 #define pl_slot_5(NAME, T0, T1, T2, T3, T4, DESCRIPTION, ANNOTATION) \
01118 pl_slot_16(NAME, T0, T1, T2, T3, T4, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01119
01120 #define pl_slot_4(NAME, T0, T1, T2, T3, DESCRIPTION, ANNOTATION) \
01121 pl_slot_16(NAME, T0, T1, T2, T3, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01122
01123 #define pl_slot_3(NAME, T0, T1, T2, DESCRIPTION, ANNOTATION) \
01124 pl_slot_16(NAME, T0, T1, T2, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01125
01126 #define pl_slot_2(NAME, T0, T1, DESCRIPTION, ANNOTATION) \
01127 pl_slot_16(NAME, T0, T1, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01128
01129 #define pl_slot_1(NAME, T0, DESCRIPTION, ANNOTATION) \
01130 pl_slot_16(NAME, T0, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01131
01132 #define pl_slot_0(NAME, DESCRIPTION, ANNOTATION) \
01133 pl_slot_16(NAME, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01134
01135
01136
01137
01138
01139
01140
01141
01142
01143
01144
01145
01146
01147
01148 #define pl_constructor_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, DESCRIPTION, ANNOTATION) \
01149 __pl_constructor_desc(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, DESCRIPTION, ANNOTATION) \
01150 __pl_constructor_cons(NAME) \
01151
01152 #define pl_constructor_15(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, DESCRIPTION, ANNOTATION) \
01153 pl_constructor_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, PLCore::NullType, DESCRIPTION, ANNOTATION)
01154
01155 #define pl_constructor_14(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, DESCRIPTION, ANNOTATION) \
01156 pl_constructor_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01157
01158 #define pl_constructor_13(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, DESCRIPTION, ANNOTATION) \
01159 pl_constructor_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01160
01161 #define pl_constructor_12(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, DESCRIPTION, ANNOTATION) \
01162 pl_constructor_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01163
01164 #define pl_constructor_11(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, DESCRIPTION, ANNOTATION) \
01165 pl_constructor_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01166
01167 #define pl_constructor_10(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, DESCRIPTION, ANNOTATION) \
01168 pl_constructor_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01169
01170 #define pl_constructor_9(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, DESCRIPTION, ANNOTATION) \
01171 pl_constructor_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, T8, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01172
01173 #define pl_constructor_8(NAME, T0, T1, T2, T3, T4, T5, T6, T7, DESCRIPTION, ANNOTATION) \
01174 pl_constructor_16(NAME, T0, T1, T2, T3, T4, T5, T6, T7, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01175
01176 #define pl_constructor_7(NAME, T0, T1, T2, T3, T4, T5, T6, DESCRIPTION, ANNOTATION) \
01177 pl_constructor_16(NAME, T0, T1, T2, T3, T4, T5, T6, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01178
01179 #define pl_constructor_6(NAME, T0, T1, T2, T3, T4, T5, DESCRIPTION, ANNOTATION) \
01180 pl_constructor_16(NAME, T0, T1, T2, T3, T4, T5, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01181
01182 #define pl_constructor_5(NAME, T0, T1, T2, T3, T4, DESCRIPTION, ANNOTATION) \
01183 pl_constructor_16(NAME, T0, T1, T2, T3, T4, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01184
01185 #define pl_constructor_4(NAME, T0, T1, T2, T3, DESCRIPTION, ANNOTATION) \
01186 pl_constructor_16(NAME, T0, T1, T2, T3, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01187
01188 #define pl_constructor_3(NAME, T0, T1, T2, DESCRIPTION, ANNOTATION) \
01189 pl_constructor_16(NAME, T0, T1, T2, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01190
01191 #define pl_constructor_2(NAME, T0, T1, DESCRIPTION, ANNOTATION) \
01192 pl_constructor_16(NAME, T0, T1, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01193
01194 #define pl_constructor_1(NAME, T0, DESCRIPTION, ANNOTATION) \
01195 pl_constructor_16(NAME, T0, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01196
01197 #define pl_constructor_0(NAME, DESCRIPTION, ANNOTATION) \
01198 pl_constructor_16(NAME, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, PLCore::NullType, DESCRIPTION, ANNOTATION)
01199
01200
01201
01202
01203
01204
01205
01206
01207
01208
01209
01210
01211 #define pl_ret_type(RET) RET
01212
01213
01214
01215
01216
01217 #define pl_class_end
01218
01219
01220
01221
01222
01223
01224
01225
01226 #define pl_implement_class(CLASS) \
01227 __pl_class_impl(CLASS) \
01228
01229
01230
01231
01232
01233 }
01234
01235
01236 #endif // __PLCORE_RTTI_H__