00001 // @(#)root/reflex:$Id: MemberBase.h 36289 2010-10-11 09:54:28Z axel $ 00002 // Author: Stefan Roiser 2004 00003 00004 // Copyright CERN, CH-1211 Geneva 23, 2004-2010, All rights reserved. 00005 // 00006 // Permission to use, copy, modify, and distribute this software for any 00007 // purpose is hereby granted without fee, provided that this copyright and 00008 // permissions notice appear in all copies and derivatives. 00009 // 00010 // This software is provided "as is" without express or implied warranty. 00011 00012 #ifndef Reflex_MemberBase 00013 #define Reflex_MemberBase 00014 00015 // Include files 00016 #include "Reflex/Kernel.h" 00017 #include "Reflex/PropertyList.h" 00018 #include "Reflex/Type.h" 00019 #include "Reflex/Scope.h" 00020 #include "Reflex/internal/LiteralString.h" 00021 00022 namespace Reflex { 00023 // forward declarations 00024 class Object; 00025 class DictionaryGenerator; 00026 00027 /** 00028 * @class MemberBase MemberBase.h Reflex/internal/MemberBase.h 00029 * @author Stefan Roiser 00030 * @date 24/11/2003 00031 * @ingroup Ref 00032 */ 00033 class RFLX_API MemberBase { 00034 public: 00035 /** default constructor */ 00036 MemberBase(const char* name, 00037 const Type &type, 00038 TYPE memberType, 00039 unsigned int modifiers); 00040 00041 00042 /** destructor */ 00043 virtual ~MemberBase(); 00044 00045 00046 /** 00047 * operator member will return the member object of this MemberBase 00048 */ 00049 operator Member() const; 00050 00051 00052 /** 00053 * DeclaringScope will return the scope which the member lives in 00054 * @return the declaring scope of the member 00055 */ 00056 Scope DeclaringScope() const; 00057 00058 00059 /** 00060 * DeclaringType will return the type which the member lives in 00061 * @return the declaring type of the member 00062 */ 00063 Type DeclaringType() const; 00064 00065 00066 /** 00067 * GenerateDict will produce the dictionary information of this type 00068 * @param generator a reference to the dictionary generator instance 00069 */ 00070 virtual void GenerateDict(DictionaryGenerator& generator) const; 00071 00072 00073 /** Get the member value */ 00074 virtual Object Get(const Object& obj) const; 00075 00076 00077 /** Invoke the member function */ 00078 00079 /*virtual Object Invoke( const Object & obj, 00080 const std::vector < Object > & paramList ) const;*/ 00081 virtual void Invoke(const Object& obj, 00082 Object* ret, 00083 const std::vector<void*>& paramList = 00084 std::vector<void*>()) const; 00085 00086 00087 /** Invoke the function (for static functions) */ 00088 //virtual Object Invoke( const std::vector < Object > & paramList ) const; 00089 virtual void Invoke(Object* ret, 00090 const std::vector<void*>& paramList = 00091 std::vector<void*>()) const; 00092 00093 00094 /** check whether abstract is set for the data member */ 00095 bool IsAbstract() const; 00096 00097 00098 /** check whether artificial is set for the data member */ 00099 bool IsArtificial() const; 00100 00101 /** check whether auto is set for the data member */ 00102 bool IsAuto() const; 00103 00104 00105 /** check whether the function member is a constructor */ 00106 bool IsConstructor() const; 00107 00108 00109 /** check whether a member is const qualified */ 00110 bool IsConst() const; 00111 00112 00113 /** check whether the function member is a user defined conversion function */ 00114 bool IsConverter() const; 00115 00116 00117 /** check whether the function member is a copy constructor */ 00118 bool IsCopyConstructor() const; 00119 00120 00121 /** return true if this is a data member */ 00122 bool IsDataMember() const; 00123 00124 00125 /** check whether the function member is a destructor */ 00126 bool IsDestructor() const; 00127 00128 00129 /** check whether explicit is set for the function member */ 00130 bool IsExplicit() const; 00131 00132 00133 /** check whether extern is set for the data member */ 00134 bool IsExtern() const; 00135 00136 00137 /** return true if this is a function member */ 00138 bool IsFunctionMember() const; 00139 00140 00141 /** check whether inline is set for the function member */ 00142 bool IsInline() const; 00143 00144 00145 /** check whether mutable is set for the data member */ 00146 bool IsMutable() const; 00147 00148 00149 /** check whether the function member is an operator */ 00150 bool IsOperator() const; 00151 00152 00153 /** check whether the function member is private */ 00154 bool IsPrivate() const; 00155 00156 00157 /** check whether the function member is protected */ 00158 bool IsProtected() const; 00159 00160 00161 /** check whether the function member is public */ 00162 bool IsPublic() const; 00163 00164 00165 /** check whether register is set for the data member */ 00166 bool IsRegister() const; 00167 00168 00169 /** check whether static is set for the data member */ 00170 bool IsStatic() const; 00171 00172 00173 /** 00174 * IsTemplateInstance returns true if the type represents a 00175 * ClassTemplateInstance 00176 * @return true if type represents a InstantiatedTemplateClass 00177 */ 00178 bool IsTemplateInstance() const; 00179 00180 00181 /** check whether transient is set for the data member */ 00182 bool IsTransient() const; 00183 00184 00185 /** check whether virtual is set for the function member */ 00186 bool IsVirtual() const; 00187 00188 00189 /** check whether a member is volatile qualified */ 00190 bool IsVolatile() const; 00191 00192 00193 /** return the type of the member (function or data member) */ 00194 TYPE MemberType() const; 00195 00196 00197 /** returns the string representation of the member species */ 00198 std::string MemberTypeAsString() const; 00199 00200 00201 /** return the name of the member */ 00202 virtual std::string Name(unsigned int mod = 0) const; 00203 00204 /** 00205 * Name_c_str returns a char* pointer to the unqualified Name 00206 * @ return c string to unqualified Name 00207 */ 00208 const char* Name_c_str() const; 00209 00210 00211 /** return the offset of the member */ 00212 virtual size_t Offset() const; 00213 virtual void InterpreterOffset(char*); 00214 virtual char*& InterpreterOffset() const; 00215 00216 00217 /** number of parameters */ 00218 virtual size_t FunctionParameterSize(bool required = false) const; 00219 00220 00221 /** FunctionParameterDefaultAt returns the nth default value if declared*/ 00222 virtual std::string FunctionParameterDefaultAt(size_t nth) const; 00223 00224 00225 virtual StdString_Iterator FunctionParameterDefault_Begin() const; 00226 virtual StdString_Iterator FunctionParameterDefault_End() const; 00227 virtual Reverse_StdString_Iterator FunctionParameterDefault_RBegin() const; 00228 virtual Reverse_StdString_Iterator FunctionParameterDefault_REnd() const; 00229 00230 00231 /** FunctionParameterNameAt returns the nth name if declared*/ 00232 virtual std::string FunctionParameterNameAt(size_t nth) const; 00233 00234 00235 virtual StdString_Iterator FunctionParameterName_Begin() const; 00236 virtual StdString_Iterator FunctionParameterName_End() const; 00237 virtual Reverse_StdString_Iterator FunctionParameterName_RBegin() const; 00238 virtual Reverse_StdString_Iterator FunctionParameterName_REnd() const; 00239 00240 00241 /** 00242 * Properties will return a pointer to the property list attached 00243 * to this item 00244 * @return pointer to property list 00245 */ 00246 PropertyList Properties() const; 00247 00248 00249 /** Set the member value */ 00250 00251 /*virtual void Set( const Object & instance, 00252 const Object & value ) const;*/ 00253 virtual void Set(const Object& instance, 00254 const void* value) const; 00255 00256 00257 /** Set the type of the member */ 00258 void SetScope(const Scope& scope) const; 00259 00260 00261 /** return the context of the member */ 00262 virtual void* Stubcontext() const; 00263 00264 00265 /** return the pointer to the stub function */ 00266 virtual StubFunction Stubfunction() const; 00267 00268 00269 /** 00270 * TemplateArgumentAt will return a pointer to the nth template argument 00271 * @param nth nth template argument 00272 * @return pointer to nth template argument 00273 */ 00274 virtual Type TemplateArgumentAt(size_t nth) const; 00275 00276 00277 /** 00278 * TemplateArgumentSize will return the number of template arguments 00279 * @return number of template arguments 00280 */ 00281 virtual size_t TemplateArgumentSize() const; 00282 00283 00284 virtual Type_Iterator TemplateArgument_Begin() const; 00285 virtual Type_Iterator TemplateArgument_End() const; 00286 virtual Reverse_Type_Iterator TemplateArgument_RBegin() const; 00287 virtual Reverse_Type_Iterator TemplateArgument_REnd() const; 00288 00289 00290 /** 00291 * TemplateFamily returns the corresponding MemberTemplate if any 00292 * @return corresponding MemberTemplate 00293 */ 00294 virtual MemberTemplate TemplateFamily() const; 00295 00296 00297 /** return pointer to member type */ 00298 Type TypeOf() const; 00299 00300 00301 /** 00302 * UpdateFunctionParameterNames updates the names of parameters 00303 * @param parameters new list of ';' separated parameter names, must not specify default values 00304 */ 00305 virtual void UpdateFunctionParameterNames(const char* parameters); 00306 00307 protected: 00308 /** 00309 * CalculateBaseObject will calculate the inheritance between an object 00310 * and the local type if necessary 00311 * @param obj the object from which the calculation should start 00312 * @return memory address of new local object relative to obj 00313 */ 00314 void* CalculateBaseObject(const Object& obj) const; 00315 00316 protected: 00317 /** 00318 * characteristics of the Member 00319 * @label Member 00320 * @supplierCardinality 1 00321 * @link aggregation 00322 * @clientCardinality 1 00323 */ 00324 Type fType; 00325 00326 00327 /** all modifiers of the member */ 00328 unsigned int fModifiers; 00329 00330 private: 00331 /** name of member */ 00332 LiteralString fName; 00333 00334 00335 /** 00336 * scope of the member 00337 * @label member scope 00338 * @link aggregation 00339 * @supplierCardinality 1 00340 * @clientCardinality 1 00341 */ 00342 mutable 00343 Scope fScope; 00344 00345 00346 /** 00347 * the kind of member ( data/function-member) 00348 * @label member type 00349 * @link aggregation 00350 * @clientCardinality 1 00351 * @supplierCardinality 1 00352 */ 00353 TYPE fMemberType; 00354 00355 00356 /** 00357 * property list 00358 * @label propertylist 00359 * @link aggregationByValue 00360 * @clientCardinality 1 00361 * @supplierCardinality 0..1 00362 */ 00363 OwnedPropertyList fPropertyList; 00364 00365 00366 /** 00367 * pointer back to the member object 00368 * @label this member 00369 * @link aggregation 00370 * @supplierCardinality 1 00371 * @clientCardinality 1 00372 */ 00373 Member* fThisMember; 00374 00375 }; // class Member 00376 00377 } //namespace Reflex 00378 00379 #ifndef Reflex_Object 00380 #include "Reflex/Object.h" 00381 #endif 00382 #ifndef Reflex_MemberTemplate 00383 #include "Reflex/MemberTemplate.h" 00384 #endif 00385 00386 00387 //------------------------------------------------------------------------------- 00388 inline Reflex::Object 00389 Reflex::MemberBase::Get(const Object& /* obj */) const { 00390 //------------------------------------------------------------------------------- 00391 return Object(); 00392 } 00393 00394 00395 //------------------------------------------------------------------------------- 00396 //inline Reflex::Object 00397 //Reflex::MemberBase::Invoke( const Object & /* obj */ , 00398 // const std::vector < Object > & /* paramList */ ) const { 00399 //------------------------------------------------------------------------------- 00400 // return Object(); 00401 //} 00402 00403 00404 //------------------------------------------------------------------------------- 00405 inline void 00406 Reflex::MemberBase::Invoke(const Object& /* obj */, 00407 Object* /*ret*/, 00408 const std::vector<void*>& /* paramList */) const { 00409 //------------------------------------------------------------------------------- 00410 } 00411 00412 00413 //------------------------------------------------------------------------------- 00414 //inline Reflex::Object 00415 //Reflex::MemberBase::Invoke( const std::vector < Object > & /* paramList */ ) const { 00416 //------------------------------------------------------------------------------- 00417 // return Object(); 00418 //} 00419 00420 00421 //------------------------------------------------------------------------------- 00422 inline void 00423 Reflex::MemberBase::Invoke(Object* /*ret*/, 00424 const std::vector<void*>& /* paramList */) const { 00425 //------------------------------------------------------------------------------- 00426 } 00427 00428 00429 //------------------------------------------------------------------------------- 00430 inline bool 00431 Reflex::MemberBase::IsAbstract() const { 00432 //------------------------------------------------------------------------------- 00433 return 0 != (fModifiers & ABSTRACT); 00434 } 00435 00436 00437 //------------------------------------------------------------------------------- 00438 inline bool 00439 Reflex::MemberBase::IsArtificial() const { 00440 //------------------------------------------------------------------------------- 00441 return 0 != (fModifiers & ARTIFICIAL); 00442 } 00443 00444 00445 //------------------------------------------------------------------------------- 00446 inline bool 00447 Reflex::MemberBase::IsAuto() const { 00448 //------------------------------------------------------------------------------- 00449 return 0 != (fModifiers & AUTO); 00450 } 00451 00452 00453 //------------------------------------------------------------------------------- 00454 inline bool 00455 Reflex::MemberBase::IsConstructor() const { 00456 //------------------------------------------------------------------------------- 00457 return 0 != (fModifiers & CONSTRUCTOR); 00458 } 00459 00460 00461 //------------------------------------------------------------------------------- 00462 inline bool 00463 Reflex::MemberBase::IsConst() const { 00464 //------------------------------------------------------------------------------- 00465 return 0 != (fModifiers & CONST); 00466 } 00467 00468 00469 //------------------------------------------------------------------------------- 00470 inline bool 00471 Reflex::MemberBase::IsConverter() const { 00472 //------------------------------------------------------------------------------- 00473 return 0 != (fModifiers & CONVERTER); 00474 } 00475 00476 00477 //------------------------------------------------------------------------------- 00478 inline bool 00479 Reflex::MemberBase::IsCopyConstructor() const { 00480 //------------------------------------------------------------------------------- 00481 return 0 != (fModifiers & COPYCONSTRUCTOR); 00482 } 00483 00484 00485 //------------------------------------------------------------------------------- 00486 inline bool 00487 Reflex::MemberBase::IsDataMember() const { 00488 //------------------------------------------------------------------------------- 00489 return fMemberType == DATAMEMBER; 00490 } 00491 00492 00493 //------------------------------------------------------------------------------- 00494 inline bool 00495 Reflex::MemberBase::IsDestructor() const { 00496 //------------------------------------------------------------------------------- 00497 return 0 != (fModifiers & DESTRUCTOR); 00498 } 00499 00500 00501 //------------------------------------------------------------------------------- 00502 inline bool 00503 Reflex::MemberBase::IsExplicit() const { 00504 //------------------------------------------------------------------------------- 00505 return 0 != (fModifiers & EXPLICIT); 00506 } 00507 00508 00509 //------------------------------------------------------------------------------- 00510 inline bool 00511 Reflex::MemberBase::IsExtern() const { 00512 //------------------------------------------------------------------------------- 00513 return 0 != (fModifiers & EXTERN); 00514 } 00515 00516 00517 //------------------------------------------------------------------------------- 00518 inline bool 00519 Reflex::MemberBase::IsFunctionMember() const { 00520 //------------------------------------------------------------------------------- 00521 return fMemberType == FUNCTIONMEMBER; 00522 } 00523 00524 00525 //------------------------------------------------------------------------------- 00526 inline bool 00527 Reflex::MemberBase::IsInline() const { 00528 //------------------------------------------------------------------------------- 00529 return 0 != (fModifiers & INLINE); 00530 } 00531 00532 00533 //------------------------------------------------------------------------------- 00534 inline bool 00535 Reflex::MemberBase::IsMutable() const { 00536 //------------------------------------------------------------------------------- 00537 return 0 != (fModifiers & MUTABLE); 00538 } 00539 00540 00541 //------------------------------------------------------------------------------- 00542 inline bool 00543 Reflex::MemberBase::IsOperator() const { 00544 //------------------------------------------------------------------------------- 00545 return 0 != (fModifiers & OPERATOR); 00546 } 00547 00548 00549 //------------------------------------------------------------------------------- 00550 inline bool 00551 Reflex::MemberBase::IsPrivate() const { 00552 //------------------------------------------------------------------------------- 00553 return 0 != (fModifiers & PRIVATE); 00554 } 00555 00556 00557 //------------------------------------------------------------------------------- 00558 inline bool 00559 Reflex::MemberBase::IsProtected() const { 00560 //------------------------------------------------------------------------------- 00561 return 0 != (fModifiers & PROTECTED); 00562 } 00563 00564 00565 //------------------------------------------------------------------------------- 00566 inline bool 00567 Reflex::MemberBase::IsPublic() const { 00568 //------------------------------------------------------------------------------- 00569 return 0 != (fModifiers & PUBLIC); 00570 } 00571 00572 00573 //------------------------------------------------------------------------------- 00574 inline bool 00575 Reflex::MemberBase::IsRegister() const { 00576 //------------------------------------------------------------------------------- 00577 return 0 != (fModifiers & REGISTER); 00578 } 00579 00580 00581 //------------------------------------------------------------------------------- 00582 inline bool 00583 Reflex::MemberBase::IsStatic() const { 00584 //------------------------------------------------------------------------------- 00585 return 0 != (fModifiers & STATIC); 00586 } 00587 00588 00589 //------------------------------------------------------------------------------- 00590 inline bool 00591 Reflex::MemberBase::IsTemplateInstance() const { 00592 //------------------------------------------------------------------------------- 00593 return fMemberType == MEMBERTEMPLATEINSTANCE; 00594 } 00595 00596 00597 //------------------------------------------------------------------------------- 00598 inline bool 00599 Reflex::MemberBase::IsTransient() const { 00600 //------------------------------------------------------------------------------- 00601 return 0 != (fModifiers & TRANSIENT); 00602 } 00603 00604 00605 //------------------------------------------------------------------------------- 00606 inline bool 00607 Reflex::MemberBase::IsVirtual() const { 00608 //------------------------------------------------------------------------------- 00609 return 0 != (fModifiers & VIRTUAL); 00610 } 00611 00612 00613 //------------------------------------------------------------------------------- 00614 inline bool 00615 Reflex::MemberBase::IsVolatile() const { 00616 //------------------------------------------------------------------------------- 00617 return 0 != (fModifiers & VOLATILE); 00618 } 00619 00620 00621 //------------------------------------------------------------------------------- 00622 inline Reflex::TYPE 00623 Reflex::MemberBase::MemberType() const { 00624 //------------------------------------------------------------------------------- 00625 return fMemberType; 00626 } 00627 00628 00629 //------------------------------------------------------------------------------- 00630 inline std::string 00631 Reflex::MemberBase::Name(unsigned int mod) const { 00632 //------------------------------------------------------------------------------- 00633 if (0 != (mod & (SCOPED | S))) { 00634 std::string s(DeclaringScope().Name(mod)); 00635 00636 if (!DeclaringScope().IsTopScope()) { 00637 s += "::"; 00638 } 00639 s += fName.c_str(); 00640 return s; 00641 } 00642 return fName.c_str(); 00643 } 00644 00645 00646 //------------------------------------------------------------------------------- 00647 inline const char* 00648 Reflex::MemberBase::Name_c_str() const { 00649 //------------------------------------------------------------------------------- 00650 return fName.c_str(); 00651 } 00652 00653 00654 //------------------------------------------------------------------------------- 00655 inline size_t 00656 Reflex::MemberBase::Offset() const { 00657 //------------------------------------------------------------------------------- 00658 return 0; 00659 } 00660 00661 00662 //------------------------------------------------------------------------------- 00663 inline void 00664 Reflex::MemberBase::InterpreterOffset(char*) { 00665 //------------------------------------------------------------------------------- 00666 } 00667 00668 00669 //------------------------------------------------------------------------------- 00670 inline char*& 00671 Reflex::MemberBase::InterpreterOffset() const { 00672 //------------------------------------------------------------------------------- 00673 static char* p = 0; 00674 return p; 00675 } 00676 00677 00678 //------------------------------------------------------------------------------- 00679 inline size_t 00680 Reflex::MemberBase::FunctionParameterSize(bool /* required */) const { 00681 //------------------------------------------------------------------------------- 00682 return 0; 00683 } 00684 00685 00686 //------------------------------------------------------------------------------- 00687 inline std::string 00688 Reflex::MemberBase::FunctionParameterDefaultAt(size_t /* nth */) const { 00689 //------------------------------------------------------------------------------- 00690 return ""; 00691 } 00692 00693 00694 //------------------------------------------------------------------------------- 00695 inline Reflex::StdString_Iterator 00696 Reflex::MemberBase::FunctionParameterDefault_Begin() const { 00697 //------------------------------------------------------------------------------- 00698 return Dummy::StdStringCont().begin(); 00699 } 00700 00701 00702 //------------------------------------------------------------------------------- 00703 inline Reflex::StdString_Iterator 00704 Reflex::MemberBase::FunctionParameterDefault_End() const { 00705 //------------------------------------------------------------------------------- 00706 return Dummy::StdStringCont().end(); 00707 } 00708 00709 00710 //------------------------------------------------------------------------------- 00711 inline Reflex::Reverse_StdString_Iterator 00712 Reflex::MemberBase::FunctionParameterDefault_RBegin() const { 00713 //------------------------------------------------------------------------------- 00714 return Dummy::StdStringCont().rbegin(); 00715 } 00716 00717 00718 //------------------------------------------------------------------------------- 00719 inline Reflex::Reverse_StdString_Iterator 00720 Reflex::MemberBase::FunctionParameterDefault_REnd() const { 00721 //------------------------------------------------------------------------------- 00722 return Dummy::StdStringCont().rend(); 00723 } 00724 00725 00726 //------------------------------------------------------------------------------- 00727 inline std::string 00728 Reflex::MemberBase::FunctionParameterNameAt(size_t /* nth */) const { 00729 //------------------------------------------------------------------------------- 00730 return ""; 00731 } 00732 00733 00734 //------------------------------------------------------------------------------- 00735 inline Reflex::StdString_Iterator 00736 Reflex::MemberBase::FunctionParameterName_Begin() const { 00737 //------------------------------------------------------------------------------- 00738 return Dummy::StdStringCont().begin(); 00739 } 00740 00741 00742 //------------------------------------------------------------------------------- 00743 inline Reflex::StdString_Iterator 00744 Reflex::MemberBase::FunctionParameterName_End() const { 00745 //------------------------------------------------------------------------------- 00746 return Dummy::StdStringCont().end(); 00747 } 00748 00749 00750 //------------------------------------------------------------------------------- 00751 inline Reflex::Reverse_StdString_Iterator 00752 Reflex::MemberBase::FunctionParameterName_RBegin() const { 00753 //------------------------------------------------------------------------------- 00754 return Dummy::StdStringCont().rbegin(); 00755 } 00756 00757 00758 //------------------------------------------------------------------------------- 00759 inline Reflex::Reverse_StdString_Iterator 00760 Reflex::MemberBase::FunctionParameterName_REnd() const { 00761 //------------------------------------------------------------------------------- 00762 return Dummy::StdStringCont().rend(); 00763 } 00764 00765 00766 //------------------------------------------------------------------------------- 00767 //inline void Reflex::MemberBase::Set( const Object & /* instance */, 00768 // const Object & /* value */ ) const {} 00769 //------------------------------------------------------------------------------- 00770 00771 00772 //------------------------------------------------------------------------------- 00773 inline void 00774 Reflex::MemberBase::Set(const Object& /* instance */, 00775 const void* /* value */) const {} 00776 00777 //------------------------------------------------------------------------------- 00778 00779 00780 //------------------------------------------------------------------------------- 00781 inline void 00782 Reflex::MemberBase::SetScope(const Scope& scope) const { 00783 //------------------------------------------------------------------------------- 00784 fScope = scope; 00785 } 00786 00787 00788 //------------------------------------------------------------------------------- 00789 inline void* 00790 Reflex::MemberBase::Stubcontext() const { 00791 //------------------------------------------------------------------------------- 00792 return 0; 00793 } 00794 00795 00796 //------------------------------------------------------------------------------- 00797 inline Reflex::StubFunction 00798 Reflex::MemberBase::Stubfunction() const { 00799 //------------------------------------------------------------------------------- 00800 return 0; 00801 } 00802 00803 00804 //------------------------------------------------------------------------------- 00805 inline size_t 00806 Reflex::MemberBase::TemplateArgumentSize() const { 00807 //------------------------------------------------------------------------------- 00808 return 0; 00809 } 00810 00811 00812 //------------------------------------------------------------------------------- 00813 inline Reflex::Type_Iterator 00814 Reflex::MemberBase::TemplateArgument_Begin() const { 00815 //------------------------------------------------------------------------------- 00816 return Dummy::TypeCont().begin(); 00817 } 00818 00819 00820 //------------------------------------------------------------------------------- 00821 inline Reflex::Type_Iterator 00822 Reflex::MemberBase::TemplateArgument_End() const { 00823 //------------------------------------------------------------------------------- 00824 return Dummy::TypeCont().end(); 00825 } 00826 00827 00828 //------------------------------------------------------------------------------- 00829 inline Reflex::Reverse_Type_Iterator 00830 Reflex::MemberBase::TemplateArgument_RBegin() const { 00831 //------------------------------------------------------------------------------- 00832 return Dummy::TypeCont().rbegin(); 00833 } 00834 00835 00836 //------------------------------------------------------------------------------- 00837 inline Reflex::Reverse_Type_Iterator 00838 Reflex::MemberBase::TemplateArgument_REnd() const { 00839 //------------------------------------------------------------------------------- 00840 return Dummy::TypeCont().rend(); 00841 } 00842 00843 00844 //------------------------------------------------------------------------------- 00845 inline Reflex::MemberTemplate 00846 Reflex::MemberBase::TemplateFamily() const { 00847 //------------------------------------------------------------------------------- 00848 return Dummy::MemberTemplate(); 00849 } 00850 00851 00852 //------------------------------------------------------------------------------- 00853 inline Reflex::Type 00854 Reflex::MemberBase::TypeOf() const { 00855 //------------------------------------------------------------------------------- 00856 return fType; 00857 } 00858 00859 00860 //------------------------------------------------------------------------------- 00861 inline void 00862 Reflex::MemberBase::UpdateFunctionParameterNames(const char* /*parameters*/) {} 00863 00864 //------------------------------------------------------------------------------- 00865 00866 00867 #endif // Reflex_MemberBase