123
This commit is contained in:
125
ResourceCompiler/CfgFile.h
Normal file
125
ResourceCompiler/CfgFile.h
Normal file
@@ -0,0 +1,125 @@
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Crytek Engine Source File.
|
||||
// Copyright (C), Crytek Studios, 2002.
|
||||
// -------------------------------------------------------------------------
|
||||
// File name: cfgfile.h
|
||||
// Version: v1.00
|
||||
// Created: 4/11/2002 by Timur.
|
||||
// Compilers: Visual Studio.NET
|
||||
// Description:
|
||||
// -------------------------------------------------------------------------
|
||||
// History: 03/14/2003 MM added save support
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef __cfgfile_h__
|
||||
#define __cfgfile_h__
|
||||
#pragma once
|
||||
|
||||
#include "ICfgFile.h" // ICfgFile
|
||||
|
||||
class Config;
|
||||
|
||||
/** Configuration file class.
|
||||
Use format similar to windows .ini files.
|
||||
*/
|
||||
class CfgFile :public ICfgFile
|
||||
{
|
||||
public:
|
||||
// Config file entry structure, filled by readSection method.
|
||||
struct Entry
|
||||
{
|
||||
CString key; //!< keys (for comments this is "")
|
||||
CString value; //!< values and comments (with leading ; or //)
|
||||
|
||||
bool IsComment( void ) const
|
||||
{
|
||||
const char *pBegin=value.GetString();
|
||||
while(*pBegin==' ' || *pBegin=='\t')pBegin++;
|
||||
|
||||
// "//" (comment)
|
||||
if(pBegin[0]=='/' && pBegin[1]=='/')return(true);
|
||||
|
||||
// ';' (comment)
|
||||
if(pBegin[0] == ';')return(true);
|
||||
|
||||
// emptyline (comment)
|
||||
if(pBegin[0]==0)return(true);
|
||||
|
||||
return(false);
|
||||
}
|
||||
};
|
||||
|
||||
//! constructor
|
||||
CfgFile();
|
||||
|
||||
//! destructor
|
||||
~CfgFile();
|
||||
|
||||
//!
|
||||
void SetFileName( const CString &fileName );
|
||||
|
||||
//! Automatically load new config file.
|
||||
explicit CfgFile( const CString &fileName );
|
||||
|
||||
//! Load config from memory buffer.
|
||||
CfgFile( const char *buf, int bufSize );
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// interface ICfgFile - described in ICfgFile.h
|
||||
|
||||
virtual void Release() { delete(this); }
|
||||
virtual bool Load( const CString &fileName );
|
||||
virtual bool Save( void );
|
||||
virtual void UpdateOrCreateEntry( const char *inszSection, const char *inszKey, const char *inszValue );
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//! Copy section keys to config.
|
||||
//! @return true if success, false if section not found.
|
||||
bool SetConfig( const char *section, IConfig *config );
|
||||
|
||||
private:
|
||||
|
||||
void LoadBuf( const char *buf,size_t bufSize );
|
||||
|
||||
struct Section
|
||||
{
|
||||
CString name; //!< Section name. (the first one has the name "" and is used if no section was specified)
|
||||
std::list<Entry> entries; //!< List of entries.
|
||||
};
|
||||
|
||||
// Private methods.
|
||||
|
||||
//! @return pointer to the section with the given name or pointer to the first unnamed section ""
|
||||
Section* FindSection( const CString §ion );
|
||||
|
||||
// Private fields.
|
||||
CString m_fileName; //!< Configuration file name.
|
||||
int m_modified; //!< Set to true if config file been modified.
|
||||
|
||||
std::vector<Section> m_sections; //!< List of sections in config file. (the first one has the name "" and is used if no section was specified)
|
||||
|
||||
public:
|
||||
|
||||
const char *GetSectionName(unsigned int n)
|
||||
{
|
||||
if(n>=m_sections.size())
|
||||
return(NULL);
|
||||
|
||||
return(m_sections[n].name.GetString());
|
||||
};
|
||||
|
||||
int Find(const char *sectionname)
|
||||
{
|
||||
for(std::vector<Section>::iterator it = m_sections.begin(); it!=m_sections.end(); ++it)
|
||||
{
|
||||
if (stricmp(it->name.GetString(), sectionname) == 0) return it-m_sections.begin();
|
||||
};
|
||||
return 0;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
#endif // __cfgfile_h__
|
||||
Reference in New Issue
Block a user