OpenTTD Source
20240917-master-g9ab0a47812
|
10 #ifndef STRINGS_INTERNAL_H
11 #define STRINGS_INTERNAL_H
47 void SetTypeOfNextParameter(char32_t type) { this->next_type = type; }
81 this->offset += advance;
82 assert(this->offset <= this->
parameters.size());
95 const uint64_t *data = std::get_if<uint64_t>(¶m.data);
96 if (data !=
nullptr)
return static_cast<T
>(*data);
97 throw std::runtime_error(
"Attempt to read string parameter as integer");
109 const std::string *data = std::get_if<std::string>(¶m.data);
110 if (data !=
nullptr)
return data->c_str();
111 throw std::runtime_error(
"Attempt to read integer parameter as string");
142 return this->parameters.size() - this->
offset;
149 return this->parameters[
offset].type;
152 void SetParam(
size_t n,
const StringParameterData &v)
155 this->parameters[n].data = v;
158 void SetParam(
size_t n, uint64_t v)
161 this->parameters[n].data = v;
164 template <typename T, std::enable_if_t<std::is_base_of<StrongTypedefBase, T>::value,
int> = 0>
165 void SetParam(
size_t n, T v)
167 SetParam(n, v.base());
170 void SetParam(
size_t n,
const char *str)
173 this->parameters[n].data = str;
176 void SetParam(
size_t n,
const std::string &str) { this->SetParam(n, str.c_str()); }
178 void SetParam(
size_t n, std::string &&str)
181 this->parameters[n].data = std::move(str);
184 const StringParameterData &GetParam(
size_t n)
const
187 return this->parameters[n].data;
202 this->parameters = std::span(
params.data(),
params.size());
207 *
this = std::move(other);
212 this->offset = other.
offset;
213 this->next_type = other.next_type;
214 this->
params = std::move(other.params);
215 this->parameters = std::span(
params.data(),
params.size());
229 template <
typename... Args>
230 static auto MakeParameters(
const Args&... args)
234 (parameters.SetParam(index++, std::forward<const Args&>(args)), ...);
247 using value_type = void;
248 using difference_type = void;
249 using iterator_category = std::output_iterator_tag;
250 using pointer = void;
251 using reference = void;
284 this->
string->push_back(value);
295 *this->
string += str;
305 auto iterator = std::back_inserter(*this->
string);
316 this->
string->erase(this->string->size() - std::min(amount, this->string->size()));
325 return this->
string->size();
334 return (*this->
string)[index];
344 void GRFTownNameGenerate(
StringBuilder &builder, uint32_t grfid, uint16_t gen, uint32_t seed);
void SetOffset(size_t offset)
Set the offset within the string from where to return the next result of GetInt64 or GetInt32.
Equivalent to the std::back_insert_iterator in function, with some convenience helpers for string con...
size_t GetOffset()
Get the current offset, so it can be backed up for certain processing steps, or be used to offset the...
Extension of StringParameters with its own statically sized buffer for the parameters.
void PrepareForNextRun()
Prepare the string parameters for the next formatting run.
StringParameters * parent
If not nullptr, this instance references data from this parent instance.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
T GetNextParameter()
Get the next parameter from our parameters.
void GenerateTownNameString(StringBuilder &builder, size_t lang, uint32_t seed)
Generates town name from given seed.
The data required to format and validate a single parameter of a string.
const char * GetNextParameterString()
Get the next string parameter from our parameters.
void RemoveElementsFromBack(size_t amount)
Remove the given amount of characters from the back of the string.
void GetStringWithArgs(StringBuilder &builder, StringID string, StringParameters &args, uint case_index, bool game_script)
Get a parsed string with most special stringcodes replaced by the string parameters.
StringParameters GetRemainingParameters()
Get a new instance of StringParameters that is a "range" into the remaining existing parameters.
uint RemapNewGRFStringControlCode(uint scc, const char **str, StringParameters ¶meters, bool modify_parameters)
FormatString for NewGRF specific "magic" string control codes.
void AdvanceOffset(size_t advance)
Advance the offset within the string from where to return the next result of GetInt64 or GetInt32.
char32_t GetTypeAtOffset(size_t offset) const
Get the type of a specific element.
size_t GetDataLeft() const
Return the amount of elements which can still be read.
StringBuilder & operator+=(const char value)
Operator to add a character to the end of the buffer.
std::array< StringParameter, N > params
The actual parameters.
char & operator[](size_t index)
Get the reference to the character at the given index.
StringBuilder & operator+=(std::string_view str)
Operator to append the given string to the output buffer.
StringBuilder(std::string &string)
Create the builder of an external buffer.
StringParameters(StringParameters &parent, size_t size)
Create a new StringParameters instance that can reference part of the data of the given parent instan...
size_t offset
Current offset in the parameters span.
static void GetTownName(StringBuilder &builder, const TownNameParams *par, uint32_t townnameparts)
Fills builder with specified town name.
size_t CurrentIndex()
Get the current index in the string.
std::span< StringParameter > parameters
Array with the actual parameters.
char32_t type
The StringControlCode to interpret this data with when it's the first parameter, otherwise '\0'.
StringBuilder & operator=(const char value)
Operator to add a character to the end of the buffer.
StringParameters GetRemainingParameters(size_t offset)
Get a new instance of StringParameters that is a "range" into the remaining existing parameters from ...
const StringParameter & GetNextParameterReference()
Get the next parameter from our parameters.
void Utf8Encode(char32_t c)
Encode the given Utf8 character into the output buffer.
char32_t next_type
The type of the next data that is retrieved.
StringParameterData data
The data of the parameter.