OBTConfigurationItem.h

Go to the documentation of this file.
00001 #ifndef OBTConfigurationItem_H
00002 #define OBTConfigurationItem_H
00003 
00004 #include <vector>
00005 #include <map>
00006 #include <string>
00007 #include "OBT_ASSERT.h"
00008 
00009 namespace OBT
00010 {
00021         class OBT_API ConfigurationItem
00022         {
00023         public:
00024 
00025                 friend class AbstractConfigurationFileParser ;
00026 
00030                 ConfigurationItem( const char* name ) ;
00031 
00035                 virtual ~ConfigurationItem() ;
00036 
00041                 const char* getName() const ;
00042 
00049                 const ConfigurationItem& getChild( unsigned int childNumber ) const ;
00050 
00056                 std::vector<const ConfigurationItem*> getChildren( const char* name ) const ;
00057 
00062                 void addChild( const ConfigurationItem& child ) ;
00063 
00068                 unsigned int getChildrenCount() const ;
00069 
00075                 const char* getArgument( const char* key ) const ;
00076 
00082                 std::pair< const char*, const char* >  getArgument( unsigned int argument ) const ;
00083 
00089                 void addArgument( const char* key, const char* value ) ;
00090 
00095                 unsigned int getArgumentsCount() const ;
00096 
00101                 std::string traceConfigurationItems() const ;
00102 
00103         private:
00104 
00110                 ConfigurationItem& touchChild( unsigned int childNumber ) ;
00111 
00117                 std::vector<ConfigurationItem*> touchChildren( const char* name ) ;
00118 
00120                 std::string _name ;
00122                 std::map<std::string, std::string> _arguments ;
00124                 std::vector<ConfigurationItem> _children ;
00125         } ;
00126 
00127         //-------------------------------------------------------------------------
00128         // getName()
00129         //-------------------------------------------------------------------------
00130         inline const char* 
00131                 ConfigurationItem::getName() const
00132         {
00133                 return _name.c_str() ;
00134         }
00135 
00136         //-------------------------------------------------------------------------
00137         // getChild()
00138         //-------------------------------------------------------------------------
00139         inline const ConfigurationItem& 
00140                 ConfigurationItem::getChild( unsigned int childNumber ) const
00141         {
00142                 return _children.at( childNumber ) ;
00143         }
00144 
00145         //-------------------------------------------------------------------------
00146         // touchChild()
00147         //-------------------------------------------------------------------------
00148         inline ConfigurationItem& 
00149                 ConfigurationItem::touchChild( unsigned int childNumber )
00150         {
00151                 return _children.at( childNumber ) ;
00152         }
00153 
00154         //-------------------------------------------------------------------------
00155         // addChild()
00156         //-------------------------------------------------------------------------
00157         inline void 
00158                 ConfigurationItem::addChild( const ConfigurationItem& child )
00159         {
00160                 _children.push_back( child ) ;
00161         }
00162 
00163         //-------------------------------------------------------------------------
00164         // GetChildCount()
00165         //-------------------------------------------------------------------------
00166         inline unsigned int 
00167                 ConfigurationItem::getChildrenCount() const
00168         {
00169                 return static_cast<unsigned int>( _children.size() ) ;
00170         }
00171 
00172         //-------------------------------------------------------------------------
00173         // getArgument()
00174         //-------------------------------------------------------------------------
00175         inline const char* 
00176                 ConfigurationItem::getArgument( const char* key ) const
00177         {
00178                 std::map<std::string, std::string>::const_iterator ite( _arguments.find( key ) ) ;
00179                 if ( ite != _arguments.end() )
00180                 {
00181                         return ite->second.c_str() ;
00182                 }
00183                 else
00184                 {
00185                         return NULL ;
00186                 }
00187         }
00188 
00189         //-------------------------------------------------------------------------
00190         // getArgumentsCount
00191         //-------------------------------------------------------------------------
00192         inline
00193                 unsigned int ConfigurationItem::getArgumentsCount() const 
00194         {
00195                 return static_cast< unsigned int >( _arguments.size( ) ) ;
00196         }
00197 
00198         //-------------------------------------------------------------------------
00199         // getArgument
00200         //-------------------------------------------------------------------------
00201         inline
00202                 std::pair< const char*, const char* > ConfigurationItem::getArgument( unsigned int argument ) const 
00203         {
00204                 std::map<std::string, std::string>::const_iterator ite( _arguments.begin() ) ;
00205                 for ( ; argument != 0; --argument )
00206                 {
00207                         ++ite ;
00208                 }
00209                 return std::pair< const char*, const char* >( ite->first.c_str(), ite->second.c_str() ) ;
00210         }
00211 
00212         //-------------------------------------------------------------------------
00213         // addArgument()
00214         //-------------------------------------------------------------------------
00215         inline void 
00216                 ConfigurationItem::addArgument( const char* key, const char* value )
00217         {
00218                 _arguments.insert( std::make_pair( key, value ) ) ;
00219         }
00220 }
00221 #endif //header

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