MemberTemplateName.h

Go to the documentation of this file.
00001 // @(#)root/reflex:$Id: MemberTemplateName.h 29288 2009-07-01 13:03:35Z axel $
00002 // Author: Stefan Roiser 2004
00003 
00004 // Copyright CERN, CH-1211 Geneva 23, 2004-2006, 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_MemberTemplateName
00013 #define Reflex_MemberTemplateName
00014 
00015 // Include files
00016 #include "Reflex/Kernel.h"
00017 
00018 
00019 namespace Reflex {
00020 // forward declarations
00021 class MemberTemplate;
00022 class MemberTemplateImpl;
00023 
00024 /**
00025  * @class MemberTemplateName MemberTemplateName.h Reflex/internal/MemberTemplateName.h
00026  * @author Stefan Roiser
00027  * @date 8/8/2006
00028  * @ingroup Ref
00029  */
00030 class RFLX_API MemberTemplateName {
00031    friend class MemberTemplate;
00032    friend class MemberTemplateImpl;
00033 
00034 public:
00035    /** constructor */
00036    MemberTemplateName(const char* name,
00037                       MemberTemplateImpl * memberTemplImpl);
00038 
00039 
00040    /**
00041     * ByName will return a member template corresponding to the argument name
00042     * @param member template name to lookup
00043     * @param nTemplateParams looks up the template family with this number of template parameters
00044     *        if it is set to 0, the first occurence of the template family name will be returned
00045     * @return corresponding member template to name
00046     */
00047    static MemberTemplate ByName(const std::string& name,
00048                                 size_t nTemplateParams = 0);
00049 
00050 
00051    /**
00052     * CleanUp is called at the end of the process
00053     */
00054    static void CleanUp();
00055 
00056 
00057    /*
00058     * DeleteMemberTemplate will remove the dictionary information
00059     * of one member template from memory
00060     */
00061    void DeleteMemberTemplate() const;
00062 
00063 
00064    /**
00065     * Name will return the name of the member template
00066     * @return name of member template
00067     */
00068    std::string Name(unsigned int mod) const;
00069 
00070 
00071    /**
00072     * Name_c_str will return a char * pointer to the member template name
00073     * @return member template name as char *
00074     */
00075    const char* Name_c_str() const;
00076 
00077 
00078    /**
00079     * ThisMemberTemplate will return the MemberTemplate API class of this member template
00080     * @return API member template class
00081     */
00082    MemberTemplate ThisMemberTemplate() const;
00083 
00084 
00085    /**
00086     * MemberTemplateAt will return the nth member template defined
00087     * @param nth member template
00088     * @return nth member template
00089     */
00090    static MemberTemplate MemberTemplateAt(size_t nth);
00091 
00092 
00093    /**
00094     * MemberTemplateSize will return the number of member templates defined
00095     * @return number of defined member templates
00096     */
00097    static size_t MemberTemplateSize();
00098 
00099 
00100    /**
00101     * MemberTemplate_Begin returns the begin iterator of the member template container
00102     * @return begin iterator of member template container
00103     */
00104    static MemberTemplate_Iterator MemberTemplate_Begin();
00105 
00106 
00107    /**
00108     * MemberTemplate_End returns the end iterator of the member template container
00109     * @return end iterator of member template container
00110     */
00111    static MemberTemplate_Iterator MemberTemplate_End();
00112 
00113 
00114    /**
00115     * MemberTemplate_Rbegin returns the rbegin iterator of the member template container
00116     * @return rbegin iterator of member template container
00117     */
00118    static Reverse_MemberTemplate_Iterator MemberTemplate_RBegin();
00119 
00120 
00121    /**
00122     * MemberTemplate_Rend returns the rend iterator of the member template container
00123     * @return rend iterator of member template container
00124     */
00125    static Reverse_MemberTemplate_Iterator MemberTemplate_REnd();
00126 
00127 private:
00128    /** destructor */
00129    ~MemberTemplateName();
00130 
00131 private:
00132    /**
00133     * The name of the member template
00134     */
00135    std::string fName;
00136 
00137 
00138    /**
00139     * Pointer to the implementation of the member template
00140     * @link aggregation
00141     * @supplierCardinality 1
00142     * @clientCardinality 0..1
00143     * @label member template impl
00144     */
00145    mutable
00146    MemberTemplateImpl * fMemberTemplateImpl;
00147 
00148 
00149    /**
00150     * pointer back to the member temlate
00151     * @label this member template
00152     * @link aggregation
00153     * @clientCardinality 1
00154     * @supplierCardinality 1
00155     */
00156    MemberTemplate* fThisMemberTemplate;
00157 
00158 };    // class MemberTemplate
00159 } // namespace Reflex
00160 
00161 
00162 //-------------------------------------------------------------------------------
00163 inline const char*
00164 Reflex::MemberTemplateName::Name_c_str() const {
00165 //-------------------------------------------------------------------------------
00166    return fName.c_str();
00167 }
00168 
00169 
00170 #endif // Reflex_MemberTemplateName

Generated on Tue Jul 5 14:25:52 2011 for ROOT_528-00b_version by  doxygen 1.5.1