/*************************************************************************/ /* File : VxConfiguration.h */ /* Author : Nicolas Hognon */ /* */ /* Virtools SDK */ /* Copyright (c) Virtools 2000, All Rights Reserved. */ /*************************************************************************/ #ifndef _VXCONFIGURATION_H_ #define _VXCONFIGURATION_H_ #include "XHashTable.h" #include "VxFile.h" #ifdef macintosh #include #else #ifndef _WIN32_WCE #include #else #include #endif #endif class VxConfigurationSection; class VxConfigurationEntry; typedef XHashTable HashOfEntry; typedef XHashTable::Iterator EntryIt; typedef XHashTable::ConstIterator ConstEntryIt; typedef XHashTable::Pair EntryPair; typedef XHashTable HashOfSection; typedef XHashTable::Iterator SectionIt; typedef XHashTable::ConstIterator ConstSectionIt; typedef XHashTable::Pair SectionPair; /************************************************ Name: VxConfiguration Summary: Class representation of a configuration (a tree of sections and entries (keys and values)). Remarks: A configuration can be load from/save to a file. You can also have a default configuration. See also: VxConfigurationSection, VxConfigurationEntry ************************************************/ class VxConfiguration { public: VX_EXPORT VxConfiguration(unsigned short indent = 2); VX_EXPORT ~VxConfiguration(); VX_EXPORT void Clear(); VX_EXPORT void ClearDefault(); VX_EXPORT int GetNumberOfSubSections() const; VX_EXPORT int GetNumberOfEntries() const; VX_EXPORT int GetNumberOfSubSectionsRecursive() const; VX_EXPORT int GetNumberOfEntriesRecursive() const; VX_EXPORT BOOL AddEntry(char* parent,char* ename,const char* evalue,VxConfigurationEntry** result = 0); VX_EXPORT BOOL AddEntry(char* parent,char* ename,int evalue,VxConfigurationEntry** result = 0); VX_EXPORT BOOL AddEntry(char* parent,char* ename,unsigned int evalue,VxConfigurationEntry** result = 0); VX_EXPORT BOOL AddEntry(char* parent,char* ename,float evalue,VxConfigurationEntry** result = 0); VX_EXPORT VxConfigurationSection* CreateSubSection(char* parent,char* sname); VX_EXPORT BOOL DeleteEntry(char* parent,char* ename); VX_EXPORT BOOL DeleteSection(char* parent,char* sname); VX_EXPORT VxConfigurationEntry* RemoveEntry(char* parent,char* ename); VX_EXPORT VxConfigurationSection* RemoveSection(char* parent,char* sname); VX_EXPORT BOOL AddDefaultEntry(char* parent,char* ename,const char* evalue); VX_EXPORT BOOL AddDefaultEntry(char* parent,char* ename,int evalue); VX_EXPORT BOOL AddDefaultEntry(char* parent,char* ename,unsigned int evalue); VX_EXPORT BOOL AddDefaultEntry(char* parent,char* ename,float evalue); VX_EXPORT VxConfigurationSection* CreateDefaultSubSection(char* parent,char* sname); VX_EXPORT ConstSectionIt BeginSections() const; VX_EXPORT ConstEntryIt BeginEntries() const; VX_EXPORT VxConfigurationSection* GetNextSection(ConstSectionIt& it) const; VX_EXPORT VxConfigurationEntry* GetNextEntry(ConstEntryIt& it) const; VX_EXPORT VxConfigurationSection* GetSubSection(char* sname,BOOL usedot) const; VX_EXPORT VxConfigurationEntry* GetEntry(char* ename,BOOL usedot) const; VX_EXPORT BOOL BuildFromDataFile(const char* name,XString& error); VX_EXPORT BOOL BuildFromFile(const char* name,int& cline,XString& error); VX_EXPORT BOOL BuildFromMemory(const char* buffer,int& cline,XString& error); VX_EXPORT BOOL SaveToDataFile(const char* name); VX_EXPORT BOOL SaveToFile(const char* name); protected: VxConfigurationSection* CreateSubSection(VxConfigurationSection* root,char* sname,BOOL usedot) const; VxConfigurationSection* GetSubSection(VxConfigurationSection* root,char* sname,BOOL usedot) const; BOOL ManageSection(char* line,VxConfigurationSection** current,XString& error); BOOL ManageEntry(char* line,VxConfigurationSection* current,XString& error); VxConfigurationSection* m_Root; VxConfigurationSection* m_DefaultRoot; unsigned short m_Indent; }; class VxConfigurationSection { friend class VxConfiguration; public: VX_EXPORT ~VxConfigurationSection(); VX_EXPORT void Clear(); VX_EXPORT int GetNumberOfSubSections() const; VX_EXPORT int GetNumberOfEntries() const; VX_EXPORT int GetNumberOfSubSectionsRecursive() const; VX_EXPORT int GetNumberOfEntriesRecursive () const; VX_EXPORT void AddEntry(char* ename,const char* evalue,VxConfigurationEntry** result = 0); VX_EXPORT void AddEntry(char* ename,int evalue,VxConfigurationEntry** result = 0); VX_EXPORT void AddEntry(char* ename,long evalue,VxConfigurationEntry** result = 0); VX_EXPORT void AddEntry(char* ename,unsigned int evalue,VxConfigurationEntry** result = 0); //VX_EXPORT void AddEntry(char* ename,unsigned int evalue,VxConfigurationEntry** result = 0); VX_EXPORT void AddEntry(char* ename,float evalue,VxConfigurationEntry** result = 0); VX_EXPORT VxConfigurationSection* CreateSubSection(char* sname); VX_EXPORT BOOL DeleteEntry(char* ename); VX_EXPORT BOOL DeleteSection(char* sname); VX_EXPORT VxConfigurationEntry* RemoveEntry(char* ename); VX_EXPORT VxConfigurationSection* RemoveSection(char* sname); VX_EXPORT ConstEntryIt BeginChildEntry() const; VX_EXPORT VxConfigurationEntry* GetNextChildEntry(ConstEntryIt& it) const; VX_EXPORT ConstSectionIt BeginChildSection() const; VX_EXPORT VxConfigurationSection* GetNextChildSection(ConstSectionIt& it) const; VX_EXPORT VxConfigurationEntry* GetEntry(char* ename) const; VX_EXPORT VxConfigurationSection* GetSubSection(char* sname) const; VX_EXPORT const char* GetName() const; VX_EXPORT VxConfigurationSection* GetParent() const; protected: VxConfigurationSection(char* name,VxConfigurationSection* parent); BOOL Save(VxFile& file,int level,int indent); VxConfigurationSection* m_Parent; XString m_Name; XHashTable m_Entries; XHashTable m_SubSections; }; class VxConfigurationEntry { friend class VxConfigurationSection; public: VX_EXPORT ~VxConfigurationEntry(); VX_EXPORT void SetValue(const char* value); VX_EXPORT void SetValue(int value); VX_EXPORT void SetValue(long value); VX_EXPORT void SetValue(unsigned int value); //VX_EXPORT void SetValue(unsigned int value); VX_EXPORT void SetValue(float value); VX_EXPORT const char* GetName() const; VX_EXPORT VxConfigurationSection* GetParent() const; VX_EXPORT const char* GetValue() const; VX_EXPORT BOOL GetValueAsInteger(int& value) const; VX_EXPORT BOOL GetValueAsUnsignedInteger(unsigned int& value) const; VX_EXPORT BOOL GetValueAsFloat(float& value) const; protected: VxConfigurationEntry(VxConfigurationSection* parent,const char* name,const char* value); VxConfigurationEntry(VxConfigurationSection* parent,const char* name,int value); VxConfigurationEntry(VxConfigurationSection* parent,const char* name,unsigned int value); VxConfigurationEntry(VxConfigurationSection* parent,const char* name,float value); XString m_Name; VxConfigurationSection* m_Parent; XString m_Value; }; char* Shrink(char* str); #ifndef _XBOX #ifndef _WIN32_WCE class VxConfig { public: enum Mode { READ = 1, WRITE = 2 }; VX_EXPORT VxConfig(); VX_EXPORT ~VxConfig(); VX_EXPORT void OpenSection(char* iSection,Mode iOpeningMode); VX_EXPORT void CloseSection(char* iSection); /* void WriteEntry(const char* iKey, void* iData = NULL, int iSize = 0) int ReadEntry(char* iKey, void* oData,int oSize) */ VX_EXPORT void WriteStringEntry(const char* iKey, const char* iValue); VX_EXPORT int ReadStringEntry(char* iKey, char* oData); private: // Key to the virtools section void* m_VirtoolsSection; void* m_CurrentSection; #ifdef macintosh VxConfiguration conf; XString m_PreferenceFile; #endif }; #endif #endif #endif // _VXCONFIGURATION_H_