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
00129
00130 inline const char*
00131 ConfigurationItem::getName() const
00132 {
00133 return _name.c_str() ;
00134 }
00135
00136
00137
00138
00139 inline const ConfigurationItem&
00140 ConfigurationItem::getChild( unsigned int childNumber ) const
00141 {
00142 return _children.at( childNumber ) ;
00143 }
00144
00145
00146
00147
00148 inline ConfigurationItem&
00149 ConfigurationItem::touchChild( unsigned int childNumber )
00150 {
00151 return _children.at( childNumber ) ;
00152 }
00153
00154
00155
00156
00157 inline void
00158 ConfigurationItem::addChild( const ConfigurationItem& child )
00159 {
00160 _children.push_back( child ) ;
00161 }
00162
00163
00164
00165
00166 inline unsigned int
00167 ConfigurationItem::getChildrenCount() const
00168 {
00169 return static_cast<unsigned int>( _children.size() ) ;
00170 }
00171
00172
00173
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
00191
00192 inline
00193 unsigned int ConfigurationItem::getArgumentsCount() const
00194 {
00195 return static_cast< unsigned int >( _arguments.size( ) ) ;
00196 }
00197
00198
00199
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
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