From 979783f90e9c5939e645448cf9aac01f86c37fc9 Mon Sep 17 00:00:00 2001 From: rubidium42 Date: Sat, 3 Jul 2021 08:03:33 +0200 Subject: Codechange: replace InjectDParam/ShiftParameters by setting the right parameter values in the first place --- src/strings.cpp | 19 ------------------- src/strings_func.h | 4 ---- src/subsidy.cpp | 24 ++++++++++++------------ src/subsidy_func.h | 2 +- 4 files changed, 13 insertions(+), 36 deletions(-) diff --git a/src/strings.cpp b/src/strings.cpp index 6e39f7732..423e2ebf0 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -83,16 +83,6 @@ int64 StringParameters::GetInt64(WChar type) return this->data[this->offset++]; } -/** - * Shift all data in the data array by the given amount to make - * room for some extra parameters. - */ -void StringParameters::ShiftParameters(uint amount) -{ - assert(amount <= this->num_param); - MemMoveT(this->data + amount, this->data, this->num_param - amount); -} - /** * Set DParam n to some number that is suitable for string size computations. * @param n Index of the string parameter. @@ -319,15 +309,6 @@ void SetDParamStr(uint n, const std::string &str) SetDParamStr(n, str.c_str()); } -/** - * Shift the string parameters in the global string parameter array by \a amount positions, making room at the beginning. - * @param amount Number of positions to shift. - */ -void InjectDParam(uint amount) -{ - _global_string_params.ShiftParameters(amount); -} - /** * Format a number into a string. * @param buff the buffer to write to diff --git a/src/strings_func.h b/src/strings_func.h index 11f41d738..e9b9f8159 100644 --- a/src/strings_func.h +++ b/src/strings_func.h @@ -122,8 +122,6 @@ public: return (int32)this->GetInt64(type); } - void ShiftParameters(uint amount); - /** Get a pointer to the current element in the data array. */ uint64 *GetDataPointer() const { @@ -179,8 +177,6 @@ const char *GetStringPtr(StringID string); uint ConvertKmhishSpeedToDisplaySpeed(uint speed); uint ConvertDisplaySpeedToKmhishSpeed(uint speed); -void InjectDParam(uint amount); - /** * Set a string parameter \a v at index \a n in a given array \a s. * @param s Array of string parameters. diff --git a/src/subsidy.cpp b/src/subsidy.cpp index 28cb0d3cc..0b1c1a721 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -47,8 +47,7 @@ void Subsidy::AwardTo(CompanyID company) NewsStringData *company_name = new NewsStringData(GetString(STR_COMPANY_NAME)); /* Add a news item */ - std::pair reftype = SetupSubsidyDecodeParam(this, SubsidyDecodeParamType::NewsAwarded); - InjectDParam(1); + std::pair reftype = SetupSubsidyDecodeParam(this, SubsidyDecodeParamType::NewsAwarded, 1); SetDParamStr(0, company_name->string); AddNewsItem( @@ -67,9 +66,10 @@ void Subsidy::AwardTo(CompanyID company) * Setup the string parameters for printing the subsidy at the screen, and compute the news reference for the subsidy. * @param s %Subsidy being printed. * @param mode Type of subsidy news message to decide on parameter format. + * @param parameter_offset The location/index in the String DParams to start decoding the subsidy's parameters. Defaults to 0. * @return Reference of the subsidy in the news system. */ -std::pair SetupSubsidyDecodeParam(const Subsidy *s, SubsidyDecodeParamType mode) +std::pair SetupSubsidyDecodeParam(const Subsidy *s, SubsidyDecodeParamType mode, uint parameter_offset) { NewsReferenceType reftype1 = NR_NONE; NewsReferenceType reftype2 = NR_NONE; @@ -77,40 +77,40 @@ std::pair SetupSubsidyDecodeParam(const Su /* Choose whether to use the singular or plural form of the cargo name based on how we're printing the subsidy */ const CargoSpec *cs = CargoSpec::Get(s->cargo_type); if (mode == SubsidyDecodeParamType::Gui || mode == SubsidyDecodeParamType::NewsWithdrawn) { - SetDParam(0, cs->name); + SetDParam(parameter_offset, cs->name); } else { - SetDParam(0, cs->name_single); + SetDParam(parameter_offset, cs->name_single); } switch (s->src_type) { case ST_INDUSTRY: reftype1 = NR_INDUSTRY; - SetDParam(1, STR_INDUSTRY_NAME); + SetDParam(parameter_offset + 1, STR_INDUSTRY_NAME); break; case ST_TOWN: reftype1 = NR_TOWN; - SetDParam(1, STR_TOWN_NAME); + SetDParam(parameter_offset + 1, STR_TOWN_NAME); break; default: NOT_REACHED(); } - SetDParam(2, s->src); + SetDParam(parameter_offset + 2, s->src); switch (s->dst_type) { case ST_INDUSTRY: reftype2 = NR_INDUSTRY; - SetDParam(4, STR_INDUSTRY_NAME); + SetDParam(parameter_offset + 4, STR_INDUSTRY_NAME); break; case ST_TOWN: reftype2 = NR_TOWN; - SetDParam(4, STR_TOWN_NAME); + SetDParam(parameter_offset + 4, STR_TOWN_NAME); break; default: NOT_REACHED(); } - SetDParam(5, s->dst); + SetDParam(parameter_offset + 5, s->dst); /* If the subsidy is being offered or awarded, the news item mentions the subsidy duration. */ if (mode == SubsidyDecodeParamType::NewsOffered || mode == SubsidyDecodeParamType::NewsAwarded) { - SetDParam(7, _settings_game.difficulty.subsidy_duration); + SetDParam(parameter_offset + 7, _settings_game.difficulty.subsidy_duration); } return std::pair(reftype1, reftype2); diff --git a/src/subsidy_func.h b/src/subsidy_func.h index 5cd7a3118..a33c5d8bf 100644 --- a/src/subsidy_func.h +++ b/src/subsidy_func.h @@ -17,7 +17,7 @@ #include "news_type.h" #include "subsidy_base.h" -std::pair SetupSubsidyDecodeParam(const struct Subsidy *s, SubsidyDecodeParamType mode); +std::pair SetupSubsidyDecodeParam(const struct Subsidy *s, SubsidyDecodeParamType mode, uint parameter_offset = 0); void DeleteSubsidyWith(SourceType type, SourceID index); bool CheckSubsidised(CargoID cargo_type, CompanyID company, SourceType src_type, SourceID src, const Station *st); void RebuildSubsidisedSourceAndDestinationCache(); -- cgit v1.2.3-54-g00ecf