From 7db1598f6b18b043b474d66677a6c1c49b318694 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 11 Nov 2007 12:35:08 +0000 Subject: ini file reader --- src/common/inifile.h | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/common/inifile.h (limited to 'src/common/inifile.h') diff --git a/src/common/inifile.h b/src/common/inifile.h new file mode 100644 index 0000000..934da58 --- /dev/null +++ b/src/common/inifile.h @@ -0,0 +1,66 @@ +/* + 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_INIFILE_H__ +#define __INCLUDED_INIFILE_H__ + +// project headers +#include "file.h" + +// C++ headers +#include +#include + +namespace common { + +/// 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_INIFILE_H__ -- cgit v1.2.3