- use std::vector<std::string> to pass the file list to InitMultipleFiles

This commit is contained in:
Christoph Oelckers 2023-08-21 21:26:44 +02:00
parent a0d679b84b
commit 4906d287cb
17 changed files with 67 additions and 51 deletions

View file

@ -1003,7 +1003,7 @@ void FExecList::ExecCommands() const
}
}
void FExecList::AddPullins(TArray<FString> &wads, FConfigFile *config) const
void FExecList::AddPullins(std::vector<std::string>& wads, FConfigFile *config) const
{
for (unsigned i = 0; i < Pullins.Size(); ++i)
{

View file

@ -34,6 +34,8 @@
#ifndef __C_DISPATCH_H__
#define __C_DISPATCH_H__
#include <string>
#include <vector>
#include <stdint.h>
#include <functional>
#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<FString> &wads, FConfigFile *config) const;
void AddPullins(std::vector<std::string> &wads, FConfigFile *config) const;
};
extern bool ParsingKeyConf, UnsafeExecutionContext;

View file

@ -54,6 +54,7 @@
#include "md5.h"
#include "i_specialpaths.h"
#include "i_system.h"
#include "cmdlib.h"
extern FILE* Logfile;

View file

@ -207,12 +207,11 @@ void FileSystem::DeleteAll ()
bool FileSystem::InitSingleFile(const char* filename, FileSystemMessageFunc Printf)
{
TArray<FString> filenames;
filenames.Push(filename);
std::vector<std::string> filenames = { filename };
return InitMultipleFiles(filenames, nullptr, Printf);
}
bool FileSystem::InitMultipleFiles (TArray<FString> &filenames, LumpFilterInfo* filter, FileSystemMessageFunc Printf, bool allowduplicates, FILE* hashfile)
bool FileSystem::InitMultipleFiles (std::vector<std::string>& filenames, LumpFilterInfo* filter, FileSystemMessageFunc Printf, bool allowduplicates, FILE* hashfile)
{
int numfiles;
@ -223,26 +222,27 @@ bool FileSystem::InitMultipleFiles (TArray<FString> &filenames, LumpFilterInfo*
// first, check for duplicates
if (allowduplicates)
{
for (unsigned i=0;i<filenames.Size(); i++)
for (size_t i=0;i<filenames.size(); i++)
{
for (unsigned j=i+1;j<filenames.Size(); j++)
for (size_t j=i+1;j<filenames.size(); j++)
{
if (strcmp(filenames[i], filenames[j]) == 0)
if (filenames[i] == filenames[j])
{
filenames.Delete(j);
filenames.erase(filenames.begin() + j);
j--;
}
}
}
}
for(unsigned i=0;i<filenames.Size(); i++)
for(size_t i=0;i<filenames.size(); i++)
{
AddFile (filenames[i], nullptr, filter, Printf, hashfile);
AddFile(filenames[i].c_str(), nullptr, filter, Printf, hashfile);
if (i == (unsigned)MaxIwadIndex) MoveLumpsInFolder("after_iwad/");
FStringf path("filter/%s", Files.Last()->GetHash());
MoveLumpsInFolder(path);
std::string path = "filter/%s";
path += Files.Last()->GetHash();
MoveLumpsInFolder(path.c_str());
}
NumEntries = (uint32_t)FileInfo.size();

View file

@ -65,7 +65,7 @@ public:
void SetMaxIwadNum(int x) { MaxIwadIndex = x; }
bool InitSingleFile(const char *filename, FileSystemMessageFunc Printf = nullptr);
bool InitMultipleFiles (TArray<FString> &filenames, LumpFilterInfo* filter = nullptr, FileSystemMessageFunc Printf = nullptr, bool allowduplicates = false, FILE* hashfile = nullptr);
bool InitMultipleFiles (std::vector<std::string>& 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) {}

View file

@ -62,6 +62,7 @@
#include "menu.h"
#include "stats.h"
#include "printf.h"
#include "cmdlib.h"
// MACROS ------------------------------------------------------------------

View file

@ -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);
}

View file

@ -28,6 +28,7 @@
#include "filesystem.h"
#include "engineerrors.h"
#include "version.h"
#include "cmdlib.h"
bool VkShaderManager::CompileNextShader()
{

View file

@ -39,6 +39,7 @@
#include "image.h"
#include "textures.h"
#include "palettecontainer.h"
#include "cmdlib.h"
// Strife startup screen
#define PEASANT_INDEX 0

View file

@ -49,6 +49,7 @@
#include "texturemanager.h"
#include "c_cvars.h"
#include "hw_material.h"
#include "cmdlib.h"
FTexture *CreateBrightmapTexture(FImageSource*);

View file

@ -47,6 +47,8 @@
#include "vectors.h"
#include "animtexture.h"
#include "formats/multipatchtexture.h"
#include "basics.h"
#include "cmdlib.h"
FTextureManager TexMan;

View file

@ -47,7 +47,7 @@
//
//==========================================================================
bool D_AddFile(TArray<FString>& wadfiles, const char* file, bool check, int position, FConfigFile* config)
bool D_AddFile(std::vector<std::string>& wadfiles, const char* file, bool check, int position, FConfigFile* config)
{
if (file == nullptr || *file == '\0')
{
@ -111,10 +111,10 @@ bool D_AddFile(TArray<FString>& 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<FString>& wadfiles, const char* file, bool check, int posi
//
//==========================================================================
void D_AddWildFile(TArray<FString>& wadfiles, const char* value, const char *extension, FConfigFile* config)
void D_AddWildFile(std::vector<std::string>& wadfiles, const char* value, const char *extension, FConfigFile* config)
{
if (value == nullptr || *value == '\0')
{
@ -161,7 +161,7 @@ void D_AddWildFile(TArray<FString>& wadfiles, const char* value, const char *ext
//
//==========================================================================
void D_AddConfigFiles(TArray<FString>& wadfiles, const char* section, const char* extension, FConfigFile *config)
void D_AddConfigFiles(std::vector<std::string>& wadfiles, const char* section, const char* extension, FConfigFile *config)
{
if (config && config->SetSection(section))
{
@ -191,7 +191,7 @@ void D_AddConfigFiles(TArray<FString>& wadfiles, const char* section, const char
//
//==========================================================================
void D_AddDirectory(TArray<FString>& wadfiles, const char* dir, const char *filespec, FConfigFile* config)
void D_AddDirectory(std::vector<std::string>& wadfiles, const char* dir, const char *filespec, FConfigFile* config)
{
FileList list;
if (ScanDirectory(list, dir, "*.wad", true))

View file

@ -2,13 +2,13 @@
// Directory searching routines
#include <stdint.h>
#include "zstring.h"
#include <string>
#include <vector>
class FConfigFile;
bool D_AddFile(TArray<FString>& wadfiles, const char* file, bool check, int position, FConfigFile* config);
void D_AddWildFile(TArray<FString>& wadfiles, const char* value, const char *extension, FConfigFile* config);
void D_AddConfigFiles(TArray<FString>& wadfiles, const char* section, const char* extension, FConfigFile* config);
void D_AddDirectory(TArray<FString>& wadfiles, const char* dir, const char *filespec, FConfigFile* config);
bool D_AddFile(std::vector<std::string>& wadfiles, const char* file, bool check, int position, FConfigFile* config);
void D_AddWildFile(std::vector<std::string>& wadfiles, const char* value, const char *extension, FConfigFile* config);
void D_AddConfigFiles(std::vector<std::string>& wadfiles, const char* section, const char* extension, FConfigFile* config);
void D_AddDirectory(std::vector<std::string>& wadfiles, const char* dir, const char *filespec, FConfigFile* config);
const char* BaseFileSearch(const char* file, const char* ext, bool lookfirstinprogdir, FConfigFile* config);

View file

@ -40,6 +40,7 @@
#include "filesystem.h"
#include "printf.h"
#include "m_swap.h"
#include "cmdlib.h"
#include "m_png.h"

View file

@ -305,9 +305,9 @@ void GetReserved(LumpFilterInfo& lfi);
FIWadManager::FIWadManager(const char *firstfn, const char *optfn)
{
FileSystem check;
TArray<FString> fns;
fns.Push(firstfn);
if (optfn) fns.Push(optfn);
std::vector<std::string> 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<FString> filenames;
filenames.Push(fn);
std::vector<std::string> 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<FString> &wadfiles, const char *iwad, const char *zdoom_wad, const char *optional_wad)
int FIWadManager::IdentifyVersion (std::vector<std::string>&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<FString> &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<FString> &wadfiles, const char *iwad,
//
//==========================================================================
const FIWADInfo *FIWadManager::FindIWAD(TArray<FString> &wadfiles, const char *iwad, const char *basewad, const char *optionalwad)
const FIWADInfo *FIWadManager::FindIWAD(std::vector<std::string>& wadfiles, const char *iwad, const char *basewad, const char *optionalwad)
{
int iwadType = IdentifyVersion(wadfiles, iwad, basewad, optionalwad);
if (iwadType == -1) return nullptr;

View file

@ -1775,7 +1775,7 @@ FExecList *D_MultiExec (FArgs *list, FExecList *exec)
return exec;
}
static void GetCmdLineFiles(TArray<FString> &wadfiles)
static void GetCmdLineFiles(std::vector<std::string>& wadfiles)
{
FString *args;
int i, argc;
@ -1788,7 +1788,7 @@ static void GetCmdLineFiles(TArray<FString> &wadfiles)
}
static FString ParseGameInfo(TArray<FString> &pwads, const char *fn, const char *data, int size)
static FString ParseGameInfo(std::vector<std::string> &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<FString> & pwads)
static FString CheckGameInfo(std::vector<std::string> & pwads)
{
FileSystem check;
@ -1987,7 +1987,7 @@ static void D_DoomInit()
//
//==========================================================================
static void AddAutoloadFiles(const char *autoname, TArray<FString>& allwads)
static void AddAutoloadFiles(const char *autoname, std::vector<std::string>& 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<FString>& allwads, TArray<FString>& pwads)
static int D_InitGame(const FIWADInfo* iwad_info, std::vector<std::string>& allwads, std::vector<std::string>& pwads)
{
SavegameFolder = iwad_info->Autoname;
gameinfo.gametype = iwad_info->gametype;
@ -3167,7 +3167,11 @@ static int D_InitGame(const FIWADInfo* iwad_info, TArray<FString>& 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<FString>& 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<FString> pwads;
std::vector<std::string> 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<FString> allwads;
std::vector<std::string> 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;

View file

@ -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<FString> &wadfiles, const char *iwad, const char *zdoom_wad, const char *optional_wad);
int IdentifyVersion (std::vector<std::string>& 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<FString> &wadfiles, const char *iwad, const char *basewad, const char *optionalwad);
const FIWADInfo *FindIWAD(std::vector<std::string>& 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;