summaryrefslogtreecommitdiffstats
path: root/iniFile/iniFile.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--iniFile/iniFile.h184
1 files changed, 184 insertions, 0 deletions
diff --git a/iniFile/iniFile.h b/iniFile/iniFile.h
new file mode 100644
index 000000000..c23c0369f
--- /dev/null
+++ b/iniFile/iniFile.h
@@ -0,0 +1,184 @@
+// IniFile.cpp: Implementation of the CIniFile class.
+// Written by: Adam Clauss
+// Email: cabadam@tamu.edu
+// You may use this class/code as you wish in your programs. Feel free to distribute it, and
+// email suggested changes to me.
+//
+// Rewritten by: Shane Hill
+// Date: 21/08/2001
+// Email: Shane.Hill@dsto.defence.gov.au
+// Reason: Remove dependancy on MFC. Code should compile on any
+// platform. Tested on Windows/Linux/Irix
+//////////////////////////////////////////////////////////////////////
+
+/*
+ !! MODIFIED BY FAKETRUTH !!
+*/
+
+#ifndef CIniFile_H
+#define CIniFile_H
+
+// C++ Includes
+#include <string>
+#include <vector>
+
+// C Includes
+#include <stdlib.h>
+
+#define MAX_KEYNAME 128
+#define MAX_VALUENAME 128
+#define MAX_VALUEDATA 2048
+
+class cIniFile //tolua_export
+{ //tolua_export
+private:
+ bool caseInsensitive;
+ std::string path;
+ struct key {
+ std::vector<std::string> names;
+ std::vector<std::string> values;
+ std::vector<std::string> comments;
+ };
+ std::vector<key> keys;
+ std::vector<std::string> names;
+ std::vector<std::string> comments;
+ std::string CheckCase( std::string s) const;
+
+public:
+ enum errors{ noID = -1};
+ cIniFile( const std::string iniPath = ""); //tolua_export
+ virtual ~cIniFile() {}
+
+ // Sets whether or not keynames and valuenames should be case sensitive.
+ // The default is case insensitive.
+ void CaseSensitive() {caseInsensitive = false;} //tolua_export
+ void CaseInsensitive() {caseInsensitive = true;} //tolua_export
+
+ // Sets path of ini file to read and write from.
+ void Path(const std::string & newPath) {path = newPath;} //tolua_export
+ std::string Path() const {return path;} //tolua_export
+ void SetPath(const std::string & newPath) {Path( newPath);} //tolua_export
+
+ // Reads ini file specified using path.
+ // Returns true if successful, false otherwise.
+ bool ReadFile(); //tolua_export
+
+ // Writes data stored in class to ini file.
+ bool WriteFile(); //tolua_export
+
+ // Deletes all stored ini data.
+ void Erase(); //tolua_export
+ void Clear() {Erase();} //tolua_export
+ void Reset() {Erase();} //tolua_export
+
+ // Returns index of specified key, or noID if not found.
+ long FindKey( const std::string & keyname) const; //tolua_export
+
+ // Returns index of specified value, in the specified key, or noID if not found.
+ long FindValue( const unsigned keyID, const std::string & valuename) const; //tolua_export
+
+ // Returns number of keys currently in the ini.
+ unsigned NumKeys() const {return names.size();} //tolua_export
+ unsigned GetNumKeys() const {return NumKeys();} //tolua_export
+
+ // Add a key name.
+ unsigned AddKeyName( const std::string & keyname); //tolua_export
+
+ // Returns key names by index.
+ std::string KeyName( const unsigned keyID) const; //tolua_export
+ std::string GetKeyName( const unsigned keyID) const {return KeyName(keyID);} //tolua_export
+
+ // Returns number of values stored for specified key.
+ unsigned NumValues( const std::string & keyname); //tolua_export
+ unsigned GetNumValues( const std::string & keyname) {return NumValues( keyname);} //tolua_export
+ unsigned NumValues( const unsigned keyID); //tolua_export
+ unsigned GetNumValues( const unsigned keyID) {return NumValues( keyID);} //tolua_export
+
+ // Returns value name by index for a given keyname or keyID.
+ std::string ValueName( const std::string & keyname, const unsigned valueID) const; //tolua_export
+ std::string GetValueName( const std::string & keyname, const unsigned valueID) const { //tolua_export
+ return ValueName( keyname, valueID);
+ } //tolua_export
+ std::string ValueName( const unsigned keyID, const unsigned valueID) const; //tolua_export
+ std::string GetValueName( const unsigned keyID, const unsigned valueID) const { //tolua_export
+ return ValueName( keyID, valueID);
+ } //tolua_export
+
+ // Gets value of [keyname] valuename =.
+ // Overloaded to return string, int, and double.
+ // Returns defValue if key/value not found.
+ std::string GetValue( const std::string & keyname, const std::string & valuename, const std::string & defValue = "") const; //tolua_export
+ std::string GetValue( const unsigned keyID, const unsigned valueID, const std::string & defValue = "") const; //tolua_export
+ int GetValueI( const std::string & keyname, const std::string & valuename, const int defValue = 0) const; //tolua_export
+ bool GetValueB( const std::string & keyname, const std::string & valuename, const bool defValue = false) const { //tolua_export
+ return ( GetValueI( keyname, valuename, int( defValue)) > 0);
+ } //tolua_export
+ double GetValueF( const std::string & keyname, const std::string & valuename, const double defValue = 0.0) const; //tolua_export
+ // This is a variable length formatted GetValue routine. All these voids
+ // are required because there is no vsscanf() like there is a vsprintf().
+ // Only a maximum of 8 variable can be read.
+ unsigned GetValueV( const std::string & keyname, const std::string & valuename, char *format,
+ void *v1 = 0, void *v2 = 0, void *v3 = 0, void *v4 = 0,
+ void *v5 = 0, void *v6 = 0, void *v7 = 0, void *v8 = 0,
+ void *v9 = 0, void *v10 = 0, void *v11 = 0, void *v12 = 0,
+ void *v13 = 0, void *v14 = 0, void *v15 = 0, void *v16 = 0);
+
+ // Sets value of [keyname] valuename =.
+ // Specify the optional paramter as false (0) if you do not want it to create
+ // the key if it doesn't exist. Returns true if data entered, false otherwise.
+ // Overloaded to accept string, int, and double.
+ bool SetValue( const unsigned keyID, const unsigned valueID, const std::string & value); //tolua_export
+ bool SetValue( const std::string & keyname, const std::string & valuename, const std::string & value, const bool create = true); //tolua_export
+ bool SetValueI( const std::string & keyname, const std::string & valuename, const int value, const bool create = true); //tolua_export
+ bool SetValueB( const std::string & keyname, const std::string & valuename, const bool value, const bool create = true) { //tolua_export
+ return SetValueI( keyname, valuename, int(value), create);
+ } //tolua_export
+ bool SetValueF( const std::string & keyname, const std::string & valuename, const double value, const bool create = true); //tolua_export
+ bool SetValueV( const std::string & keyname, const std::string & valuename, char *format, ...);
+
+ // Deletes specified value.
+ // Returns true if value existed and deleted, false otherwise.
+ bool DeleteValue( const std::string & keyname, const std::string & valuename); //tolua_export
+
+ // Deletes specified key and all values contained within.
+ // Returns true if key existed and deleted, false otherwise.
+ bool DeleteKey(const std::string & keyname); //tolua_export
+
+ // Header comment functions.
+ // Header comments are those comments before the first key.
+ //
+ // Number of header comments.
+ unsigned NumHeaderComments() {return comments.size();} //tolua_export
+ // Add a header comment.
+ void HeaderComment( const std::string & comment); //tolua_export
+ // Return a header comment.
+ std::string HeaderComment( const unsigned commentID) const; //tolua_export
+ // Delete a header comment.
+ bool DeleteHeaderComment( unsigned commentID); //tolua_export
+ // Delete all header comments.
+ void DeleteHeaderComments() {comments.clear();} //tolua_export
+
+ // Key comment functions.
+ // Key comments are those comments within a key. Any comments
+ // defined within value names will be added to this list. Therefore,
+ // these comments will be moved to the top of the key definition when
+ // the CIniFile::WriteFile() is called.
+ //
+ // Number of key comments.
+ unsigned NumKeyComments( const unsigned keyID) const; //tolua_export
+ unsigned NumKeyComments( const std::string & keyname) const; //tolua_export
+ // Add a key comment.
+ bool KeyComment( const unsigned keyID, const std::string & comment); //tolua_export
+ bool KeyComment( const std::string & keyname, const std::string & comment); //tolua_export
+ // Return a key comment.
+ std::string KeyComment( const unsigned keyID, const unsigned commentID) const; //tolua_export
+ std::string KeyComment( const std::string & keyname, const unsigned commentID) const; //tolua_export
+ // Delete a key comment.
+ bool DeleteKeyComment( const unsigned keyID, const unsigned commentID); //tolua_export
+ bool DeleteKeyComment( const std::string & keyname, const unsigned commentID); //tolua_export
+ // Delete all comments for a key.
+ bool DeleteKeyComments( const unsigned keyID); //tolua_export
+ bool DeleteKeyComments( const std::string & keyname); //tolua_export
+}; //tolua_export
+
+#endif