mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 14:27:16 +00:00
Codechange: String parameters can now be explicitly not initialised.
As the visitor is now more complex this requires an unspecialised GetNextParameter() to avoid it being repeated for each return type.
This commit is contained in:
parent
0c0e7606d9
commit
4010313180
@ -83,6 +83,7 @@ public:
|
||||
uint64_t GetNextParameter()
|
||||
{
|
||||
struct visitor {
|
||||
uint64_t operator()(const std::monostate &) { throw std::out_of_range("Attempt to read uninitialised parameter as integer"); }
|
||||
uint64_t operator()(const uint64_t &arg) { return arg; }
|
||||
uint64_t operator()(const std::string &) { throw std::out_of_range("Attempt to read string parameter as integer"); }
|
||||
};
|
||||
@ -113,11 +114,12 @@ public:
|
||||
const char *GetNextParameterString()
|
||||
{
|
||||
struct visitor {
|
||||
const char *operator()(const std::monostate &) { throw std::out_of_range("Attempt to read uninitialised parameter as string"); }
|
||||
const char *operator()(const uint64_t &) { throw std::out_of_range("Attempt to read integer parameter as string"); }
|
||||
const char *operator()(const std::string &arg) { return arg.c_str(); }
|
||||
};
|
||||
|
||||
const auto ¶m = GetNextParameterReference();
|
||||
const auto ¶m = this->GetNextParameterReference();
|
||||
return std::visit(visitor{}, param.data);
|
||||
}
|
||||
|
||||
|
@ -72,7 +72,7 @@ static constexpr StringID SPECSTR_SILLY_NAME = 0x70E5; ///< Special string for s
|
||||
static constexpr StringID SPECSTR_ANDCO_NAME = 0x70E6; ///< Special string for Surname & Co company names.
|
||||
static constexpr StringID SPECSTR_PRESIDENT_NAME = 0x70E7; ///< Special string for the president's name.
|
||||
|
||||
using StringParameterData = std::variant<uint64_t, std::string>;
|
||||
using StringParameterData = std::variant<std::monostate, uint64_t, std::string>;
|
||||
|
||||
/** The data required to format and validate a single parameter of a string. */
|
||||
struct StringParameter {
|
||||
@ -82,6 +82,7 @@ struct StringParameter {
|
||||
StringParameter() = default;
|
||||
inline StringParameter(StringParameterData &&data) : data(std::move(data)), type(0) {}
|
||||
|
||||
inline StringParameter(const std::monostate &data) : data(data), type(0) {}
|
||||
inline StringParameter(uint64_t data) : data(data), type(0) {}
|
||||
|
||||
inline StringParameter(const char *data) : data(std::string{data}), type(0) {}
|
||||
|
Loading…
Reference in New Issue
Block a user