/* common/inifile.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_FILESYSTEM_INIFILE_H__ #define __INCLUDED_FILESYSTEM_INIFILE_H__ // project headers #include "filesystem/file.h" // C++ headers #include #include namespace filesystem { /// a class to read .ini files /** The IniFile class provides functions to read .ini files. A .ini file * consists of one or more [section] headers followed by one or more key=value * pairs. Lines starting with # or ; are considered comments */ class IniFile : public File { public: IniFile(); virtual ~IniFile(); /// open the file for reading virtual void open(const char * filename, std::ios_base::openmode mode = std::ios_base::in); IniFile & getline(); /// current section label inline std::string section() const { return section_current; } /// current key inline std::string key() const { return key_current; } /// current value inline std::string value() const { return value_current; } /// true if the last read statement was a section header bool got_section() const; /// true if the last read statement was a certain section header bool got_section(const char * sectionlabel) const; /// true if the last read statement was a key=value pair inline bool got_key() const { return last_read_was_key; } /// check if the last read key=value pair matches keylabel and store the value in valuestring bool got_key_string(char * const keylabel, std::string & valuestring); inline unsigned int line() const { return line_number; } private: std::string section_current; std::string key_current; std::string value_current; bool last_read_was_key; bool last_read_was_section; unsigned int line_number; }; } #endif // __INCLUDED_FILESYSTEM_INIFILE_H__