From 4906d287cb19ee5bd78f3e467bbb659de597792e Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 21 Aug 2023 21:26:44 +0200 Subject: [PATCH] - use std::vector to pass the file list to InitMultipleFiles --- src/common/console/c_dispatch.cpp | 2 +- src/common/console/c_dispatch.h | 4 ++- src/common/console/c_enginecmds.cpp | 1 + src/common/filesystem/filesystem.cpp | 22 ++++++------- src/common/filesystem/filesystem.h | 2 +- src/common/objects/dobjgc.cpp | 1 + src/common/platform/win32/i_mainwindow.cpp | 2 +- .../rendering/vulkan/shaders/vk_shader.cpp | 1 + src/common/startscreen/startscreen_strife.cpp | 1 + src/common/textures/gametexture.cpp | 1 + src/common/textures/texturemanager.cpp | 2 ++ src/common/utility/findfile.cpp | 16 +++++----- src/common/utility/findfile.h | 12 +++---- src/common/utility/palette.cpp | 1 + src/d_iwad.cpp | 15 +++++---- src/d_main.cpp | 31 ++++++++++++------- src/d_main.h | 4 +-- 17 files changed, 67 insertions(+), 51 deletions(-) diff --git a/src/common/console/c_dispatch.cpp b/src/common/console/c_dispatch.cpp index 7de13e2ea5..7bac0b6987 100644 --- a/src/common/console/c_dispatch.cpp +++ b/src/common/console/c_dispatch.cpp @@ -1003,7 +1003,7 @@ void FExecList::ExecCommands() const } } -void FExecList::AddPullins(TArray &wads, FConfigFile *config) const +void FExecList::AddPullins(std::vector& wads, FConfigFile *config) const { for (unsigned i = 0; i < Pullins.Size(); ++i) { diff --git a/src/common/console/c_dispatch.h b/src/common/console/c_dispatch.h index 532ed9b929..e8b2bfdf0a 100644 --- a/src/common/console/c_dispatch.h +++ b/src/common/console/c_dispatch.h @@ -34,6 +34,8 @@ #ifndef __C_DISPATCH_H__ #define __C_DISPATCH_H__ +#include +#include #include #include #include "c_console.h" @@ -52,7 +54,7 @@ struct FExecList void AddCommand(const char *cmd, const char *file = nullptr); void ExecCommands() const; - void AddPullins(TArray &wads, FConfigFile *config) const; + void AddPullins(std::vector &wads, FConfigFile *config) const; }; extern bool ParsingKeyConf, UnsafeExecutionContext; diff --git a/src/common/console/c_enginecmds.cpp b/src/common/console/c_enginecmds.cpp index 6c914db662..40be686881 100644 --- a/src/common/console/c_enginecmds.cpp +++ b/src/common/console/c_enginecmds.cpp @@ -54,6 +54,7 @@ #include "md5.h" #include "i_specialpaths.h" #include "i_system.h" +#include "cmdlib.h" extern FILE* Logfile; diff --git a/src/common/filesystem/filesystem.cpp b/src/common/filesystem/filesystem.cpp index 1671438b53..cea9cd99f2 100644 --- a/src/common/filesystem/filesystem.cpp +++ b/src/common/filesystem/filesystem.cpp @@ -207,12 +207,11 @@ void FileSystem::DeleteAll () bool FileSystem::InitSingleFile(const char* filename, FileSystemMessageFunc Printf) { - TArray filenames; - filenames.Push(filename); + std::vector filenames = { filename }; return InitMultipleFiles(filenames, nullptr, Printf); } -bool FileSystem::InitMultipleFiles (TArray &filenames, LumpFilterInfo* filter, FileSystemMessageFunc Printf, bool allowduplicates, FILE* hashfile) +bool FileSystem::InitMultipleFiles (std::vector& filenames, LumpFilterInfo* filter, FileSystemMessageFunc Printf, bool allowduplicates, FILE* hashfile) { int numfiles; @@ -223,26 +222,27 @@ bool FileSystem::InitMultipleFiles (TArray &filenames, LumpFilterInfo* // first, check for duplicates if (allowduplicates) { - for (unsigned i=0;iGetHash()); - MoveLumpsInFolder(path); + std::string path = "filter/%s"; + path += Files.Last()->GetHash(); + MoveLumpsInFolder(path.c_str()); } NumEntries = (uint32_t)FileInfo.size(); diff --git a/src/common/filesystem/filesystem.h b/src/common/filesystem/filesystem.h index f286669070..cb46952803 100644 --- a/src/common/filesystem/filesystem.h +++ b/src/common/filesystem/filesystem.h @@ -65,7 +65,7 @@ public: void SetMaxIwadNum(int x) { MaxIwadIndex = x; } bool InitSingleFile(const char *filename, FileSystemMessageFunc Printf = nullptr); - bool InitMultipleFiles (TArray &filenames, LumpFilterInfo* filter = nullptr, FileSystemMessageFunc Printf = nullptr, bool allowduplicates = false, FILE* hashfile = nullptr); + bool InitMultipleFiles (std::vector& filenames, LumpFilterInfo* filter = nullptr, FileSystemMessageFunc Printf = nullptr, bool allowduplicates = false, FILE* hashfile = nullptr); void AddFile (const char *filename, FileReader *wadinfo, LumpFilterInfo* filter, FileSystemMessageFunc Printf, FILE* hashfile); int CheckIfResourceFileLoaded (const char *name) noexcept; void AddAdditionalFile(const char* filename, FileReader* wadinfo = NULL) {} diff --git a/src/common/objects/dobjgc.cpp b/src/common/objects/dobjgc.cpp index ac75b411a6..64f36a129e 100644 --- a/src/common/objects/dobjgc.cpp +++ b/src/common/objects/dobjgc.cpp @@ -62,6 +62,7 @@ #include "menu.h" #include "stats.h" #include "printf.h" +#include "cmdlib.h" // MACROS ------------------------------------------------------------------ diff --git a/src/common/platform/win32/i_mainwindow.cpp b/src/common/platform/win32/i_mainwindow.cpp index 5b246e4575..4c4f615689 100644 --- a/src/common/platform/win32/i_mainwindow.cpp +++ b/src/common/platform/win32/i_mainwindow.cpp @@ -335,7 +335,7 @@ void MainWindow::SetNetStartProgress(int pos) if (NetStartPane != 0 && NetStartMaxPos > 1) { char buf[16]; - mysnprintf(buf, countof(buf), "%d/%d", pos, NetStartMaxPos); + mysnprintf(buf, sizeof(buf), "%d/%d", pos, NetStartMaxPos); SetDlgItemTextA(NetStartPane, IDC_NETSTARTCOUNT, buf); SendDlgItemMessage(NetStartPane, IDC_NETSTARTPROGRESS, PBM_SETPOS, min(pos, NetStartMaxPos), 0); } diff --git a/src/common/rendering/vulkan/shaders/vk_shader.cpp b/src/common/rendering/vulkan/shaders/vk_shader.cpp index 25b585531a..2c3eb9241b 100644 --- a/src/common/rendering/vulkan/shaders/vk_shader.cpp +++ b/src/common/rendering/vulkan/shaders/vk_shader.cpp @@ -28,6 +28,7 @@ #include "filesystem.h" #include "engineerrors.h" #include "version.h" +#include "cmdlib.h" bool VkShaderManager::CompileNextShader() { diff --git a/src/common/startscreen/startscreen_strife.cpp b/src/common/startscreen/startscreen_strife.cpp index 6587443b83..b4490a921f 100644 --- a/src/common/startscreen/startscreen_strife.cpp +++ b/src/common/startscreen/startscreen_strife.cpp @@ -39,6 +39,7 @@ #include "image.h" #include "textures.h" #include "palettecontainer.h" +#include "cmdlib.h" // Strife startup screen #define PEASANT_INDEX 0 diff --git a/src/common/textures/gametexture.cpp b/src/common/textures/gametexture.cpp index 3ddc8dd1b1..20b22939db 100644 --- a/src/common/textures/gametexture.cpp +++ b/src/common/textures/gametexture.cpp @@ -49,6 +49,7 @@ #include "texturemanager.h" #include "c_cvars.h" #include "hw_material.h" +#include "cmdlib.h" FTexture *CreateBrightmapTexture(FImageSource*); diff --git a/src/common/textures/texturemanager.cpp b/src/common/textures/texturemanager.cpp index b38d2c078a..444b3b4eb5 100644 --- a/src/common/textures/texturemanager.cpp +++ b/src/common/textures/texturemanager.cpp @@ -47,6 +47,8 @@ #include "vectors.h" #include "animtexture.h" #include "formats/multipatchtexture.h" +#include "basics.h" +#include "cmdlib.h" FTextureManager TexMan; diff --git a/src/common/utility/findfile.cpp b/src/common/utility/findfile.cpp index ab5c4299ce..17d2c9154f 100644 --- a/src/common/utility/findfile.cpp +++ b/src/common/utility/findfile.cpp @@ -47,7 +47,7 @@ // //========================================================================== -bool D_AddFile(TArray& wadfiles, const char* file, bool check, int position, FConfigFile* config) +bool D_AddFile(std::vector& wadfiles, const char* file, bool check, int position, FConfigFile* config) { if (file == nullptr || *file == '\0') { @@ -111,10 +111,10 @@ bool D_AddFile(TArray& wadfiles, const char* file, bool check, int posi file = f; } - FString f = file; - FixPathSeperator(f); - if (position == -1) wadfiles.Push(f); - else wadfiles.Insert(position, f); + std::string f = file; + for (auto& c : f) if (c == '\\') c = '/'; + if (position == -1) wadfiles.push_back(f); + else wadfiles.insert(wadfiles.begin() + position, f); return true; } @@ -124,7 +124,7 @@ bool D_AddFile(TArray& wadfiles, const char* file, bool check, int posi // //========================================================================== -void D_AddWildFile(TArray& wadfiles, const char* value, const char *extension, FConfigFile* config) +void D_AddWildFile(std::vector& wadfiles, const char* value, const char *extension, FConfigFile* config) { if (value == nullptr || *value == '\0') { @@ -161,7 +161,7 @@ void D_AddWildFile(TArray& wadfiles, const char* value, const char *ext // //========================================================================== -void D_AddConfigFiles(TArray& wadfiles, const char* section, const char* extension, FConfigFile *config) +void D_AddConfigFiles(std::vector& wadfiles, const char* section, const char* extension, FConfigFile *config) { if (config && config->SetSection(section)) { @@ -191,7 +191,7 @@ void D_AddConfigFiles(TArray& wadfiles, const char* section, const char // //========================================================================== -void D_AddDirectory(TArray& wadfiles, const char* dir, const char *filespec, FConfigFile* config) +void D_AddDirectory(std::vector& wadfiles, const char* dir, const char *filespec, FConfigFile* config) { FileList list; if (ScanDirectory(list, dir, "*.wad", true)) diff --git a/src/common/utility/findfile.h b/src/common/utility/findfile.h index 31f8bd65bb..fd58ecde5e 100644 --- a/src/common/utility/findfile.h +++ b/src/common/utility/findfile.h @@ -2,13 +2,13 @@ // Directory searching routines #include -#include "zstring.h" - +#include +#include class FConfigFile; -bool D_AddFile(TArray& wadfiles, const char* file, bool check, int position, FConfigFile* config); -void D_AddWildFile(TArray& wadfiles, const char* value, const char *extension, FConfigFile* config); -void D_AddConfigFiles(TArray& wadfiles, const char* section, const char* extension, FConfigFile* config); -void D_AddDirectory(TArray& wadfiles, const char* dir, const char *filespec, FConfigFile* config); +bool D_AddFile(std::vector& wadfiles, const char* file, bool check, int position, FConfigFile* config); +void D_AddWildFile(std::vector& wadfiles, const char* value, const char *extension, FConfigFile* config); +void D_AddConfigFiles(std::vector& wadfiles, const char* section, const char* extension, FConfigFile* config); +void D_AddDirectory(std::vector& wadfiles, const char* dir, const char *filespec, FConfigFile* config); const char* BaseFileSearch(const char* file, const char* ext, bool lookfirstinprogdir, FConfigFile* config); diff --git a/src/common/utility/palette.cpp b/src/common/utility/palette.cpp index 4d1cd14443..7598f5d4ef 100644 --- a/src/common/utility/palette.cpp +++ b/src/common/utility/palette.cpp @@ -40,6 +40,7 @@ #include "filesystem.h" #include "printf.h" #include "m_swap.h" +#include "cmdlib.h" #include "m_png.h" diff --git a/src/d_iwad.cpp b/src/d_iwad.cpp index 62e4e459b9..cf46eec13a 100644 --- a/src/d_iwad.cpp +++ b/src/d_iwad.cpp @@ -305,9 +305,9 @@ void GetReserved(LumpFilterInfo& lfi); FIWadManager::FIWadManager(const char *firstfn, const char *optfn) { FileSystem check; - TArray fns; - fns.Push(firstfn); - if (optfn) fns.Push(optfn); + std::vector fns; + fns.push_back(firstfn); + if (optfn) fns.push_back(optfn); if (check.InitMultipleFiles(fns, nullptr, nullptr)) { @@ -388,8 +388,7 @@ int FIWadManager::CheckIWADInfo(const char* fn) LumpFilterInfo lfi; GetReserved(lfi); - TArray filenames; - filenames.Push(fn); + std::vector filenames = { fn }; if (check.InitMultipleFiles(filenames, &lfi, nullptr)) { int num = check.CheckNumForName("IWADINFO"); @@ -552,7 +551,7 @@ void FIWadManager::ValidateIWADs() static bool havepicked = false; -int FIWadManager::IdentifyVersion (TArray &wadfiles, const char *iwad, const char *zdoom_wad, const char *optional_wad) +int FIWadManager::IdentifyVersion (std::vector&wadfiles, const char *iwad, const char *zdoom_wad, const char *optional_wad) { const char *iwadparm = Args->CheckValue ("-iwad"); FString custwad; @@ -777,7 +776,7 @@ int FIWadManager::IdentifyVersion (TArray &wadfiles, const char *iwad, } // zdoom.pk3 must always be the first file loaded and the IWAD second. - wadfiles.Clear(); + wadfiles.clear(); D_AddFile (wadfiles, zdoom_wad, true, -1, GameConfig); // [SP] Load non-free assets if available. This must be done before the IWAD. @@ -833,7 +832,7 @@ int FIWadManager::IdentifyVersion (TArray &wadfiles, const char *iwad, // //========================================================================== -const FIWADInfo *FIWadManager::FindIWAD(TArray &wadfiles, const char *iwad, const char *basewad, const char *optionalwad) +const FIWADInfo *FIWadManager::FindIWAD(std::vector& wadfiles, const char *iwad, const char *basewad, const char *optionalwad) { int iwadType = IdentifyVersion(wadfiles, iwad, basewad, optionalwad); if (iwadType == -1) return nullptr; diff --git a/src/d_main.cpp b/src/d_main.cpp index 5660c4ed2b..a35035fcc0 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -1775,7 +1775,7 @@ FExecList *D_MultiExec (FArgs *list, FExecList *exec) return exec; } -static void GetCmdLineFiles(TArray &wadfiles) +static void GetCmdLineFiles(std::vector& wadfiles) { FString *args; int i, argc; @@ -1788,7 +1788,7 @@ static void GetCmdLineFiles(TArray &wadfiles) } -static FString ParseGameInfo(TArray &pwads, const char *fn, const char *data, int size) +static FString ParseGameInfo(std::vector &pwads, const char *fn, const char *data, int size) { FScanner sc; FString iwad; @@ -1920,7 +1920,7 @@ void GetReserved(LumpFilterInfo& lfi) lfi.requiredPrefixes = { "mapinfo", "zmapinfo", "umapinfo", "gameinfo", "sndinfo", "sndseq", "sbarinfo", "menudef", "gldefs", "animdefs", "decorate", "zscript", "iwadinfo", "maps/" }; } -static FString CheckGameInfo(TArray & pwads) +static FString CheckGameInfo(std::vector & pwads) { FileSystem check; @@ -1987,7 +1987,7 @@ static void D_DoomInit() // //========================================================================== -static void AddAutoloadFiles(const char *autoname, TArray& allwads) +static void AddAutoloadFiles(const char *autoname, std::vector& allwads) { LumpFilterIWAD.Format("%s.", autoname); // The '.' is appened to simplify parsing the string @@ -3089,7 +3089,7 @@ static int FileSystemPrintf(FSMessageLevel level, const char* fmt, ...) // //========================================================================== -static int D_InitGame(const FIWADInfo* iwad_info, TArray& allwads, TArray& pwads) +static int D_InitGame(const FIWADInfo* iwad_info, std::vector& allwads, std::vector& pwads) { SavegameFolder = iwad_info->Autoname; gameinfo.gametype = iwad_info->gametype; @@ -3167,7 +3167,11 @@ static int D_InitGame(const FIWADInfo* iwad_info, TArray& allwads, TArr FixMacHexen(fileSystem); FindStrifeTeaserVoices(fileSystem); }; - allwads.Append(std::move(pwads)); + allwads.insert( + allwads.end(), + std::make_move_iterator(pwads.begin()), + std::make_move_iterator(pwads.end()) + ); bool allowduplicates = Args->CheckParm("-allowduplicates"); auto hashfile = D_GetHashFile(); @@ -3175,8 +3179,8 @@ static int D_InitGame(const FIWADInfo* iwad_info, TArray& allwads, TArr { I_FatalError("FileSystem: no files found"); } - allwads.Clear(); - allwads.ShrinkToFit(); + allwads.clear(); + allwads.shrink_to_fit(); SetMapxxFlag(); D_GrabCVarDefaults(); //parse DEFCVARS @@ -3708,7 +3712,7 @@ static int D_DoomMain_Internal (void) // Load zdoom.pk3 alone so that we can get access to the internal gameinfos before // the IWAD is known. - TArray pwads; + std::vector pwads; GetCmdLineFiles(pwads); FString iwad = CheckGameInfo(pwads); @@ -3716,18 +3720,21 @@ static int D_DoomMain_Internal (void) // restart is initiated without a defined IWAD assume for now that it's not going to change. if (iwad.IsEmpty()) iwad = lastIWAD; - TArray allwads; + std::vector allwads; const FIWADInfo *iwad_info = iwad_man->FindIWAD(allwads, iwad, basewad, optionalwad); if (!iwad_info) return 0; // user exited the selection popup via cancel button. - if ((iwad_info->flags & GI_SHAREWARE) && pwads.Size() > 0) + if ((iwad_info->flags & GI_SHAREWARE) && pwads.size() > 0) { I_FatalError ("You cannot -file with the shareware version. Register!"); } lastIWAD = iwad; int ret = D_InitGame(iwad_info, allwads, pwads); - allwads.Reset(); + pwads.clear(); + pwads.shrink_to_fit(); + allwads.clear(); + allwads.shrink_to_fit(); delete iwad_man; // now we won't need this anymore iwad_man = NULL; if (ret != 0) return ret; diff --git a/src/d_main.h b/src/d_main.h index a6f76a8d89..6f6c374581 100644 --- a/src/d_main.h +++ b/src/d_main.h @@ -128,13 +128,13 @@ class FIWadManager void ParseIWadInfo(const char *fn, const char *data, int datasize, FIWADInfo *result = nullptr); int ScanIWAD (const char *iwad); int CheckIWADInfo(const char *iwad); - int IdentifyVersion (TArray &wadfiles, const char *iwad, const char *zdoom_wad, const char *optional_wad); + int IdentifyVersion (std::vector& wadfiles, const char *iwad, const char *zdoom_wad, const char *optional_wad); void CollectSearchPaths(); void AddIWADCandidates(const char *dir); void ValidateIWADs(); public: FIWadManager(const char *fn, const char *fnopt); - const FIWADInfo *FindIWAD(TArray &wadfiles, const char *iwad, const char *basewad, const char *optionalwad); + const FIWADInfo *FindIWAD(std::vector& wadfiles, const char *iwad, const char *basewad, const char *optionalwad); const FString *GetAutoname(unsigned int num) const { if (num < mIWadInfos.Size()) return &mIWadInfos[num].Autoname;