Skip to content

Commit

Permalink
Refactor|AbstractFile: Minor cleanup refactorings
Browse files Browse the repository at this point in the history
  • Loading branch information
danij-deng committed Oct 5, 2012
1 parent 42fe201 commit c14ae8e
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 58 deletions.
26 changes: 12 additions & 14 deletions doomsday/engine/portable/include/abstractfile.h
Expand Up @@ -90,14 +90,11 @@ class AbstractFile
*/
LumpInfo const* info() const;

/**
* @return Owning package else @c NULL if not contained.
*/
AbstractFile* container() const;
/// @return @c true= this file is contained within another.
bool isContained() const;

/**
* Accessors:
*/
/// @return The file instance which contains this.
AbstractFile& container() const;

/// @return Absolute (i.e., resolved but possibly virtual/mapped) path to this resource.
ddstring_t const* path() const;
Expand All @@ -112,13 +109,13 @@ class AbstractFile
bool hasStartup() const;

/// Mark this resource as "startup".
void setStartup(bool yes);
AbstractFile& setStartup(bool yes);

/// @return @c true if the resource is marked "custom".
bool hasCustom() const;

/// Mark this resource as "custom".
void setCustom(bool yes);
AbstractFile& setCustom(bool yes);

size_t baseOffset() const;

Expand Down Expand Up @@ -255,6 +252,10 @@ class AbstractFile
*/
//virtual AbstractFile& clearLumpCache() = 0;

protected:
/// File stream handle/wrapper.
DFile* file;

private:
/// @see filetype_t
filetype_t type_;
Expand All @@ -265,11 +266,6 @@ class AbstractFile
uint custom:1; /// < Not an original game resource.
} flags;

protected:
/// File stream handle/wrapper.
DFile* file;

private:
/// Absolute variable-length path in the vfs.
ddstring_t path_;

Expand All @@ -296,6 +292,8 @@ filetype_t AbstractFile_Type(AbstractFile const* af);

LumpInfo const* AbstractFile_Info(AbstractFile const* af);

boolean AbstractFile_IsContained(AbstractFile const* af);

AbstractFile* AbstractFile_Container(AbstractFile const* af);

ddstring_t const* AbstractFile_Path(AbstractFile const* af);
Expand Down
86 changes: 52 additions & 34 deletions doomsday/engine/portable/src/abstractfile.cpp
Expand Up @@ -28,8 +28,11 @@

#include "abstractfile.h"

de::AbstractFile::AbstractFile(filetype_t _type, char const* _path, DFile& file, LumpInfo const& _info)
: type_(_type), file(&file)
using de::DFile;
using de::AbstractFile;

