1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 1 /*
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 2 +-----------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 3 | Project : PCO2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 4 | Modul : inc\pco_inifile.h
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 5 +-----------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 6 | Copyright 2002 Texas Instruments Berlin, AG
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 7 | All rights reserved.
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 8 |
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 9 | This file is confidential and a trade secret of Texas
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 10 | Instruments Berlin, AG
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 11 | The receipt of or possession of this file does not convey
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 12 | any rights to reproduce or disclose its contents or to
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 13 | manufacture, use, or sell anything it may describe, in
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 14 | whole, or in part, without the specific written consent of
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 15 | Texas Instruments Berlin, AG.
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 16 +-----------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 17 | Purpose : Contains declarations of the class IniFile. (Based on
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 18 | File from Adam Clauss)
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 19 +-----------------------------------------------------------------------------
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 20 */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 21
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 22 #ifndef _PCO_INIFILE_H_
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 23 #define _PCO_INIFILE_H_
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 24
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 25 /*==== INCLUDES ===================================================*/
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 26
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 27 #pragma warning (disable: 4786) /* ignore warning about to long template names */
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 28
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 29 #include <iostream>
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 30 #include <string>
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 31 #include <vector>
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 32 #include "cms.h"
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 33
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 34 using namespace std;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 35
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 36 /*==== PROTOTYPES ==================================================*/
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 37
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 38 //all Keys are of this type
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 39 struct Key
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 40 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 41 //list of values in key
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 42 vector<string> values;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 43
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 44 //corresponding list of value names
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 45 vector<string> names;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 46
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 47 //corresponding list of modified state
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 48 vector<bool> modified;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 49 };
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 50
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 51 class IniFile
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 52 {
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 53 //all private variables
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 54 private:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 55
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 56 //stores pathname of ini file to read/write
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 57 string path;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 58
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 59 //list of Keys in ini
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 60 vector<Key> keys;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 61
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 62 //corresponding list of Keynames
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 63 vector<string> names;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 64
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 65 // semaphore to protect file reading/writing
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 66 CMS_HANDLE m_file_sema;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 67
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 68 //all private functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 69 private:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 70 //overloaded to take string
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 71 istream & getline( istream & is, string & str );
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 72
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 73 //returns index of specified value, in the specified Key, or -1 if not found
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 74 int FindValue(int Keynum, string valuename) const;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 75
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 76 //returns index of specified Key, or -1 if not found
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 77 int FindKey(string Keyname) const;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 78
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 79
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 80 //public variables
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 81 public:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 82
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 83 //will contain error info if one occurs
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 84 //ended up not using much, just in ReadFile and GetValue
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 85 mutable string error;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 86
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 87 //will contain warning info if one occurs
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 88 //ended up not using much, just in ReadFile
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 89 mutable string warning;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 90
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 91 //public functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 92 public:
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 93 //default constructor
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 94 IniFile();
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 95
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 96 //constructor, can specify pathname here instead of using SetPath later
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 97 IniFile(string inipath);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 98
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 99 //default destructor
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 100 virtual ~IniFile();
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 101
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 102 //sets path of ini file to read and write from
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 103 void SetPath(string newpath);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 104
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 105 //returns path of currently selected ini file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 106 const char* GetPath() const { return path.c_str();}
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 107
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 108 //reads ini file specified using IniFile::SetPath()
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 109 //returns true if successful, false otherwise
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 110 //may contain warnings in warning-variable
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 111 bool ReadFile(bool refresh=false);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 112
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 113 //writes data stored in class to ini file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 114 bool WriteFile(bool refresh_first=true);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 115
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 116 //deletes all stored ini data
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 117 void Reset();
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 118
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 119 //returns number of Keys currently in the ini
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 120 int GetNumKeys() const;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 121
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 122 //returns number of values stored for specified Key
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 123 int GetNumValues(string Keyname) const;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 124
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 125 //gets value of [Keyname] valuename =
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 126 //overloaded to return string, int, and double,
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 127 //returns "", or 0 if Key/value not found. Sets error member to show problem
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 128 string GetValue(string Keyname, string valuename) const;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 129 int GetValueI(string Keyname, string valuename) const;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 130 double GetValueF(string Keyname, string valuename) const;
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 131
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 132 //sets value of [Keyname] valuename =.
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 133 //specify the optional paramter as false (0) if you do not want it to create
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 134 //the Key if it doesn't exist. Returns true if data entered, false otherwise
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 135 //overloaded to accept string, int, and double
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 136 bool SetValue(string Key, string valuename, string value, bool create = 1);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 137 bool SetValueI(string Key, string valuename, int value, bool create = 1);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 138 bool SetValueF(string Key, string valuename, double value, bool create = 1);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 139
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 140 bool modified(string keyname, string valuename);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 141 bool set_modified(string keyname, string valuename, bool modified=true);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 142
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 143 //deletes specified value
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 144 //returns true if value existed and deleted, false otherwise
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 145 bool DeleteValue(string Keyname, string valuename);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 146
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 147 //deletes specified Key and all values contained within
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 148 //returns true if Key existed and deleted, false otherwise
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 149 bool DeleteKey(string Keyname);
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 150 };
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 151
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
+ − 152 #endif /* _PCO_INIFILE_H_ */