diff options
Diffstat (limited to 'src/filesystem/inifile.h')
-rw-r--r-- | src/filesystem/inifile.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/filesystem/inifile.h b/src/filesystem/inifile.h new file mode 100644 index 0000000..f5b74a3 --- /dev/null +++ b/src/filesystem/inifile.h @@ -0,0 +1,76 @@ +/* + 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 <string> +#include <fstream> + +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: + /// 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; +} +; // class IniFile + +} // namespace common + +#endif // __INCLUDED_FILESYSTEM_INIFILE_H__ |