Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/filesystem/inifile.h')
-rw-r--r--src/filesystem/inifile.h76
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__