1
0
forked from 0ad/0ad

Minor additions to CConfig

This was SVN commit r69.
This commit is contained in:
MarkT 2003-11-22 02:38:03 +00:00
parent ffc7256f4e
commit d2538c87e8
2 changed files with 25 additions and 20 deletions

View File

@ -1,6 +1,7 @@
// Last modified: 13 November 2003 (Mark Thompson)
// Last modified: 22 November 2003 (Mark Thompson)
// TODO: A few changes from VFS -> CFile usage if required.
// TODO: Optimizations, when we've decided what needs to be done.
#include "Config.h"
#include "vfs.h"
@ -19,11 +20,12 @@ running." );
// SConfigData: Internal file representation
//--------------------------------------------------------
SConfigData::SConfigData( CStr _Filename, void* _Data, LoaderFunction _DynamicLoader )
SConfigData::SConfigData( CStr _Filename, void* _Data, LoaderFunction _DynamicLoader, bool _Static )
{
Filename = _Filename;
Data = _Data;
DynamicLoader = _DynamicLoader;
Static = _Static;
Timestamp = TIME_UNREGISTERED;
}
@ -48,7 +50,7 @@ CConfig::CConfig()
// Add a file to the registered list.
//--------------------------------------------------------
PS_RESULT CConfig::Register( CStr Filename, void* Data, LoaderFunction DynamicLoader )
PS_RESULT CConfig::Register( CStr Filename, void* Data, LoaderFunction DynamicLoader, bool Static )
{
assert( DynamicLoader != NULL );
@ -76,17 +78,10 @@ PS_RESULT CConfig::Register( CStr Filename, void* Data, LoaderFunction DynamicLo
return( PS_FILE_NOT_FOUND );
}
m_FileList.push_back( SConfigData( Filename, Data, DynamicLoader ) );
m_FileList.push_back( SConfigData( Filename, Data, DynamicLoader, Static ) );
i = m_FileList.begin();
if( m_LogFile )
{
CStr Report = _T( "Adding file: " );
Report += CStr( Filename );
m_LogFile->WriteText( (const TCHAR*)Report );
}
return( PS_OK );
}
@ -102,10 +97,16 @@ PS_RESULT CConfig::Update()
_int failed = 0;
struct stat FileInfo;
for( slice = 0; ( i != m_FileList.end() ) && ( slice < CONFIG_SLICE ); i++, slice++ )
for( slice = 0; ( i != m_FileList.end() ) && ( slice < CONFIG_SLICE ); i++ )
{
// Ignore static files
if( i->Static )
continue;
slice++;
// TODO: CFile change on following line.
if( vfs_stat( i->Filename, &FileInfo ) )
{
// We can't find the file.
@ -252,7 +253,7 @@ PS_RESULT CConfig::ReloadAll()
if( m_LogFile )
{
CStr Error = _T( "Load failed on: " );
Error += CStr( i->Filename );
Error += i->Filename;
Error += CStr( "Load function returned: " );
Error += CStr( Result );
m_LogFile->WriteError( (const TCHAR*)Error );
@ -262,6 +263,9 @@ PS_RESULT CConfig::ReloadAll()
return( PS_FILE_LOAD_FAILURE ); // Oops. Serious problem, bail.
}
}
i = m_FileList.begin();
if( notfound )
return( PS_FILE_NOT_FOUND );
if( failed )
@ -272,7 +276,7 @@ PS_RESULT CConfig::ReloadAll()
//--------------------------------------------------------
// CConfig::Clear()
//
// Erases registered list.
// Erases registered and static lists.
//--------------------------------------------------------
void CConfig::Clear()

View File

@ -4,7 +4,7 @@ Config.h
CConfig dynamic data file manager class
Mark Thompson (mot20@cam.ac.uk)
Last modified: 6 November 2003 (Mark Thompson)
Last modified: 22 November 2003 (Mark Thompson)
--Overview--
@ -89,8 +89,9 @@ struct SConfigData
CStr Filename;
LoaderFunction DynamicLoader;
void* Data;
bool Static;
time_t Timestamp;
SConfigData( CStr _Filename, void* _Data, LoaderFunction _DynamicLoader );
SConfigData( CStr _Filename, void* _Data, LoaderFunction _DynamicLoader, bool _Static );
};
class CConfig : public Singleton<CConfig>
@ -98,12 +99,12 @@ class CConfig : public Singleton<CConfig>
public:
CConfig();
//Register a new file with it's associated loader function
PS_RESULT Register( CStr Filename, void* Data, LoaderFunction DynamicLoader );
PS_RESULT Register( CStr Filename, void* Data, LoaderFunction DynamicLoader, bool Static = false );
//Check all registered files, reload as neccessary
PS_RESULT Update();
//Force an update of all files in the registered list.
//Force an update of all files in the registered and static lists.
PS_RESULT ReloadAll();
//Erase the entire list of registered files
//Erase the entire list of registered and static files
void Clear();
//Attach or detach a logfile class.
void Attach( CLogFile* LogFile );