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
00030
00031
00032
00033 #ifndef BESKeys_h_
00034 #define BESKeys_h_ 1
00035
00036 #include <fstream>
00037 #include <map>
00038 #include <vector>
00039 #include <string>
00040
00041 using std::string ;
00042 using std::map ;
00043 using std::vector ;
00044 using std::ifstream ;
00045
00046 #include "BESObj.h"
00047
00084 class BESKeys : public BESObj
00085 {
00086 private:
00087 ifstream * _keys_file ;
00088 string _keys_file_name ;
00089 map<string,vector<string> > *_the_keys ;
00090 bool _own_keys ;
00091
00092 void clean() ;
00093 void initialize_keys() ;
00094 void load_keys() ;
00095 bool break_pair( const char* b,
00096 string& key,
00097 string &value,
00098 bool &addto ) ;
00099 bool only_blanks( const char *line ) ;
00100 void load_include_files( const string &files ) ;
00101 void load_include_file( const string &file ) ;
00102 BESKeys() {}
00103 BESKeys( const string &keys_file_name,
00104 map<string,vector<string> > *keys ) ;
00105 protected:
00106 BESKeys( const string &keys_file_name ) ;
00107 public:
00108 ~BESKeys() ;
00109
00110 string keys_file_name() { return _keys_file_name ; }
00111
00112 void set_key( const string &key, const string &val,
00113 bool addto = false ) ;
00114 void set_key( const string &pair ) ;
00115 void get_value( const string& s, string &val,
00116 bool &found ) ;
00117 void get_values( const string& s, vector<string> &vals,
00118 bool &found ) ;
00119
00120 typedef map< string, vector< string > >::const_iterator Keys_citer ;
00121 Keys_citer keys_begin() { return _the_keys->begin() ; }
00122 Keys_citer keys_end() { return _the_keys->end() ; }
00123
00124 virtual void dump( ostream &strm ) const ;
00125 };
00126
00127 #endif // BESKeys_h_
00128