/* filesystem/inistream.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_INISTREAM_H__ #define __INCLUDED_FILESYSTEM_INISTREAM_H__ #include #include #include "math/vector2f.h" #include "math/vector3f.h" #include "math/color.h" #include "filesystem/filestream.h" namespace filesystem { /** * @brief a class to read ini streams * The IniStream class is able to decode the structure of a windows-like .ini file from a text stream. **/ class IniStream { public: IniStream(); ~IniStream(); /// parse one line, returns false on end-of-file bool getline(std::istream & istream); /// current section label inline const std::string & section() const { return section_current; } /// current key inline const std::string & key() const { return key_current; } /// current value inline const std::string & value() const { return value_current; } /// current line number inline unsigned int line() const { return line_number; } /// 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); /// check if the last read key=value pair matches keylabel and store the value in valuestring, converted to label bool got_key_label(const char * keylabel, std::string & labelstring); 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_long(const char * keylabel, long & l); bool got_key_vector2f(const char * keylabel, math::Vector2f & v); /** * @brief special version that reads 1 or 2 arguments **/ bool got_key_vector2f_opt(const char * keylabel, math::Vector2f & v); bool got_key_vector3f(const char * keylabel, math::Vector3f & v); /** * @brief special version that reads 1,2 or 3 arguments **/ bool got_key_vector3f_opt(const char * keylabel, math::Vector3f & v); bool got_key_bool(const char * keylabel, bool & b); protected: void clear(); 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_INISTREAM_H__