87 lines
1.9 KiB
C++
87 lines
1.9 KiB
C++
#include "ifilesystem.h"
|
|
#include "tier1/interface.h"
|
|
#include "tier0/lib.h"
|
|
|
|
size_t IFileHandle::Write( const void *pData, size_t nDataSize )
|
|
{
|
|
return m_pFileSystem->Write(this, pData, nDataSize);
|
|
}
|
|
|
|
size_t IFileHandle::Read( void *pData, size_t nDataSize )
|
|
{
|
|
return m_pFileSystem->Read(this, pData, nDataSize);
|
|
}
|
|
|
|
size_t IFileHandle::Seek( ESeekMode eSeekMode, size_t nOffset )
|
|
{
|
|
return m_pFileSystem->Seek(this, eSeekMode, nOffset);
|
|
}
|
|
|
|
size_t IFileHandle::Tell( void )
|
|
{
|
|
return m_pFileSystem->Tell(this);
|
|
}
|
|
|
|
void IFileHandle::Close( void )
|
|
{
|
|
m_pFileSystem->Close(this);
|
|
}
|
|
|
|
|
|
class CFileSystem : public IFileSystem
|
|
{
|
|
public:
|
|
virtual void Init() override {
|
|
filesystem_backend = (IFileSystem*)CreateInterface(FILESYSTEM_BACKEND_INTERFACE_NAME, NULL);
|
|
filesystem_backend->Init();
|
|
filesystem_pak = (IFileSystem*)CreateInterface(FILESYSTEM_PAK_INTERFACE_NAME, NULL);
|
|
filesystem_pak->Init();
|
|
};
|
|
virtual void Shutdown() override {
|
|
|
|
};
|
|
|
|
virtual IFileHandle *Open( const char *szFileName, int eOpCode ) override
|
|
{
|
|
IFileHandle *pHandle = NULL;
|
|
|
|
pHandle = filesystem_pak->Open(szFileName, eOpCode);
|
|
if (pHandle) return pHandle;
|
|
|
|
pHandle = filesystem_backend->Open(szFileName, eOpCode);
|
|
if (pHandle) return pHandle;
|
|
|
|
return NULL;
|
|
}
|
|
|
|
virtual size_t Write( IFileHandle *pFile, const void *pData, size_t nDataSize ) override
|
|
{
|
|
return pFile->Write(pData, nDataSize);
|
|
}
|
|
|
|
virtual size_t Read( IFileHandle *pFile, void *pData, size_t nDataSize ) override
|
|
{
|
|
return pFile->Read(pData, nDataSize);
|
|
}
|
|
|
|
virtual size_t Seek( IFileHandle *pFile, ESeekMode eSeekMode, size_t nOffset ) override
|
|
{
|
|
return pFile->Seek(eSeekMode, nOffset);
|
|
}
|
|
|
|
virtual size_t Tell( IFileHandle *pFile ) override
|
|
{
|
|
return pFile->Tell();
|
|
}
|
|
virtual void Close( IFileHandle *pFile ) override
|
|
{
|
|
|
|
}
|
|
};
|
|
|
|
IFileSystem *filesystem;
|
|
IFileSystem *filesystem_backend;
|
|
IFileSystem *filesystem_pak;
|
|
|
|
EXPOSE_INTERFACE(CFileSystem, IFileSystem, FILESYSTEM_INTERFACE_NAME);
|