OBTAbstractAttribute.h

Go to the documentation of this file.
00001 #ifndef OBTAbstractAttribute_H
00002 #define OBTAbstractAttribute_H
00003 
00004 #include <string>
00005 #include "OBT.h"
00006 
00007 namespace OBT
00008 {
00009         class RTTI ;
00010 
00020         class OBT_API AbstractAttribute
00021         {
00022         public:
00023 
00027                 virtual ~AbstractAttribute() ;
00028 
00033                 const char* getName() const;
00034 
00039                 virtual bool isReadOnly() const = 0 ;
00040 
00045                 virtual const RTTI& getOwnerRTTI() const = 0 ;
00046 
00051                 virtual const RTTI& getRTTI() const ;
00052 
00057                 static const RTTI& getClassRTTI() ;
00058 
00059         protected:
00060 
00065                 AbstractAttribute( const char* name ) ;
00066 
00067         private:
00068 
00075                 static void initRTTI() ;
00076 
00080                 static void destroyRTTI() ;
00081 
00083                 static RTTI* _rtti ;
00084 
00086                 std::string _name ;     
00087         } ;
00088 
00089         //-------------------------------------------------------------------------
00090         // getName
00091         //-------------------------------------------------------------------------
00092         inline const char*
00093                 AbstractAttribute::getName( ) const
00094         {
00095                 return _name.c_str() ;
00096         }
00097 
00098         //-------------------------------------------------------------------------
00099         // getAttributeValue
00100         //-------------------------------------------------------------------------
00101         template < class TAttribute >
00102         inline typename TAttribute::value_type
00103                 getAttributeValue( const typename TAttribute::owner_type& owner, unsigned int attributeNumber )
00104         {          
00105                 return ( owner.getRTTI().template getAttribute< TAttribute >( attributeNumber )->getValue( owner ) ) ;
00106         }
00107 
00108         //-------------------------------------------------------------------------
00109         // getAttributeValue
00110         //-------------------------------------------------------------------------
00111         template < class TAttribute >
00112         inline typename TAttribute::value_type
00113                 getAttributeValue( const typename TAttribute::owner_type& owner, const char* name )
00114         {
00115                 return ( owner.getRTTI().template getAttribute< TAttribute >( name )->getValue( owner ) ) ;
00116         }
00117 
00118         //-------------------------------------------------------------------------
00119         // setAttributeValue
00120         //-------------------------------------------------------------------------
00121         template < class TAttribute >
00122         inline void
00123                 setAttributeValue( typename TAttribute::owner_type& owner, unsigned int attributeNumber, typename TAttribute::value_type value )
00124         {
00125                 owner.getRTTI().template getAttribute< TAttribute >( attributeNumber )->setValue( owner, value ) ;
00126         }
00127 
00128         //-------------------------------------------------------------------------
00129         // setAttributeValue
00130         //-------------------------------------------------------------------------
00131         template < class TAttribute >
00132         inline void
00133                 setAttributeValue( typename TAttribute::owner_type& owner, const char* name, typename TAttribute::value_type value )
00134         {
00135                 owner.getRTTI().template getAttribute< TAttribute >( name )->setValue( owner, value ) ;
00136         }
00137 }
00138 #endif //header

Generated on Wed Oct 1 11:34:04 2008 for OBT by  doxygen 1.5.3