AbstractFile::AbstractFile(filetype_t _type, char const* _path, DFile& file, LumpInfo const& _info)
: file(&file), type_(_type)
{
// Used to favor newer files when duplicates are pruned.
static uint fileCounter = 0;
Expand All @@ -42,159 +45,174 @@ de::AbstractFile::AbstractFile(filetype_t _type, char const* _path, DFile& file,
F_CopyLumpInfo(&info_, &_info);
}

de::AbstractFile::~AbstractFile()
AbstractFile::~AbstractFile()
{
FS::releaseFile(this);
Str_Free(&path_);
F_DestroyLumpInfo(&info_);
if(file) delete file;
}

filetype_t de::AbstractFile::type() const
filetype_t AbstractFile::type() const
{
return type_;
}

LumpInfo const* de::AbstractFile::info() const
LumpInfo const* AbstractFile::info() const
{
return &info_;
}

de::AbstractFile* de::AbstractFile::container() const
bool AbstractFile::isContained() const
{
return !!info_.container;
}

AbstractFile& AbstractFile::container() const
{
return reinterpret_cast<de::AbstractFile*>(info_.container);
AbstractFile* cont = reinterpret_cast<AbstractFile*>(info_.container);
if(!cont) throw de::Error("AbstractFile::container", QString("%s is not contained").arg(Str_Text(path())));
return *cont;
}

size_t de::AbstractFile::baseOffset() const
size_t AbstractFile::baseOffset() const
{
return (file? file->baseOffset() : 0);
}

de::DFile* de::AbstractFile::handle()
DFile* AbstractFile::handle()
{
return file;
}

ddstring_t const* de::AbstractFile::path() const
ddstring_t const* AbstractFile::path() const
{
return &path_;
}

uint de::AbstractFile::loadOrderIndex() const
uint AbstractFile::loadOrderIndex() const
{
return order;
}

uint de::AbstractFile::lastModified() const
uint AbstractFile::lastModified() const
{
return info_.lastModified;
}

bool de::AbstractFile::hasStartup() const
bool AbstractFile::hasStartup() const
{
return !!flags.startup;
}

void de::AbstractFile::setStartup(bool yes)
AbstractFile& AbstractFile::setStartup(bool yes)
{
flags.startup = yes;
return *this;
}

bool de::AbstractFile::hasCustom() const
bool AbstractFile::hasCustom() const
{
return !!flags.custom;
}

void de::AbstractFile::setCustom(bool yes)
AbstractFile& AbstractFile::setCustom(bool yes)
{
flags.custom = yes;
return *this;
}

/**
* C Wrapper API:
*/

#define TOINTERNAL(inst) \
(inst) != 0? reinterpret_cast<de::AbstractFile*>(inst) : NULL
(inst) != 0? reinterpret_cast<AbstractFile*>(inst) : NULL

#define TOINTERNAL_CONST(inst) \
(inst) != 0? reinterpret_cast<de::AbstractFile const*>(inst) : NULL
(inst) != 0? reinterpret_cast<AbstractFile const*>(inst) : NULL

#define SELF(inst) \
DENG2_ASSERT(inst); \
de::AbstractFile* self = TOINTERNAL(inst)
AbstractFile* self = TOINTERNAL(inst)

#define SELF_CONST(inst) \
DENG2_ASSERT(inst); \
de::AbstractFile const* self = TOINTERNAL_CONST(inst)
AbstractFile const* self = TOINTERNAL_CONST(inst)

filetype_t AbstractFile_Type(AbstractFile const* af)
filetype_t AbstractFile_Type(struct abstractfile_s const* af)
{
SELF_CONST(af);
return self->type();
}

LumpInfo const* AbstractFile_Info(AbstractFile const* af)
LumpInfo const* AbstractFile_Info(struct abstractfile_s const* af)
{
SELF_CONST(af);
return self->info();
}

AbstractFile* AbstractFile_Container(AbstractFile const* af)
boolean AbstractFile_IsContained(struct abstractfile_s const* af)
{
SELF_CONST(af);
return self->isContained();
}

struct abstractfile_s* AbstractFile_Container(struct abstractfile_s const* af)
{
SELF_CONST(af);
return reinterpret_cast<AbstractFile*>(self->container());
return reinterpret_cast<struct abstractfile_s*>(&self->container());
}

size_t AbstractFile_BaseOffset(AbstractFile const* af)
size_t AbstractFile_BaseOffset(struct abstractfile_s const* af)
{
SELF_CONST(af);
return self->baseOffset();
}

DFile* AbstractFile_Handle(AbstractFile* af)
struct dfile_s* AbstractFile_Handle(struct abstractfile_s* af)
{
SELF(af);
return reinterpret_cast<DFile*>(self->handle());
return reinterpret_cast<struct dfile_s*>(self->handle());
}

ddstring_t const* AbstractFile_Path(AbstractFile const* af)
ddstring_t const* AbstractFile_Path(struct abstractfile_s const* af)
{
SELF_CONST(af);
return self->path();
}

uint AbstractFile_LoadOrderIndex(AbstractFile const* af)
uint AbstractFile_LoadOrderIndex(struct abstractfile_s const* af)
{
SELF_CONST(af);
return self->loadOrderIndex();
}

uint AbstractFile_LastModified(AbstractFile const* af)
uint AbstractFile_LastModified(struct abstractfile_s const* af)
{
SELF_CONST(af);
return self->lastModified();
}

boolean AbstractFile_HasStartup(AbstractFile const* af)
boolean AbstractFile_HasStartup(struct abstractfile_s const* af)
{
SELF_CONST(af);
return self->hasStartup();
}

void AbstractFile_SetStartup(AbstractFile* af, boolean yes)
void AbstractFile_SetStartup(struct abstractfile_s* af, boolean yes)
{
SELF(af);
self->setStartup(CPP_BOOL(yes));
}

boolean AbstractFile_HasCustom(AbstractFile const* af)
boolean AbstractFile_HasCustom(struct abstractfile_s const* af)
{
SELF_CONST(af);
return self->hasCustom();
}

void AbstractFile_SetCustom(AbstractFile* af, boolean yes)
void AbstractFile_SetCustom(struct abstractfile_s* af, boolean yes)
{
SELF(af);
self->setCustom(CPP_BOOL(yes));
Expand Down
18 changes: 8 additions & 10 deletions doomsday/engine/portable/src/lumpfile.cpp
Expand Up @@ -45,12 +45,12 @@ LumpFile::~LumpFile()

PathDirectoryNode* LumpFile::lumpDirectoryNode(int lumpIdx)
{
return container()->lumpDirectoryNode(lumpInfo(lumpIdx)->lumpIdx);
return container().lumpDirectoryNode(lumpInfo(lumpIdx)->lumpIdx);
}

AutoStr* LumpFile::composeLumpPath(int lumpIdx, char delimiter)
{
return container()->composeLumpPath(lumpInfo(lumpIdx)->lumpIdx, delimiter);
return container().composeLumpPath(lumpInfo(lumpIdx)->lumpIdx, delimiter);
}

LumpInfo const* LumpFile::lumpInfo(int /*lumpIdx*/)
Expand All @@ -67,24 +67,24 @@ size_t LumpFile::lumpSize(int lumpIdx)

size_t LumpFile::readLump(int lumpIdx, uint8_t* buffer, bool tryCache)
{
return container()->readLump(lumpInfo(lumpIdx)->lumpIdx, buffer, tryCache);
return container().readLump(lumpInfo(lumpIdx)->lumpIdx, buffer, tryCache);
}

size_t LumpFile::readLump(int lumpIdx, uint8_t* buffer, size_t startOffset,
size_t length, bool tryCache)
{
return container()->readLump(lumpInfo(lumpIdx)->lumpIdx, buffer,
startOffset, length, tryCache);
return container().readLump(lumpInfo(lumpIdx)->lumpIdx, buffer,
startOffset, length, tryCache);
}

uint8_t const* LumpFile::cacheLump(int lumpIdx)
{
return container()->cacheLump(lumpInfo(lumpIdx)->lumpIdx);
return container().cacheLump(lumpInfo(lumpIdx)->lumpIdx);
}

LumpFile& LumpFile::unlockLump(int lumpIdx)
{
container()->unlockLump(lumpInfo(lumpIdx)->lumpIdx);
container().unlockLump(lumpInfo(lumpIdx)->lumpIdx);
return *this;
}

Expand All @@ -94,9 +94,7 @@ int LumpFile::publishLumpsToDirectory(LumpDirectory* directory)
if(directory)
{
// This *is* the lump, so insert ourself as a lump of our container in the directory.
AbstractFile* container = reinterpret_cast<AbstractFile*>(info()->container);
DENG_ASSERT(container);
directory->catalogLumps(*container, info()->lumpIdx, 1);
directory->catalogLumps(container(), info()->lumpIdx, 1);
}
return 1;
}
Expand Down

0 comments on commit c14ae8e

Please sign in to comment.