VariableBuilder.h

Go to the documentation of this file.
00001 // @(#)root/reflex:$Id: VariableBuilder.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_VariableBuilder
00013 #define Reflex_VariableBuilder
00014 
00015 // Include files
00016 #include "Reflex/Reflex.h"
00017 #include "Reflex/Builder/TypeBuilder.h"
00018 
00019 
00020 namespace Reflex {
00021 // forward declarations
00022 
00023 /** @class VariableBuilder VariableBuilder.h Reflex/Builder/VariableBuilder.h
00024  *  @author Stefan Roiser
00025  *  @date 6/4/2005
00026  *  @ingroup RefBld
00027  */
00028 class RFLX_API VariableBuilder {
00029 public:
00030    /** constructor */
00031    VariableBuilder(const char* nam,
00032                    const Type &typ,
00033                    size_t offs,
00034                    unsigned int modifiers = 0);
00035 
00036 
00037    /** destructor */
00038    virtual ~VariableBuilder();
00039 
00040 
00041    /**
00042     * AddProperty will add a property
00043     * @param  key the property key
00044     * @param  value the value of the property
00045     * @return a reference to the building class
00046     */
00047    VariableBuilder& AddProperty(const char* key,
00048                                 Any value);
00049    VariableBuilder& AddProperty(const char* key,
00050                                 const char* value);
00051 
00052 
00053    /**
00054     * ToMember will return the member currently being built
00055     * @return member currently being built
00056     */
00057    Member ToMember();
00058 
00059 private:
00060    /** function member */
00061    Member fDataMember;
00062 
00063 };    // class VariableBuilder
00064 
00065 
00066 /**
00067  * @class VariableBuilderImpl VariableBuilder.h Reflex/Builder/VariableBuilder.h
00068  * @author Stefan Roiser
00069  * @date 6/4/2005
00070  * @ingroup RefBld
00071  */
00072 class RFLX_API VariableBuilderImpl {
00073 public:
00074    /** constructor */
00075    VariableBuilderImpl(const char* nam,
00076                        const Type &typ,
00077                        size_t offs,
00078                        unsigned int modifiers = 0);
00079 
00080 
00081    /** destructor */
00082    ~VariableBuilderImpl();
00083 
00084 
00085    /** AddProperty will add a property
00086     * @param  key the property key
00087     * @param  value the value of the property
00088     * @return a reference to the building class
00089     */
00090    void AddProperty(const char* key,
00091                     Any value);
00092    void AddProperty(const char* key,
00093                     const char* value);
00094 
00095 
00096    /**
00097     * ToMember will return the member currently being built
00098     * @return member currently being built
00099     */
00100    Member ToMember();
00101 
00102 private:
00103    /** member being built */
00104    Member fDataMember;
00105 
00106 };    // class VariableBuilderImpl
00107 
00108 
00109 /**
00110  * @class VariableBuilderT VariableBuilder.h Reflex/Builder/VariableBuilder.h
00111  * @author Stefan Roiser
00112  * @date 6/4/2005
00113  * @ingroup RefBld
00114  */
00115 template <typename D> class VariableBuilderT {
00116 public:
00117    /** constructor */
00118    VariableBuilderT(const char* nam,
00119                     size_t offs,
00120                     unsigned int modifiers = 0);
00121 
00122 
00123    /** destructor */
00124    virtual ~VariableBuilderT() {}
00125 
00126 
00127    /**
00128     * AddProperty will add a property
00129     * @param  key the property key
00130     * @param  value the value of the property
00131     * @return a reference to the building class
00132     */
00133    template <typename P>
00134    VariableBuilderT& AddProperty(const char* key,
00135                                  P value);
00136 
00137 
00138    /**
00139     * ToMember will return the member currently being built
00140     * @return member currently being built
00141     */
00142    Member ToMember();
00143 
00144 private:
00145    /** data member builder implementation */
00146    VariableBuilderImpl fDataMemberBuilderImpl;
00147 
00148 };    // class VariableBuilderT
00149 
00150 
00151 } // namespace Reflex
00152 
00153 
00154 //-------------------------------------------------------------------------------
00155 template <typename D>
00156 inline Reflex::VariableBuilderT<D>::VariableBuilderT(const char* nam,
00157                                                      size_t offs,
00158                                                      unsigned int modifiers)
00159 //-------------------------------------------------------------------------------
00160    : fDataMemberBuilderImpl(nam,
00161                             TypeDistiller<D>::Get(),
00162                             offs,
00163                             modifiers) {
00164 }
00165 
00166 
00167 //-------------------------------------------------------------------------------
00168 template <typename D> template <typename P>
00169 inline Reflex::VariableBuilderT<D>&
00170 Reflex::VariableBuilderT<D
00171 >::AddProperty(const char* key,
00172                P value) {
00173 //-------------------------------------------------------------------------------
00174    fDataMemberBuilderImpl.AddProperty(key, value);
00175    return *this;
00176 }
00177 
00178 
00179 //-------------------------------------------------------------------------------
00180 template <typename D> inline Reflex::Member
00181 Reflex::VariableBuilderT<D
00182 >::ToMember() {
00183 //-------------------------------------------------------------------------------
00184    return fDataMemberBuilderImpl.ToMember();
00185 }
00186 
00187 
00188 #endif // Reflex_VariableBuilder

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