- transition to new FileReader interface complete, but untested.
This commit is contained in:
parent
247785bca2
commit
b14ee50d0d
31 changed files with 1253 additions and 1708 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue