00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_UTIL_CFGFILE_H__
00020 #define __CS_UTIL_CFGFILE_H__
00021
00022 #include "iutil/cfgfile.h"
00023 #include "csutil/array.h"
00024
00025 class csConfigNode;
00026 class csConfigIterator;
00027
00031 class csConfigFile : public iConfigFile
00032 {
00033 public:
00034 SCF_DECLARE_IBASE;
00035
00037 csConfigFile(const char *Filename = 0, iVFS* = 0);
00039 csConfigFile (iBase*);
00041 virtual ~csConfigFile();
00042
00044 virtual const char *GetFileName () const;
00045
00050 virtual iVFS* GetVFS () const;
00051
00056 virtual void SetFileName (const char*, iVFS*);
00057
00073 virtual bool Load (const char* iFileName, iVFS* = 0, bool Merge = false,
00074 bool NewWins = true);
00075
00080 virtual bool Save ();
00081
00088 virtual bool Save (const char *iFileName, iVFS* = 0);
00089
00091 virtual void Clear();
00092
00099 virtual csPtr<iConfigIterator> Enumerate(const char *Subsection = 0);
00100
00102 virtual bool KeyExists(const char *Key) const;
00104 virtual bool SubsectionExists(const char *Subsection) const;
00105
00107 virtual int GetInt(const char *Key, int Def) const;
00109 virtual float GetFloat(const char *Key, float Def = 0.0) const;
00111 virtual const char *GetStr(const char *Key, const char *Def = "") const;
00113 virtual bool GetBool(const char *Key, bool Def = false) const;
00115 virtual const char *GetComment(const char *Key) const;
00116
00118 virtual void SetStr (const char *Key, const char *Val);
00120 virtual void SetInt (const char *Key, int Value);
00122 virtual void SetFloat (const char *Key, float Value);
00124 virtual void SetBool (const char *Key, bool Value);
00131 virtual bool SetComment (const char *Key, const char *Text);
00133 virtual void DeleteKey(const char *Key);
00135 virtual void SetEOFComment(const char *Text);
00137 virtual const char *GetEOFComment() const;
00138
00139 private:
00140 friend class csConfigIterator;
00141
00142
00143
00144
00145
00146
00147 csConfigNode *FirstNode, *LastNode;
00148
00149
00150
00151
00152
00153 csArray<csConfigIterator*> *Iterators;
00154
00155 char *Filename;
00156
00157 csRef<iVFS> VFS;
00158
00159
00160
00161
00162 bool Dirty;
00163
00164 char *EOFComment;
00165
00166
00167 void InitializeObject ();
00168
00169 virtual bool LoadNow(const char *Filename, iVFS *vfs, bool overwrite);
00170
00171
00172
00173
00174
00175
00176 virtual void LoadFromBuffer(char *Filedata, bool overwrite);
00177
00178 csConfigNode *FindNode(const char *Name, bool isSubsection = false) const;
00179
00180 csConfigNode *CreateNode(const char *Name);
00181
00182 void RemoveIterator(csConfigIterator *it) const;
00183
00184 virtual bool SaveNow(const char *Filename, iVFS *vfs) const;
00185 };
00186
00187 #endif // __CS_UTIL_CFGFILE_H__