00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef __PROPERTYLIST_H__
00027 #define __PROPERTYLIST_H__
00028
00029 #include <map>
00030 #include <string>
00031 #include <vector>
00032
00054 namespace cbits
00055 {
00056
00071 class PropertyList
00072 {
00073
00074 public:
00075
00082 static PropertyList& getPropertyList
00083 (
00084 const std::string& name
00089 );
00090
00091
00096 static void removePropertyList
00097 (
00098 const std::string& name
00103 );
00104
00105
00110 static void removeAll();
00111
00112
00117 static int getNumPropertyLists();
00118
00119
00127 static const bool exists
00128 (
00129 const std::string& name
00133 );
00134
00135
00140 void setProperty
00141 (
00142 const std::string & property_name,
00147 const std::string & property_value
00151 );
00152
00153
00161 const char * getProperty
00162 (
00163 const std::string & property_name
00167 );
00168
00169
00176 const bool isSet
00177 (
00178 const char* name
00182 );
00183
00184
00191 const int getNumProperties() const;
00192
00193
00204 std::vector< std::string > & getValues( void );
00205
00206
00216 std::vector< std::string > & getKeys( void );
00217
00218
00223 void removeProperties();
00224
00225
00240 const bool readPropertyList
00241 (
00242 std::istream& prop_stream,
00247 const bool override = true,
00254 const char nv_delim = '=',
00259 const char cmt_delim = '#'
00263 );
00264
00265
00281 const bool readFile
00282 (
00283 const char* const path,
00288 const bool override = true,
00295 const char nv_delim = '=',
00300 const char cmt_delim = '#'
00304 );
00305
00306
00314 const bool writePropertyList
00315 (
00316 std::ostream& os,
00320 const char delim = '='
00324 ) const;
00325
00326
00333 const int readCommandLine
00334 (
00335 const int argc,
00340 const char* const * argv,
00345 const bool override = true,
00351 const char delim = '='
00355 );
00356
00357
00364 static std::string trim
00365 (
00366 const std::string& line
00370 );
00371
00372
00373
00374 private:
00375
00376 std::map< std::string, std::string > _properties;
00381 std::vector< std::string > _values;
00386 std::vector< std::string > _keys;
00393 protected:
00394
00398 PropertyList();
00399
00403 static std::map< std::string, PropertyList* >& getSets();
00404
00405
00406 private:
00407
00408
00409 static std::map< std::string, PropertyList* > _sets;
00410
00411
00412
00413 typedef std::map<std::string,std::string>::const_iterator PITERATOR;
00418 PropertyList( const PropertyList& );
00423 PropertyList& operator=( const PropertyList& );
00428 };
00429
00430
00431 };
00432
00433 #endif
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458