- transition to new FileReader interface complete, but untested.

This commit is contained in:
Christoph Oelckers 2018-03-11 12:33:46 +01:00
commit b14ee50d0d
31 changed files with 1253 additions and 1708 deletions

View file

@ -45,7 +45,7 @@
//==========================================================================
//
// FileReader that reads from a lump's cache
// File reader that reads from a lump's cache
//
//==========================================================================
@ -212,11 +212,11 @@ FCompressedBuffer FResourceLump::GetRawData()
//==========================================================================
//
// Returns the owner's FileReader if it can be used to access this lump
// Returns the owner's FileRdr if it can be used to access this lump
//
//==========================================================================
FileReader *FResourceLump::GetReader()
FileRdr *FResourceLump::GetReader()
{
return NULL;
}
@ -227,9 +227,9 @@ FileReader *FResourceLump::GetReader()
//
//==========================================================================
FileReader *FResourceLump::NewReader()
FileRdr FResourceLump::NewReader()
{
return new FLumpReader(this);
return FileRdr(new FLumpReader(this));
}
//==========================================================================
@ -276,46 +276,45 @@ int FResourceLump::ReleaseCache()
//
//==========================================================================
typedef FResourceFile * (*CheckFunc)(const char *filename, FileReader *file, bool quiet);
typedef FResourceFile * (*CheckFunc)(const char *filename, FileRdr &file, bool quiet);
FResourceFile *CheckWad(const char *filename, FileReader *file, bool quiet);
FResourceFile *CheckGRP(const char *filename, FileReader *file, bool quiet);
FResourceFile *CheckRFF(const char *filename, FileReader *file, bool quiet);
FResourceFile *CheckPak(const char *filename, FileReader *file, bool quiet);
FResourceFile *CheckZip(const char *filename, FileReader *file, bool quiet);
FResourceFile *Check7Z(const char *filename, FileReader *file, bool quiet);
FResourceFile *CheckLump(const char *filename, FileReader *file, bool quiet);
FResourceFile *CheckDir(const char *filename, FileReader *file, bool quiet);
FResourceFile *CheckWad(const char *filename, FileRdr &file, bool quiet);
FResourceFile *CheckGRP(const char *filename, FileRdr &file, bool quiet);
FResourceFile *CheckRFF(const char *filename, FileRdr &file, bool quiet);
FResourceFile *CheckPak(const char *filename, FileRdr &file, bool quiet);
FResourceFile *CheckZip(const char *filename, FileRdr &file, bool quiet);
FResourceFile *Check7Z(const char *filename, FileRdr &file, bool quiet);
FResourceFile *CheckLump(const char *filename,FileRdr &file, bool quiet);
FResourceFile *CheckDir(const char *filename, bool quiet);
static CheckFunc funcs[] = { CheckWad, CheckZip, Check7Z, CheckPak, CheckGRP, CheckRFF, CheckLump };
FResourceFile *FResourceFile::OpenResourceFile(const char *filename, FileReader *file, bool quiet, bool containeronly)
FResourceFile *FResourceFile::DoOpenResourceFile(const char *filename, FileRdr &file, bool quiet, bool containeronly)
{
bool mustclose = false;
if (file == NULL)
{
try
{
file = new FileReader(filename);
mustclose = true;
}
catch (CRecoverableError &)
{
return NULL;
}
}
for(size_t i = 0; i < countof(funcs) - containeronly; i++)
{
FResourceFile *resfile = funcs[i](filename, file, quiet);
if (resfile != NULL) return resfile;
}
if (mustclose) delete file;
return NULL;
}
FResourceFile *FResourceFile::OpenResourceFile(const char *filename, FileRdr &file, bool quiet, bool containeronly)
{
return DoOpenResourceFile(filename, file, quiet, containeronly);
}
FResourceFile *FResourceFile::OpenResourceFile(const char *filename, bool quiet, bool containeronly)
{
FileRdr file;
if (!file.OpenFile(filename)) return nullptr;
return DoOpenResourceFile(filename, file, quiet, containeronly);
}
FResourceFile *FResourceFile::OpenDirectory(const char *filename, bool quiet)
{
return CheckDir(filename, NULL, quiet);
return CheckDir(filename, quiet);
}
//==========================================================================
@ -324,18 +323,17 @@ FResourceFile *FResourceFile::OpenDirectory(const char *filename, bool quiet)
//
//==========================================================================
FResourceFile::FResourceFile(const char *filename, FileReader *r)
FResourceFile::FResourceFile(const char *filename, FileRdr &r)
{
if (filename != NULL) Filename = copystring(filename);
else Filename = NULL;
Reader = r;
Reader = std::move(r);
}
FResourceFile::~FResourceFile()
{
if (Filename != NULL) delete [] Filename;
delete Reader;
}
int lumpcmp(const void * a, const void * b)
@ -607,10 +605,10 @@ FResourceLump *FResourceFile::FindLump(const char *name)
//
//==========================================================================
FileReader *FUncompressedLump::GetReader()
FileRdr *FUncompressedLump::GetReader()
{
Owner->Reader->Seek(Position, SEEK_SET);
return Owner->Reader;
Owner->Reader.Seek(Position, FileRdr::SeekSet);
return &Owner->Reader;
}
//==========================================================================
@ -621,7 +619,7 @@ FileReader *FUncompressedLump::GetReader()
int FUncompressedLump::FillCache()
{
const char * buffer = Owner->Reader->GetBuffer();
const char * buffer = Owner->Reader.GetBuffer();
if (buffer != NULL)
{
@ -631,9 +629,9 @@ int FUncompressedLump::FillCache()
return -1;
}
Owner->Reader->Seek(Position, SEEK_SET);
Owner->Reader.Seek(Position, FileRdr::SeekSet);
Cache = new char[LumpSize];
Owner->Reader->Read(Cache, LumpSize);
Owner->Reader.Read(Cache, LumpSize);
RefCount = 1;
return 1;
}
@ -644,7 +642,7 @@ int FUncompressedLump::FillCache()
//
//==========================================================================
FUncompressedFile::FUncompressedFile(const char *filename, FileReader *r)
FUncompressedFile::FUncompressedFile(const char *filename, FileRdr &r)
: FResourceFile(filename, r)
{
Lumps = NULL;
@ -669,11 +667,11 @@ FExternalLump::FExternalLump(const char *_filename, int filesize)
if (filesize == -1)
{
FileReader f;
FileRdr f;
if (f.Open(_filename))
if (f.OpenFile(_filename))
{
LumpSize = f.GetLength();
LumpSize = (int)f.GetLength();
}
else
{
@ -702,9 +700,9 @@ FExternalLump::~FExternalLump()
int FExternalLump::FillCache()
{
Cache = new char[LumpSize];
FileReader f;
FileRdr f;
if (f.Open(filename))
if (f.OpenFile(filename))
{
f.Read(Cache, LumpSize);
}
@ -728,7 +726,7 @@ bool FMemoryFile::Open(bool quiet)
Lumps->FullName = fname;
Lumps->Owner = this;
Lumps->Position = 0;
Lumps->LumpSize = Reader->GetLength();
Lumps->LumpSize = (int)Reader.GetLength();
Lumps->Namespace = ns_global;
Lumps->Flags = 0;
Lumps->FullName = NULL;