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
00027
00028
00029 #ifndef RVIZ_CONFIG_H
00030 #define RVIZ_CONFIG_H
00031
00032 #include <string>
00033 #include <iostream>
00034 #include <map>
00035
00036 namespace rviz
00037 {
00038
00044 class Config
00045 {
00046 public:
00048 bool readFromFile( const std::string& filename );
00049
00051 bool writeToFile( const std::string& filename );
00052
00054 void read( std::istream& input );
00055
00057 void write( std::ostream& output );
00058
00059 void set( const std::string& key, const std::string& value );
00060 void set( const std::string& key, float value );
00061 void set( const std::string& key, int value );
00062
00065 void unset( const std::string& key ) { map_.erase( key ); }
00066
00067 bool get( const std::string& key, std::string* output, const std::string& default_value = "" );
00068 bool get( const std::string& key, float* output, float default_value = 0 );
00069 bool get( const std::string& key, int* output, int default_value = 0 );
00070
00071 class DirectoryCompare
00072 {
00073 public:
00074 bool operator() (const std::string& lhs, const std::string& rhs) const;
00075 };
00076
00077 typedef std::map<std::string, std::string, DirectoryCompare> Map;
00078 typedef Map::iterator Iterator;
00079
00080 Iterator begin() { return map_.begin(); }
00081 Iterator end() { return map_.end(); }
00082
00083 void clear() { map_.clear(); }
00084
00085 private:
00088 const std::string stripFirstSlash( const std::string& str );
00089
00092 void writeDirectory( std::ostream& output, const std::string& new_dir, const std::string& prev_dir );
00093
00095 std::string escapeKey( const std::string& raw_key );
00096
00098 std::string unescapeKey( const std::string& cooked_key );
00099
00100 Map map_;
00101 };
00102
00103 }
00104
00105 #endif // RVIZ_CONFIG_H