IniDict.cc
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00012 #include <iostream>
00013 #include "zypp/base/Logger.h"
00014 #include <map>
00015 #include <string>
00016 #include "zypp/parser/IniDict.h"
00017
00018 using namespace std;
00020 namespace zypp
00021 {
00022
00023 namespace parser
00024 {
00025
00026
00027
00028
00030
00032
00033
00034
00035
00036 IniDict::IniDict( const InputStream &is,
00037 const ProgressData::ReceiverFnc & progress )
00038 {
00039 read(is, progress );
00040 }
00041
00042 IniDict::IniDict()
00043 {
00044 }
00045
00046 void IniDict::read( const InputStream &is,
00047 const ProgressData::ReceiverFnc & progress )
00048 {
00049 parse(is, progress );
00050 }
00051
00053
00054
00055
00056
00057 IniDict::~IniDict()
00058 {}
00059
00060 void IniDict::consume( const std::string §ion )
00061 {
00062 _dict[section];
00063 }
00064
00065 void IniDict::consume( const std::string §ion, const std::string &key, const std::string &value )
00066 {
00067 _dict[section][key] = value;
00068 }
00069
00070
00071 IniDict::entry_const_iterator IniDict::entriesBegin(const std::string §ion) const
00072 {
00073 SectionSet::const_iterator secit = _dict.find(section);
00074 if ( secit == _dict.end() )
00075 {
00076 return _empty_map.begin();
00077 }
00078
00079 return (secit->second).begin();
00080 }
00081
00082 IniDict::entry_const_iterator IniDict::entriesEnd(const std::string §ion) const
00083 {
00084 SectionSet::const_iterator secit = _dict.find(section);
00085 if ( secit == _dict.end() )
00086 {
00087 return _empty_map.end();
00088 }
00089
00090 return (secit->second).end();
00091 }
00092
00093
00094 IniDict::section_const_iterator IniDict::sectionsBegin() const
00095 {
00096 return make_map_key_begin( _dict );
00097 }
00098
00099 IniDict::section_const_iterator IniDict::sectionsEnd() const
00100 {
00101 return make_map_key_end( _dict );
00102 }
00103
00104 void IniDict::insertEntry( const std::string §ion,
00105 const std::string &key,
00106 const std::string &value )
00107 {
00108 consume( section, key, value );
00109 }
00110
00111 void IniDict::deleteSection( const std::string §ion )
00112 {
00113 _dict.erase(section);
00114 }
00115
00116 bool IniDict::hasSection( const std::string §ion ) const
00117 {
00118 SectionSet::const_iterator secit = _dict.find(section);
00119 if ( secit == _dict.end() )
00120 return false;
00121 return true;
00122 }
00123
00124 bool IniDict::hasEntry( const std::string §ion,
00125 const std::string &entry ) const
00126 {
00127 SectionSet::const_iterator secit = _dict.find(section);
00128 if ( secit == _dict.end() )
00129 return false;
00130
00131 EntrySet::const_iterator entryit = (secit->second).find(entry);
00132 if ( entryit == (secit->second).end() )
00133 return false;
00134
00135 return true;
00136 }
00137
00138
00139
00140
00141
00142
00143 std::ostream & operator<<( std::ostream & str, const IniDict & obj )
00144 {
00145 for ( IniDict::section_const_iterator si = obj.sectionsBegin();
00146 si != obj.sectionsEnd();
00147 ++si )
00148 {
00149 str << "[" << *si << "]" << endl;
00150 for ( IniDict::entry_const_iterator ei = obj.entriesBegin(*si);
00151 ei != obj.entriesEnd(*si);
00152 ++ei )
00153 {
00154 str << ei->first << " = " << ei->second << endl;
00155 }
00156 str << endl;
00157 }
00158 return str;
00159 }
00160
00162 }
00165 }