1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/parser/IniDict.cc
13 #include <zypp/base/Logger.h>
16 #include <zypp/parser/IniDict.h>
20 ///////////////////////////////////////////////////////////////////
22 { /////////////////////////////////////////////////////////////////
23 ///////////////////////////////////////////////////////////////////
25 { /////////////////////////////////////////////////////////////////
26 ///////////////////////////////////////////////////////////////////
28 // CLASS NAME : IniDict
30 ///////////////////////////////////////////////////////////////////
32 ///////////////////////////////////////////////////////////////////
34 // METHOD NAME : IniDict::IniDict
37 IniDict::IniDict( const InputStream &is,
38 const ProgressData::ReceiverFnc & progress )
47 void IniDict::read( const InputStream &is,
48 const ProgressData::ReceiverFnc & progress )
53 ///////////////////////////////////////////////////////////////////
55 // METHOD NAME : IniDict::~IniDict
61 void IniDict::consume( const std::string §ion )
63 _dict[section]; // remember even empty sections
66 void IniDict::consume( const std::string §ion, const std::string &key, const std::string &value )
68 _dict[section][key] = value;
72 IniDict::entry_const_iterator IniDict::entriesBegin(const std::string §ion) const
74 SectionSet::const_iterator secit = _dict.find(section);
75 if ( secit == _dict.end() )
77 return _empty_map.begin();
80 return (secit->second).begin();
83 IniDict::entry_const_iterator IniDict::entriesEnd(const std::string §ion) const
85 SectionSet::const_iterator secit = _dict.find(section);
86 if ( secit == _dict.end() )
88 return _empty_map.end();
91 return (secit->second).end();
95 IniDict::section_const_iterator IniDict::sectionsBegin() const
97 return make_map_key_begin( _dict );
100 IniDict::section_const_iterator IniDict::sectionsEnd() const
102 return make_map_key_end( _dict );
105 void IniDict::insertEntry( const std::string §ion,
106 const std::string &key,
107 const std::string &value )
109 consume( section, key, value );
112 void IniDict::deleteSection( const std::string §ion )
114 _dict.erase(section);
117 bool IniDict::hasSection( const std::string §ion ) const
119 SectionSet::const_iterator secit = _dict.find(section);
120 if ( secit == _dict.end() )
125 bool IniDict::hasEntry( const std::string §ion,
126 const std::string &entry ) const
128 SectionSet::const_iterator secit = _dict.find(section);
129 if ( secit == _dict.end() )
132 EntrySet::const_iterator entryit = (secit->second).find(entry);
133 if ( entryit == (secit->second).end() )
139 /******************************************************************
141 ** FUNCTION NAME : operator<<
142 ** FUNCTION TYPE : std::ostream &
144 std::ostream & operator<<( std::ostream & str, const IniDict & obj )
146 for ( IniDict::section_const_iterator si = obj.sectionsBegin();
147 si != obj.sectionsEnd();
150 str << "[" << *si << "]" << endl;
151 for ( IniDict::entry_const_iterator ei = obj.entriesBegin(*si);
152 ei != obj.entriesEnd(*si);
155 str << ei->first << " = " << ei->second << endl;
162 /////////////////////////////////////////////////////////////////
163 } // namespace parser
164 ///////////////////////////////////////////////////////////////////
165 /////////////////////////////////////////////////////////////////
167 ///////////////////////////////////////////////////////////////////