From 55cd8e7c8c8fed46d0c3e1ca6fc3e5ce97e94579 Mon Sep 17 00:00:00 2001 From: danij Date: Wed, 18 Jun 2014 02:06:44 +0100 Subject: [PATCH] Refactor|libdoomsday|FS1: Removed F_FindFileForLumpNum() --- doomsday/client/src/audio/s_cache.cpp | 59 ++++++++----------- doomsday/client/src/audio/s_mus.cpp | 29 +++++---- doomsday/client/src/ui/finaleinterpreter.cpp | 14 ++--- .../include/doomsday/filesys/fs_main.h | 2 - doomsday/libdoomsday/src/defs/dedfile.cpp | 16 ++--- doomsday/libdoomsday/src/filesys/fs_main.cpp | 13 ---- doomsday/libdoomsday/src/filesys/zip.cpp | 1 + 7 files changed, 58 insertions(+), 76 deletions(-) diff --git a/doomsday/client/src/audio/s_cache.cpp b/doomsday/client/src/audio/s_cache.cpp index bff9758800..e569ffa7b3 100644 --- a/doomsday/client/src/audio/s_cache.cpp +++ b/doomsday/client/src/audio/s_cache.cpp @@ -580,24 +580,21 @@ static sfxsample_t *cacheSample(int id, sfxinfo_t const *info) return 0; } - size_t lumpLength = App_FileSystem().lump(info->lumpNum).size(); - if(lumpLength <= 8) return 0; - - int lumpIdx; - File1 *file = F_FindFileForLumpNum(info->lumpNum, &lumpIdx); - DENG2_ASSERT(file != 0); + File1 &lump = App_FileSystem().lump(info->lumpNum); + if(lump.size() <= 8) return 0; char hdr[12]; - F_ReadLumpSection(file, lumpIdx, (uint8_t *)hdr, 0, 12); + F_ReadLumpSection(&lump.container(), lump.info().lumpIdx, + (uint8_t *)hdr, 0, 12); // Is this perhaps a WAV sound? if(WAV_CheckFormat(hdr)) { // Load as WAV, then. - uint8_t const *sp = F_CacheLump(file, lumpIdx); + uint8_t const *sp = F_CacheLump(&lump.container(), lump.info().lumpIdx); - data = WAV_MemoryLoad((byte const *) sp, lumpLength, &bytesPer, &rate, &numSamples); - F_UnlockLump(file, lumpIdx); + data = WAV_MemoryLoad((byte const *) sp, lump.size(), &bytesPer, &rate, &numSamples); + F_UnlockLump(&lump.container(), lump.info().lumpIdx); if(!data) { @@ -623,35 +620,31 @@ static sfxsample_t *cacheSample(int id, sfxinfo_t const *info) size_t lumpLength = 0; if(info->lumpNum >= 0) { - lumpLength = App_FileSystem().lump(info->lumpNum).size(); - } - - if(lumpLength > 8) - { - int lumpIdx; - File1 *file = F_FindFileForLumpNum(info->lumpNum, &lumpIdx); - DENG2_ASSERT(file != 0); + File1 &lump = App_FileSystem().lump(info->lumpNum); - uint8_t hdr[8]; - F_ReadLumpSection(file, lumpIdx, hdr, 0, 8); - int head = SHORT(*(short const *) (hdr)); - rate = SHORT(*(short const *) (hdr + 2)); - numSamples = de::max(0, LONG(*(int const *) (hdr + 4))); + if(lump.size() > 8) + { + uint8_t hdr[8]; + F_ReadLumpSection(&lump.container(), lump.info().lumpIdx, hdr, 0, 8); + int head = SHORT(*(short const *) (hdr)); + rate = SHORT(*(short const *) (hdr + 2)); + numSamples = de::max(0, LONG(*(int const *) (hdr + 4))); - bytesPer = 1; // 8-bit. + bytesPer = 1; // 8-bit. - if(head == 3 && numSamples > 0 && (unsigned) numSamples <= lumpLength - 8) - { - // The sample data can be used as-is - load directly from the lump cache. - uint8_t const *data = F_CacheLump(file, lumpIdx) + 8; // Skip the header. + if(head == 3 && numSamples > 0 && (unsigned) numSamples <= lumpLength - 8) + { + // The sample data can be used as-is - load directly from the lump cache. + uint8_t const *data = F_CacheLump(&lump.container(), lump.info().lumpIdx) + 8; // Skip the header. - // Insert a copy of this into the cache. - SfxCache *node = Sfx_CacheInsert(id, data, bytesPer * numSamples, numSamples, - bytesPer, rate, info->group); + // Insert a copy of this into the cache. + SfxCache *node = Sfx_CacheInsert(id, data, bytesPer * numSamples, numSamples, + bytesPer, rate, info->group); - F_UnlockLump(file, lumpIdx); + F_UnlockLump(&lump.container(), lump.info().lumpIdx); - return &node->sample; + return &node->sample; + } } } diff --git a/doomsday/client/src/audio/s_mus.cpp b/doomsday/client/src/audio/s_mus.cpp index 96c01a104c..1eb716f7d0 100644 --- a/doomsday/client/src/audio/s_mus.cpp +++ b/doomsday/client/src/audio/s_mus.cpp @@ -208,15 +208,19 @@ void Mus_Stop(void) */ dd_bool Mus_IsMUSLump(lumpnum_t lumpNum) { - char buf[4]; - int lumpIdx; - File1 *file = F_FindFileForLumpNum(lumpNum, &lumpIdx); - if(!file) return false; + try + { + File1 const &lump = App_FileSystem().lump(lumpNum); - F_ReadLumpSection(file, lumpIdx, (uint8_t *)buf, 0, 4); + char buf[4]; + F_ReadLumpSection(&lump.container(), lump.info().lumpIdx, (uint8_t *)buf, 0, 4); - // ASCII "MUS" and CTRL-Z (hex 4d 55 53 1a) - return !strncmp(buf, "MUS\x01a", 4); + // ASCII "MUS" and CTRL-Z (hex 4d 55 53 1a) + return !strncmp(buf, "MUS\x01a", 4); + } + catch(LumpIndex::NotFoundError const&) + {} // Ignore error. + return false; } /** @@ -309,13 +313,12 @@ int Mus_StartLump(lumpnum_t lumpNum, dd_bool looped, dd_bool canPlayMUS) // any player which relies on the it for format recognition works as // expected. - size_t const lumpLength = App_FileSystem().lump(lumpNum).size(); - uint8_t *buf = (uint8_t *) M_Malloc(lumpLength); - int lumpIdx; - File1 *file = F_FindFileForLumpNum(lumpNum, &lumpIdx); + File1 &lump = App_FileSystem().lump(lumpNum); + uint8_t *buf = (uint8_t *) M_Malloc(lump.size()); + + F_ReadLumpSection(&lump.container(), lump.info().lumpIdx, buf, 0, lump.size()); + M_Mus2Midi((void *)buf, lump.size(), Str_Text(srcFile)); - F_ReadLumpSection(file, lumpIdx, buf, 0, lumpLength); - M_Mus2Midi((void *)buf, lumpLength, Str_Text(srcFile)); M_Free(buf); return AudioDriver_Music_PlayNativeFile(Str_Text(srcFile), looped); diff --git a/doomsday/client/src/ui/finaleinterpreter.cpp b/doomsday/client/src/ui/finaleinterpreter.cpp index 16a153d575..158e8cb9f5 100644 --- a/doomsday/client/src/ui/finaleinterpreter.cpp +++ b/doomsday/client/src/ui/finaleinterpreter.cpp @@ -2101,18 +2101,16 @@ DEFFC(TextFromLump) lumpNum = F_LumpNumForName(OP_CSTRING(3)); if(lumpNum >= 0) { - int lumpIdx; - size_t lumpSize = App_FileSystem().lump(lumpNum).size(); - de::File1 *file = F_FindFileForLumpNum(lumpNum, &lumpIdx); - uint8_t const *lumpPtr = F_CacheLump(file, lumpIdx); + de::File1 &lump = App_FileSystem().lump(lumpNum); + uint8_t const *data = F_CacheLump(&lump.container(), lump.info().lumpIdx); - size_t bufSize = 2 * lumpSize + 1; + size_t bufSize = 2 * lump.size() + 1; char *str = (char *) M_Calloc(bufSize); char *out = str; - for(size_t i = 0; i < lumpSize; ++i) + for(size_t i = 0; i < lump.size(); ++i) { - char ch = (char)(lumpPtr[i]); + char ch = (char)(data[i]); if(ch == '\r') continue; if(ch == '\n') { @@ -2124,7 +2122,7 @@ DEFFC(TextFromLump) *out++ = ch; } } - F_UnlockLump(file, lumpIdx); + F_UnlockLump(&lump.container(), lump.info().lumpIdx); FIData_TextCopy(obj, str); free(str); diff --git a/doomsday/libdoomsday/include/doomsday/filesys/fs_main.h b/doomsday/libdoomsday/include/doomsday/filesys/fs_main.h index 23752c60b1..3f4456f115 100644 --- a/doomsday/libdoomsday/include/doomsday/filesys/fs_main.h +++ b/doomsday/libdoomsday/include/doomsday/filesys/fs_main.h @@ -591,8 +591,6 @@ LIBDOOMSDAY_PUBLIC de::FileHandle *F_Open(char const *nativePath, char const *mo LIBDOOMSDAY_PUBLIC lumpnum_t F_LumpNumForName(char const *name); -LIBDOOMSDAY_PUBLIC de::File1 *F_FindFileForLumpNum(lumpnum_t lumpNum, int *lumpIdx); - LIBDOOMSDAY_PUBLIC void F_Delete(de::FileHandle *hndl); LIBDOOMSDAY_PUBLIC size_t F_ReadLumpSection(de::File1 *file, int lumpIdx, uint8_t *buffer, size_t startOffset, size_t length); diff --git a/doomsday/libdoomsday/src/defs/dedfile.cpp b/doomsday/libdoomsday/src/defs/dedfile.cpp index 1587942c2a..c17b353fc6 100644 --- a/doomsday/libdoomsday/src/defs/dedfile.cpp +++ b/doomsday/libdoomsday/src/defs/dedfile.cpp @@ -62,18 +62,20 @@ void Def_ReadProcessDED(ded_t *defs, char const* path) int DED_ReadLump(ded_t *ded, lumpnum_t lumpNum) { - int lumpIdx; - if(File1 *file = F_FindFileForLumpNum(lumpNum, &lumpIdx)) + try { - if(App_FileSystem().lump(lumpNum).size() != 0) + File1 const &lump = App_FileSystem().lump(lumpNum); + if(lump.size() > 0) { - uint8_t const *lumpPtr = F_CacheLump(file, lumpIdx); - String sourcePath = file->composePath(); - DED_ReadData(ded, (char const *)lumpPtr, sourcePath.toUtf8().constData()); - F_UnlockLump(file, lumpIdx); + uint8_t const *data = F_CacheLump(&lump.container(), lump.info().lumpIdx); + String sourcePath = lump.container().composePath(); + DED_ReadData(ded, (char const *)data, sourcePath.toUtf8().constData()); + F_UnlockLump(&lump.container(), lump.info().lumpIdx); } return true; } + catch(LumpIndex::NotFoundError const&) + {} // Ignore error. DED_SetError("Bad lump number."); return false; } diff --git a/doomsday/libdoomsday/src/filesys/fs_main.cpp b/doomsday/libdoomsday/src/filesys/fs_main.cpp index a2307a8bc4..3328ad690f 100644 --- a/doomsday/libdoomsday/src/filesys/fs_main.cpp +++ b/doomsday/libdoomsday/src/filesys/fs_main.cpp @@ -1368,16 +1368,3 @@ void F_UnlockLump(File1 *file, int lumpIdx) } file->unlock(); } - -File1 *F_FindFileForLumpNum(lumpnum_t lumpNum, int *lumpIdx) -{ - try - { - File1 const &lump = App_FileSystem().lump(lumpNum); - if(lumpIdx) *lumpIdx = lump.info().lumpIdx; - return &lump.container(); - } - catch(LumpIndex::NotFoundError const&) - {} // Ignore error. - return 0; -} diff --git a/doomsday/libdoomsday/src/filesys/zip.cpp b/doomsday/libdoomsday/src/filesys/zip.cpp index df5a4df357..c496427b97 100644 --- a/doomsday/libdoomsday/src/filesys/zip.cpp +++ b/doomsday/libdoomsday/src/filesys/zip.cpp @@ -356,6 +356,7 @@ DENG2_PIMPL(Zip) Zip::Zip(FileHandle &hndl, String path, FileInfo const &info, File1 *container) : File1(hndl, path, info, container) + , LumpIndex(true/*paths are unique*/) , d(new Instance(this)) { // Scan the end of the file for the central directory end record.