mirror of https://github.com/OpenTTD/OpenTTD
Codechange: add a wrapper function to find all settings based on prefix (#9312)
parent
e9e4588db1
commit
0c96884700
|
@ -20,8 +20,6 @@
|
|||
typedef LinkGraph::BaseNode Node;
|
||||
typedef LinkGraph::BaseEdge Edge;
|
||||
|
||||
const SettingDesc *GetSettingDescription(uint index);
|
||||
|
||||
static uint16 _num_nodes;
|
||||
|
||||
/**
|
||||
|
@ -70,17 +68,10 @@ const SaveLoad *GetLinkGraphJobDesc()
|
|||
|
||||
/* Build the SaveLoad array on first call and don't touch it later on */
|
||||
if (saveloads.size() == 0) {
|
||||
size_t prefixlen = strlen(prefix);
|
||||
GetSettingSaveLoadByPrefix(prefix, saveloads);
|
||||
|
||||
int setting = 0;
|
||||
const SettingDesc *desc = GetSettingDescription(setting);
|
||||
while (desc != nullptr) {
|
||||
if (desc->name != nullptr && strncmp(desc->name, prefix, prefixlen) == 0) {
|
||||
SaveLoad sl = desc->save;
|
||||
sl.address_proc = proc;
|
||||
saveloads.push_back(sl);
|
||||
}
|
||||
desc = GetSettingDescription(++setting);
|
||||
for (auto &sl : saveloads) {
|
||||
sl.address_proc = proc;
|
||||
}
|
||||
|
||||
int i = 0;
|
||||
|
|
|
@ -93,17 +93,6 @@ typedef void SettingDescProcList(IniFile *ini, const char *grpname, StringList &
|
|||
|
||||
static bool IsSignedVarMemType(VarType vt);
|
||||
|
||||
/**
|
||||
* Get the setting at the given index into the settings table.
|
||||
* @param index The index to look for.
|
||||
* @return The setting at the given index, or nullptr when the index is invalid.
|
||||
*/
|
||||
const SettingDesc *GetSettingDescription(uint index)
|
||||
{
|
||||
if (index >= _settings.size()) return nullptr;
|
||||
return _settings.begin()[index].get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Groups in openttd.cfg that are actually lists.
|
||||
*/
|
||||
|
@ -1739,6 +1728,21 @@ static const SettingDesc *GetSettingFromName(const char *name, const SettingTabl
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the SaveLoad from all settings matching the prefix.
|
||||
* @param prefix The prefix to look for.
|
||||
* @param saveloads A vector to store the result in.
|
||||
*/
|
||||
void GetSettingSaveLoadByPrefix(const char *prefix, std::vector<SaveLoad> &saveloads)
|
||||
{
|
||||
size_t prefixlen = strlen(prefix);
|
||||
|
||||
for (auto &sd : _settings) {
|
||||
if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to)) continue;
|
||||
if (strncmp(sd->name, prefix, prefixlen) == 0) saveloads.push_back(sd->save);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a name of setting, return a company setting description of it.
|
||||
* @param name Name of the company setting to return a setting description of.
|
||||
|
|
|
@ -300,6 +300,7 @@ struct NullSettingDesc : SettingDesc {
|
|||
typedef std::initializer_list<std::unique_ptr<const SettingDesc>> SettingTable;
|
||||
|
||||
const SettingDesc *GetSettingFromName(const char *name);
|
||||
void GetSettingSaveLoadByPrefix(const char *prefix, std::vector<SaveLoad> &saveloads);
|
||||
bool SetSettingValue(const IntSettingDesc *sd, int32 value, bool force_newgame = false);
|
||||
bool SetSettingValue(const StringSettingDesc *sd, const std::string value, bool force_newgame = false);
|
||||
|
||||
|
|
Loading…
Reference in New Issue