forked from mirror/OpenTTD
Codechange: Use std::variant to store string parameter data.
This avoids storing two separate values and makes the test for which type is held clearer. This replaces use of unique_ptr for conditionally storing a string, and is also used in place of StringParameterBackup.
This commit is contained in:
@@ -88,34 +88,6 @@ enum SpecialStrings {
|
||||
SPECSTR_PRESIDENT_NAME = 0x70E7,
|
||||
};
|
||||
|
||||
/** Data that is to be stored when backing up StringParameters. */
|
||||
struct StringParameterBackup {
|
||||
uint64_t data; ///< The data field; valid *when* string has no value.
|
||||
std::optional<std::string> string; ///< The string value.
|
||||
|
||||
/**
|
||||
* Assign the numeric data with the given value, while clearing the stored string.
|
||||
* @param data The new value of the data field.
|
||||
* @return This object.
|
||||
*/
|
||||
StringParameterBackup &operator=(uint64_t data)
|
||||
{
|
||||
this->string.reset();
|
||||
this->data = data;
|
||||
return *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign a copy of the given string to the string field, while clearing the data field.
|
||||
* @param string The new value of the string.
|
||||
* @return This object.
|
||||
*/
|
||||
StringParameterBackup &operator=(const std::string_view string)
|
||||
{
|
||||
this->data = 0;
|
||||
this->string.emplace(string);
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
using StringParameterData = std::variant<uint64_t, std::string>;
|
||||
|
||||
#endif /* STRINGS_TYPE_H */
|
||||
|
Reference in New Issue
Block a user