#ifndef ROOT_Reflex_FunctionBuilder
#define ROOT_Reflex_FunctionBuilder
#include "Reflex/Reflex.h"
namespace ROOT {
   namespace Reflex {
  
      
      class FunctionMember;
      class Type;
      
      class RFLX_API FunctionBuilder {
      public:    
         
         FunctionBuilder( const Type & typ,
                          const char * nam,
                          StubFunction stubFP,
                          void * stubCtx,
                          const char * params, 
                          unsigned char modifiers );
      
         
         virtual ~FunctionBuilder();
         
         FunctionBuilder & AddProperty( const char * key, 
                                        Any value );
         FunctionBuilder & AddProperty( const char * key,
                                        const char * value );
         
         Member ToMember();
      private:
         
         Member fFunction;
      }; 
    
      
      class RFLX_API FunctionBuilderImpl {
    
      public:
      
         
         FunctionBuilderImpl( const char * nam, 
                              const Type & typ,
                              StubFunction stubFP,
                              void * stubCtx,
                              const char * params, 
                              unsigned char modifiers = 0 );
                          
         
         ~FunctionBuilderImpl();
         
         void AddProperty( const char * key, 
                           Any value );
         void AddProperty( const char * key, 
                           const char * value );
         
         Member ToMember();
      private:
         
         Member fFunction;
      }; 
      
      template < typename F > class FunctionBuilderT {
      public:    
         
         FunctionBuilderT( const char * nam,
                           StubFunction stubFP,
                           void * stubCtx,
                           const char * params, 
                           unsigned char modifiers );
      
         
         virtual ~FunctionBuilderT() {}
      
         
         template < typename P >
            FunctionBuilderT & AddProperty( const char * key, P value );
         
         Member ToMember();
      private:
         
         FunctionBuilderImpl fFunctionBuilderImpl;
      }; 
   } 
} 
#include "Reflex/Builder/TypeBuilder.h"
template < typename  F > 
inline ROOT::Reflex::FunctionBuilderT<F>::FunctionBuilderT( const char * nam, 
                                                            StubFunction stubFP,
                                                            void * stubCtx,
                                                            const char * params, 
                                                            unsigned char modifiers )
   : fFunctionBuilderImpl( nam,
                           FunctionDistiller<F>::Get(),
                           stubFP,
                           stubCtx,
                           params,
                           modifiers ) { }
      
template <  typename F > template < typename P >
inline ROOT::Reflex::FunctionBuilderT<F> & 
ROOT::Reflex::FunctionBuilderT<F>::AddProperty( const char * key, 
                                                P value )
{ 
   fFunctionBuilderImpl.AddProperty(key , value);
   return * this;
}
template < typename F > inline ROOT::Reflex::Member
ROOT::Reflex::FunctionBuilderT<F>::ToMember() {
   return fFunctionBuilderImpl.ToMember();
}
#endif // ROOT_Reflex_FunctionBuilder
Last update: Thu Jan 17 08:42:45 2008
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.