/* 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__ #include #include #include "math/vector3f.h" #include "math/color.h" #include "filesystem/file.h" 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: IniFile(); ~IniFile(); /// open the file for reading /** the filename will get the "ini/" prefix and ".ini" suffix */ bool open(std::string const & name); /// parse one line, returns false on end-of-file bool 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 current section matches bool in_section(const char *sectionlabel) 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 bool got_key() const; bool got_key(const char * keylabel); /// check if the last read key=value pair matches keylabel and store the value in valuestring bool got_key_string(const char * keylabel, std::string & valuestring); bool got_key_color(const char * keylabel, math::Color & color); bool got_key_float(const char * keylabel, float & f); bool got_key_angle(const char * keylabel, float & f); bool got_key_vector3f(const char * keylabel, math::Vector3f & v); bool got_key_bool(const char * keylabel, bool & b); inline unsigned int line() const { return line_number; } /// print a default unkown value error void unknown_value() const; /// print a default unkown key error void unkown_key() const; /// print a default unkown section error void unknown_section() const; /// return true of the ini file is open for reading inline bool is_open() { return inifile_ifs.is_open(); } /// current filename inline std::string const & name() const {return inifile_name; } /// close the file void close(); 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; std::ifstream inifile_ifs; std::string inifile_name; }; } #endif // __INCLUDED_FILESYSTEM_INIFILE_H__