Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2007-11-11 12:35:08 +0000
committerStijn Buys <ingar@osirion.org>2007-11-11 12:35:08 +0000
commit7db1598f6b18b043b474d66677a6c1c49b318694 (patch)
tree556cdd944e6b70aa2ffe1f9d8183d90739ae461b /src/common/inifile.h
parente4168305de096ed8b47308d35dbc16912a74230a (diff)
ini file reader
Diffstat (limited to 'src/common/inifile.h')
-rw-r--r--src/common/inifile.h66
1 files changed, 66 insertions, 0 deletions
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 <string>
+#include <fstream>
+
+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__