summaryrefslogtreecommitdiff
path: root/src/settings_internal.h
diff options
context:
space:
mode:
authorrubidium42 <rubidium@openttd.org>2021-06-21 18:46:27 +0200
committerPatric Stout <github@truebrain.nl>2021-06-26 20:28:34 +0200
commit98e653dacc98d308e440503c9cf9bba01933d1b4 (patch)
treee90907756d28cfc68d9200d094e790984ca0606a /src/settings_internal.h
parentf35e6c1c7fdaefc9153a54c089dbaa6e2549e6b1 (diff)
downloadopenttd-98e653dacc98d308e440503c9cf9bba01933d1b4.tar.xz
Fix #9386: compilers failing to compile with LTO by using variants instead of new + unique_ptr
With std::variant all memory can be figured out at compile time, so the compiler needs to keep track of fewer elements. It also saves out a unique_ptr and its memory management, over a slight impact for resolving a setting.
Diffstat (limited to 'src/settings_internal.h')
-rw-r--r--src/settings_internal.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/settings_internal.h b/src/settings_internal.h
index 5b35d328a..0e6637a5b 100644
--- a/src/settings_internal.h
+++ b/src/settings_internal.h
@@ -10,6 +10,7 @@
#ifndef SETTINGS_INTERNAL_H
#define SETTINGS_INTERNAL_H
+#include <variant>
#include "saveload/saveload.h"
enum SettingFlag : uint16 {
@@ -299,7 +300,7 @@ struct NullSettingDesc : SettingDesc {
bool IsSameValue(const IniItem *item, void *object) const override { NOT_REACHED(); }
};
-typedef std::initializer_list<std::unique_ptr<const SettingDesc>> SettingTable;
+typedef std::variant<IntSettingDesc, BoolSettingDesc, OneOfManySettingDesc, ManyOfManySettingDesc, StringSettingDesc, ListSettingDesc, NullSettingDesc> SettingVariant;
const SettingDesc *GetSettingFromName(const std::string_view name);
void GetSettingSaveLoadByPrefix(const std::string_view prefix, std::vector<SaveLoad> &saveloads);