diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index c5f69bb73f..ce2a23490c 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -2433,7 +2433,7 @@ void Industry::FillCachedName() const { int64 args_array[] = { this->index }; StringParameters tmp_params(args_array); - this->cached_name = GetStringWithArgs(STR_INDUSTRY_NAME, &tmp_params); + this->cached_name = GetStringWithArgs(STR_INDUSTRY_NAME, tmp_params); } void ClearAllIndustryCachedNames() diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index ec7d99db7a..1b95d41eca 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -463,7 +463,7 @@ void BaseStation::FillCachedName() const { int64 args_array[] = { this->index }; StringParameters tmp_params(args_array); - this->cached_name = GetStringWithArgs(Waypoint::IsExpected(this) ? STR_WAYPOINT_NAME : STR_STATION_NAME, &tmp_params); + this->cached_name = GetStringWithArgs(Waypoint::IsExpected(this) ? STR_WAYPOINT_NAME : STR_STATION_NAME, tmp_params); } void ClearAllStationCachedNames() diff --git a/src/strings.cpp b/src/strings.cpp index 4e6ecf665c..25cb70cda1 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -172,9 +172,9 @@ void CopyOutDParam(uint64 *dst, const char **strings, StringID string, int num) static void StationGetSpecialString(StringBuilder &builder, int x); static void GetSpecialTownNameString(StringBuilder &builder, int ind, uint32 seed); -static void GetSpecialNameString(StringBuilder &builder, int ind, StringParameters *args); +static void GetSpecialNameString(StringBuilder &builder, int ind, StringParameters &args); -static void FormatString(StringBuilder &builder, const char *str, StringParameters *args, uint case_index = 0, bool game_script = false, bool dry_run = false); +static void FormatString(StringBuilder &builder, const char *str, StringParameters &args, uint case_index = 0, bool game_script = false, bool dry_run = false); struct LanguagePack : public LanguagePackHeader { char data[]; // list of strings @@ -221,7 +221,7 @@ const char *GetStringPtr(StringID string) * @param case_index The "case index". This will only be set when FormatString wants to print the string in a different case. * @param game_script The string is coming directly from a game script. */ -void GetStringWithArgs(StringBuilder &builder, StringID string, StringParameters *args, uint case_index, bool game_script) +void GetStringWithArgs(StringBuilder &builder, StringID string, StringParameters &args, uint case_index, bool game_script) { if (string == 0) { GetStringWithArgs(builder, STR_UNDEFINED, args); @@ -234,7 +234,7 @@ void GetStringWithArgs(StringBuilder &builder, StringID string, StringParameters switch (tab) { case TEXT_TAB_TOWN: if (index >= 0xC0 && !game_script) { - GetSpecialTownNameString(builder, index - 0xC0, args->GetInt32()); + GetSpecialTownNameString(builder, index - 0xC0, args.GetInt32()); return; } break; @@ -291,7 +291,7 @@ std::string GetString(StringID string) { _global_string_params.ClearTypeInformation(); _global_string_params.offset = 0; - return GetStringWithArgs(string, &_global_string_params); + return GetStringWithArgs(string, _global_string_params); } /** @@ -300,7 +300,7 @@ std::string GetString(StringID string) * @param args Arguments for the string. * @return The parsed string. */ -std::string GetStringWithArgs(StringID string, StringParameters *args) +std::string GetStringWithArgs(StringID string, StringParameters &args) { std::string result; StringBuilder builder(result); @@ -439,7 +439,7 @@ static void FormatYmdString(StringBuilder &builder, TimerGameCalendar::Date date int64 args[] = {ymd.day + STR_DAY_NUMBER_1ST - 1, STR_MONTH_ABBREV_JAN + ymd.month, ymd.year}; StringParameters tmp_params(args); - FormatString(builder, GetStringPtr(STR_FORMAT_DATE_LONG), &tmp_params, case_index); + FormatString(builder, GetStringPtr(STR_FORMAT_DATE_LONG), tmp_params, case_index); } static void FormatMonthAndYear(StringBuilder &builder, TimerGameCalendar::Date date, uint case_index) @@ -449,7 +449,7 @@ static void FormatMonthAndYear(StringBuilder &builder, TimerGameCalendar::Date d int64 args[] = {STR_MONTH_JAN + ymd.month, ymd.year}; StringParameters tmp_params(args); - FormatString(builder, GetStringPtr(STR_FORMAT_DATE_SHORT), &tmp_params, case_index); + FormatString(builder, GetStringPtr(STR_FORMAT_DATE_SHORT), tmp_params, case_index); } static void FormatTinyOrISODate(StringBuilder &builder, TimerGameCalendar::Date date, StringID str) @@ -460,7 +460,7 @@ static void FormatTinyOrISODate(StringBuilder &builder, TimerGameCalendar::Date /* Day and month are zero-padded with ZEROFILL_NUM, hence the two 2s. */ int64 args[] = {ymd.day, 2, ymd.month + 1, 2, ymd.year}; StringParameters tmp_params(args); - FormatString(builder, GetStringPtr(str), &tmp_params); + FormatString(builder, GetStringPtr(str), tmp_params); } static void FormatGenericCurrency(StringBuilder &builder, const CurrencySpec *spec, Money number, bool compact) @@ -825,11 +825,11 @@ static std::vector _game_script_raw_strings; * @param args Pointer to extra arguments used by various string codes. * @param dry_run True when the args' type data is not yet initialized. */ -static void FormatString(StringBuilder &builder, const char *str_arg, StringParameters *args, uint case_index, bool game_script, bool dry_run) +static void FormatString(StringBuilder &builder, const char *str_arg, StringParameters &args, uint case_index, bool game_script, bool dry_run) { - uint orig_offset = args->offset; + uint orig_offset = args.offset; - if (!dry_run && args->HasTypeInformation()) { + if (!dry_run && args.HasTypeInformation()) { /* * FormatString was called without `dry_run` set, however `args` has * space allocated for type information and thus wants type checks on @@ -852,7 +852,7 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara FormatString(dry_run_builder, str_arg, args, case_index, game_script, true); } /* We have to restore the original offset here to to read the correct values. */ - args->offset = orig_offset; + args.offset = orig_offset; } WChar b = '\0'; uint next_substr_case_index = 0; @@ -868,7 +868,7 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara if (SCC_NEWGRF_FIRST <= b && b <= SCC_NEWGRF_LAST) { /* We need to pass some stuff as it might be modified. */ - StringParameters remaining = args->GetRemainingParameters(); + StringParameters remaining = args.GetRemainingParameters(); b = RemapNewGRFStringControlCode(b, &str, remaining, dry_run); if (b == 0) continue; } @@ -962,7 +962,7 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara /* If we didn't error out, we can actually print the string. */ if (*str != '\0') { str = p; - GetStringWithArgs(builder, MakeStringID(TEXT_TAB_GAMESCRIPT_START, stringid), &sub_args, true); + GetStringWithArgs(builder, MakeStringID(TEXT_TAB_GAMESCRIPT_START, stringid), sub_args, true); } for (i = 0; i < 20; i++) { @@ -981,7 +981,7 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara } case SCC_NEWGRF_PRINT_WORD_STRING_ID: { - StringID substr = args->GetInt32(SCC_NEWGRF_PRINT_WORD_STRING_ID); + StringID substr = args.GetInt32(SCC_NEWGRF_PRINT_WORD_STRING_ID); str_stack.push(GetStringPtr(substr)); case_index = next_substr_case_index; next_substr_case_index = 0; @@ -993,12 +993,12 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara /* First read the meta data from the language file. */ uint offset = orig_offset + (byte)*str++; int gender = 0; - if (!dry_run && args->GetTypeAtOffset(offset) != 0) { + if (!dry_run && args.GetTypeAtOffset(offset) != 0) { /* Now we need to figure out what text to resolve, i.e. * what do we need to draw? So get the actual raw string * first using the control code to get said string. */ char input[4 + 1]; - char *p = input + Utf8Encode(input, args->GetTypeAtOffset(offset)); + char *p = input + Utf8Encode(input, args.GetTypeAtOffset(offset)); *p = '\0'; /* The gender is stored at the start of the formatted string. */ @@ -1006,8 +1006,8 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara _scan_for_gender_data = true; std::string buffer; StringBuilder tmp_builder(buffer); - StringParameters tmp_params(args->GetPointerToOffset(offset), args->num_param - offset, nullptr); - FormatString(tmp_builder, input, &tmp_params); + StringParameters tmp_params(args.GetPointerToOffset(offset), args.num_param - offset, nullptr); + FormatString(tmp_builder, input, tmp_params); _scan_for_gender_data = old_sgd; /* And determine the string. */ @@ -1034,13 +1034,13 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara case SCC_PLURAL_LIST: { // {P} int plural_form = *str++; // contains the plural form for this string uint offset = orig_offset + (byte)*str++; - int64 v = *args->GetPointerToOffset(offset); // contains the number that determines plural + int64 v = *args.GetPointerToOffset(offset); // contains the number that determines plural str = ParseStringChoice(str, DeterminePluralForm(v, plural_form), builder); break; } case SCC_ARG_INDEX: { // Move argument pointer - args->offset = orig_offset + (byte)*str++; + args.offset = orig_offset + (byte)*str++; break; } @@ -1073,7 +1073,7 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara break; case SCC_RAW_STRING_POINTER: { // {RAW_STRING} - const char *raw_string = (const char *)(size_t)args->GetInt64(SCC_RAW_STRING_POINTER); + const char *raw_string = (const char *)(size_t)args.GetInt64(SCC_RAW_STRING_POINTER); /* raw_string can be(come) nullptr when the parameter is out of range and 0 is returned instead. */ if (raw_string == nullptr || (game_script && std::find(_game_script_raw_strings.begin(), _game_script_raw_strings.end(), raw_string) == _game_script_raw_strings.end())) { @@ -1085,11 +1085,11 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara } case SCC_STRING: {// {STRING} - StringID string_id = args->GetInt32(SCC_STRING); + StringID string_id = args.GetInt32(SCC_STRING); if (game_script && GetStringTab(string_id) != TEXT_TAB_GAMESCRIPT_START) break; /* It's prohibited for the included string to consume any arguments. */ - StringParameters tmp_params(*args, 0); - GetStringWithArgs(builder, string_id, &tmp_params, next_substr_case_index, game_script); + StringParameters tmp_params(args, 0); + GetStringWithArgs(builder, string_id, tmp_params, next_substr_case_index, game_script); next_substr_case_index = 0; break; } @@ -1102,68 +1102,68 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara case SCC_STRING6: case SCC_STRING7: { // {STRING1..7} /* Strings that consume arguments */ - StringID string_id = args->GetInt32(b); + StringID string_id = args.GetInt32(b); if (game_script && GetStringTab(string_id) != TEXT_TAB_GAMESCRIPT_START) break; uint size = b - SCC_STRING1 + 1; - if (game_script && size > args->GetDataLeft()) { + if (game_script && size > args.GetDataLeft()) { builder += "(too many parameters)"; } else { - StringParameters sub_args(*args, size); - GetStringWithArgs(builder, string_id, &sub_args, next_substr_case_index, game_script); + StringParameters sub_args(args, size); + GetStringWithArgs(builder, string_id, sub_args, next_substr_case_index, game_script); } next_substr_case_index = 0; break; } case SCC_COMMA: // {COMMA} - FormatCommaNumber(builder, args->GetInt64(SCC_COMMA)); + FormatCommaNumber(builder, args.GetInt64(SCC_COMMA)); break; case SCC_DECIMAL: { // {DECIMAL} - int64 number = args->GetInt64(SCC_DECIMAL); - int digits = args->GetInt32(SCC_DECIMAL); + int64 number = args.GetInt64(SCC_DECIMAL); + int digits = args.GetInt32(SCC_DECIMAL); FormatCommaNumber(builder, number, digits); break; } case SCC_NUM: // {NUM} - FormatNoCommaNumber(builder, args->GetInt64(SCC_NUM)); + FormatNoCommaNumber(builder, args.GetInt64(SCC_NUM)); break; case SCC_ZEROFILL_NUM: { // {ZEROFILL_NUM} - int64 num = args->GetInt64(); - FormatZerofillNumber(builder, num, args->GetInt64()); + int64 num = args.GetInt64(); + FormatZerofillNumber(builder, num, args.GetInt64()); break; } case SCC_HEX: // {HEX} - FormatHexNumber(builder, (uint64)args->GetInt64(SCC_HEX)); + FormatHexNumber(builder, (uint64)args.GetInt64(SCC_HEX)); break; case SCC_BYTES: // {BYTES} - FormatBytes(builder, args->GetInt64()); + FormatBytes(builder, args.GetInt64()); break; case SCC_CARGO_TINY: { // {CARGO_TINY} /* Tiny description of cargotypes. Layout: * param 1: cargo type * param 2: cargo count */ - CargoID cargo = args->GetInt32(SCC_CARGO_TINY); + CargoID cargo = args.GetInt32(SCC_CARGO_TINY); if (cargo >= CargoSpec::GetArraySize()) break; StringID cargo_str = CargoSpec::Get(cargo)->units_volume; int64 amount = 0; switch (cargo_str) { case STR_TONS: - amount = _units_weight[_settings_game.locale.units_weight].c.ToDisplay(args->GetInt64()); + amount = _units_weight[_settings_game.locale.units_weight].c.ToDisplay(args.GetInt64()); break; case STR_LITERS: - amount = _units_volume[_settings_game.locale.units_volume].c.ToDisplay(args->GetInt64()); + amount = _units_volume[_settings_game.locale.units_volume].c.ToDisplay(args.GetInt64()); break; default: { - amount = args->GetInt64(); + amount = args.GetInt64(); break; } } @@ -1176,30 +1176,30 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara /* Short description of cargotypes. Layout: * param 1: cargo type * param 2: cargo count */ - CargoID cargo = args->GetInt32(SCC_CARGO_SHORT); + CargoID cargo = args.GetInt32(SCC_CARGO_SHORT); if (cargo >= CargoSpec::GetArraySize()) break; StringID cargo_str = CargoSpec::Get(cargo)->units_volume; switch (cargo_str) { case STR_TONS: { assert(_settings_game.locale.units_weight < lengthof(_units_weight)); - int64 args_array[] = {_units_weight[_settings_game.locale.units_weight].c.ToDisplay(args->GetInt64())}; + int64 args_array[] = {_units_weight[_settings_game.locale.units_weight].c.ToDisplay(args.GetInt64())}; StringParameters tmp_params(args_array); - FormatString(builder, GetStringPtr(_units_weight[_settings_game.locale.units_weight].l), &tmp_params); + FormatString(builder, GetStringPtr(_units_weight[_settings_game.locale.units_weight].l), tmp_params); break; } case STR_LITERS: { assert(_settings_game.locale.units_volume < lengthof(_units_volume)); - int64 args_array[] = {_units_volume[_settings_game.locale.units_volume].c.ToDisplay(args->GetInt64())}; + int64 args_array[] = {_units_volume[_settings_game.locale.units_volume].c.ToDisplay(args.GetInt64())}; StringParameters tmp_params(args_array); - FormatString(builder, GetStringPtr(_units_volume[_settings_game.locale.units_volume].l), &tmp_params); + FormatString(builder, GetStringPtr(_units_volume[_settings_game.locale.units_volume].l), tmp_params); break; } default: { - StringParameters tmp_params(*args, 1); - GetStringWithArgs(builder, cargo_str, &tmp_params); + StringParameters tmp_params(args, 1); + GetStringWithArgs(builder, cargo_str, tmp_params); break; } } @@ -1208,17 +1208,17 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara case SCC_CARGO_LONG: { // {CARGO_LONG} /* First parameter is cargo type, second parameter is cargo count */ - CargoID cargo = args->GetInt32(SCC_CARGO_LONG); + CargoID cargo = args.GetInt32(SCC_CARGO_LONG); if (IsValidCargoID(cargo) && cargo >= CargoSpec::GetArraySize()) break; StringID cargo_str = !IsValidCargoID(cargo) ? STR_QUANTITY_N_A : CargoSpec::Get(cargo)->quantifier; - StringParameters tmp_args(*args, 1); - GetStringWithArgs(builder, cargo_str, &tmp_args); + StringParameters tmp_args(args, 1); + GetStringWithArgs(builder, cargo_str, tmp_args); break; } case SCC_CARGO_LIST: { // {CARGO_LIST} - CargoTypes cmask = args->GetInt64(SCC_CARGO_LIST); + CargoTypes cmask = args.GetInt64(SCC_CARGO_LIST); bool first = true; for (const auto &cs : _sorted_cargo_specs) { @@ -1242,55 +1242,55 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara } case SCC_CURRENCY_SHORT: // {CURRENCY_SHORT} - FormatGenericCurrency(builder, _currency, args->GetInt64(), true); + FormatGenericCurrency(builder, _currency, args.GetInt64(), true); break; case SCC_CURRENCY_LONG: // {CURRENCY_LONG} - FormatGenericCurrency(builder, _currency, args->GetInt64(SCC_CURRENCY_LONG), false); + FormatGenericCurrency(builder, _currency, args.GetInt64(SCC_CURRENCY_LONG), false); break; case SCC_DATE_TINY: // {DATE_TINY} - FormatTinyOrISODate(builder, args->GetInt32(SCC_DATE_TINY), STR_FORMAT_DATE_TINY); + FormatTinyOrISODate(builder, args.GetInt32(SCC_DATE_TINY), STR_FORMAT_DATE_TINY); break; case SCC_DATE_SHORT: // {DATE_SHORT} - FormatMonthAndYear(builder, args->GetInt32(SCC_DATE_SHORT), next_substr_case_index); + FormatMonthAndYear(builder, args.GetInt32(SCC_DATE_SHORT), next_substr_case_index); next_substr_case_index = 0; break; case SCC_DATE_LONG: // {DATE_LONG} - FormatYmdString(builder, args->GetInt32(SCC_DATE_LONG), next_substr_case_index); + FormatYmdString(builder, args.GetInt32(SCC_DATE_LONG), next_substr_case_index); next_substr_case_index = 0; break; case SCC_DATE_ISO: // {DATE_ISO} - FormatTinyOrISODate(builder, args->GetInt32(), STR_FORMAT_DATE_ISO); + FormatTinyOrISODate(builder, args.GetInt32(), STR_FORMAT_DATE_ISO); break; case SCC_FORCE: { // {FORCE} assert(_settings_game.locale.units_force < lengthof(_units_force)); const auto &x = _units_force[_settings_game.locale.units_force]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64()), x.decimal_places}; + int64 args_array[] = {x.c.ToDisplay(args.GetInt64()), x.decimal_places}; StringParameters tmp_params(args_array); - FormatString(builder, GetStringPtr(x.s), &tmp_params); + FormatString(builder, GetStringPtr(x.s), tmp_params); break; } case SCC_HEIGHT: { // {HEIGHT} assert(_settings_game.locale.units_height < lengthof(_units_height)); const auto &x = _units_height[_settings_game.locale.units_height]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64()), x.decimal_places}; + int64 args_array[] = {x.c.ToDisplay(args.GetInt64()), x.decimal_places}; StringParameters tmp_params(args_array); - FormatString(builder, GetStringPtr(x.s), &tmp_params); + FormatString(builder, GetStringPtr(x.s), tmp_params); break; } case SCC_POWER: { // {POWER} assert(_settings_game.locale.units_power < lengthof(_units_power)); const auto &x = _units_power[_settings_game.locale.units_power]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64()), x.decimal_places}; + int64 args_array[] = {x.c.ToDisplay(args.GetInt64()), x.decimal_places}; StringParameters tmp_params(args_array); - FormatString(builder, GetStringPtr(x.s), &tmp_params); + FormatString(builder, GetStringPtr(x.s), tmp_params); break; } @@ -1298,14 +1298,14 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara auto setting = _settings_game.locale.units_power * 3u + _settings_game.locale.units_weight; assert(setting < lengthof(_units_power_to_weight)); const auto &x = _units_power_to_weight[setting]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64()), x.decimal_places}; + int64 args_array[] = {x.c.ToDisplay(args.GetInt64()), x.decimal_places}; StringParameters tmp_params(args_array); - FormatString(builder, GetStringPtr(x.s), &tmp_params); + FormatString(builder, GetStringPtr(x.s), tmp_params); break; } case SCC_VELOCITY: { // {VELOCITY} - int64 arg = args->GetInt64(SCC_VELOCITY); + int64 arg = args.GetInt64(SCC_VELOCITY); // Unpack vehicle type from packed argument to get desired units. VehicleType vt = static_cast(GB(arg, 56, 8)); byte units = GetVelocityUnits(vt); @@ -1313,106 +1313,106 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara const auto &x = _units_velocity[units]; int64 args_array[] = {ConvertKmhishSpeedToDisplaySpeed(GB(arg, 0, 56), vt), x.decimal_places}; StringParameters tmp_params(args_array); - FormatString(builder, GetStringPtr(x.s), &tmp_params); + FormatString(builder, GetStringPtr(x.s), tmp_params); break; } case SCC_VOLUME_SHORT: { // {VOLUME_SHORT} assert(_settings_game.locale.units_volume < lengthof(_units_volume)); const auto &x = _units_volume[_settings_game.locale.units_volume]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64()), x.decimal_places}; + int64 args_array[] = {x.c.ToDisplay(args.GetInt64()), x.decimal_places}; StringParameters tmp_params(args_array); - FormatString(builder, GetStringPtr(x.s), &tmp_params); + FormatString(builder, GetStringPtr(x.s), tmp_params); break; } case SCC_VOLUME_LONG: { // {VOLUME_LONG} assert(_settings_game.locale.units_volume < lengthof(_units_volume)); const auto &x = _units_volume[_settings_game.locale.units_volume]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64(SCC_VOLUME_LONG)), x.decimal_places}; + int64 args_array[] = {x.c.ToDisplay(args.GetInt64(SCC_VOLUME_LONG)), x.decimal_places}; StringParameters tmp_params(args_array); - FormatString(builder, GetStringPtr(x.l), &tmp_params); + FormatString(builder, GetStringPtr(x.l), tmp_params); break; } case SCC_WEIGHT_SHORT: { // {WEIGHT_SHORT} assert(_settings_game.locale.units_weight < lengthof(_units_weight)); const auto &x = _units_weight[_settings_game.locale.units_weight]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64()), x.decimal_places}; + int64 args_array[] = {x.c.ToDisplay(args.GetInt64()), x.decimal_places}; StringParameters tmp_params(args_array); - FormatString(builder, GetStringPtr(x.s), &tmp_params); + FormatString(builder, GetStringPtr(x.s), tmp_params); break; } case SCC_WEIGHT_LONG: { // {WEIGHT_LONG} assert(_settings_game.locale.units_weight < lengthof(_units_weight)); const auto &x = _units_weight[_settings_game.locale.units_weight]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64(SCC_WEIGHT_LONG)), x.decimal_places}; + int64 args_array[] = {x.c.ToDisplay(args.GetInt64(SCC_WEIGHT_LONG)), x.decimal_places}; StringParameters tmp_params(args_array); - FormatString(builder, GetStringPtr(x.l), &tmp_params); + FormatString(builder, GetStringPtr(x.l), tmp_params); break; } case SCC_COMPANY_NAME: { // {COMPANY} - const Company *c = Company::GetIfValid(args->GetInt32()); + const Company *c = Company::GetIfValid(args.GetInt32()); if (c == nullptr) break; if (!c->name.empty()) { int64 args_array[] = {(int64)(size_t)c->name.c_str()}; StringParameters tmp_params(args_array); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, &tmp_params); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); } else { int64 args_array[] = {c->name_2}; StringParameters tmp_params(args_array); - GetStringWithArgs(builder, c->name_1, &tmp_params); + GetStringWithArgs(builder, c->name_1, tmp_params); } break; } case SCC_COMPANY_NUM: { // {COMPANY_NUM} - CompanyID company = (CompanyID)args->GetInt32(); + CompanyID company = (CompanyID)args.GetInt32(); /* Nothing is added for AI or inactive companies */ if (Company::IsValidHumanID(company)) { int64 args_array[] = {company + 1}; StringParameters tmp_params(args_array); - GetStringWithArgs(builder, STR_FORMAT_COMPANY_NUM, &tmp_params); + GetStringWithArgs(builder, STR_FORMAT_COMPANY_NUM, tmp_params); } break; } case SCC_DEPOT_NAME: { // {DEPOT} - VehicleType vt = (VehicleType)args->GetInt32(SCC_DEPOT_NAME); + VehicleType vt = (VehicleType)args.GetInt32(SCC_DEPOT_NAME); if (vt == VEH_AIRCRAFT) { - uint64 args_array[] = {(uint64)args->GetInt32()}; + uint64 args_array[] = {(uint64)args.GetInt32()}; WChar types_array[] = {SCC_STATION_NAME}; StringParameters tmp_params(args_array, 1, types_array); - GetStringWithArgs(builder, STR_FORMAT_DEPOT_NAME_AIRCRAFT, &tmp_params); + GetStringWithArgs(builder, STR_FORMAT_DEPOT_NAME_AIRCRAFT, tmp_params); break; } - const Depot *d = Depot::Get(args->GetInt32()); + const Depot *d = Depot::Get(args.GetInt32()); if (!d->name.empty()) { int64 args_array[] = {(int64)(size_t)d->name.c_str()}; StringParameters tmp_params(args_array); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, &tmp_params); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); } else { int64 args_array[] = {d->town->index, d->town_cn + 1}; StringParameters tmp_params(args_array); - GetStringWithArgs(builder, STR_FORMAT_DEPOT_NAME_TRAIN + 2 * vt + (d->town_cn == 0 ? 0 : 1), &tmp_params); + GetStringWithArgs(builder, STR_FORMAT_DEPOT_NAME_TRAIN + 2 * vt + (d->town_cn == 0 ? 0 : 1), tmp_params); } break; } case SCC_ENGINE_NAME: { // {ENGINE} - int64 arg = args->GetInt64(SCC_ENGINE_NAME); + int64 arg = args.GetInt64(SCC_ENGINE_NAME); const Engine *e = Engine::GetIfValid(static_cast(arg)); if (e == nullptr) break; if (!e->name.empty() && e->IsEnabled()) { int64 args_array[] = {(int64)(size_t)e->name.c_str()}; StringParameters tmp_params(args_array); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, &tmp_params); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); break; } @@ -1428,7 +1428,7 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara uint64 tmp_dparam[6] = { 0 }; WChar tmp_type[6] = { 0 }; StringParameters tmp_params(tmp_dparam, 6, tmp_type); - GetStringWithArgs(builder, GetGRFStringID(grffile->grfid, 0xD000 + callback), &tmp_params); + GetStringWithArgs(builder, GetGRFStringID(grffile->grfid, 0xD000 + callback), tmp_params); StopTextRefStackUsage(); break; @@ -1436,29 +1436,29 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara } StringParameters tmp_params(nullptr, 0, nullptr); - GetStringWithArgs(builder, e->info.string_id, &tmp_params); + GetStringWithArgs(builder, e->info.string_id, tmp_params); break; } case SCC_GROUP_NAME: { // {GROUP} - const Group *g = Group::GetIfValid(args->GetInt32()); + const Group *g = Group::GetIfValid(args.GetInt32()); if (g == nullptr) break; if (!g->name.empty()) { int64 args_array[] = {(int64)(size_t)g->name.c_str()}; StringParameters tmp_params(args_array); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, &tmp_params); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); } else { int64 args_array[] = {g->index}; StringParameters tmp_params(args_array); - GetStringWithArgs(builder, STR_FORMAT_GROUP_NAME, &tmp_params); + GetStringWithArgs(builder, STR_FORMAT_GROUP_NAME, tmp_params); } break; } case SCC_INDUSTRY_NAME: { // {INDUSTRY} - const Industry *i = Industry::GetIfValid(args->GetInt32(SCC_INDUSTRY_NAME)); + const Industry *i = Industry::GetIfValid(args.GetInt32(SCC_INDUSTRY_NAME)); if (i == nullptr) break; static bool use_cache = true; @@ -1469,36 +1469,36 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara /* Gender is defined by the industry type. * STR_FORMAT_INDUSTRY_NAME may have the town first, so it would result in the gender of the town name */ StringParameters tmp_params(nullptr, 0, nullptr); - FormatString(builder, GetStringPtr(GetIndustrySpec(i->type)->name), &tmp_params, next_substr_case_index); + FormatString(builder, GetStringPtr(GetIndustrySpec(i->type)->name), tmp_params, next_substr_case_index); } else { /* First print the town name and the industry type name. */ int64 args_array[2] = {i->town->index, GetIndustrySpec(i->type)->name}; StringParameters tmp_params(args_array); - FormatString(builder, GetStringPtr(STR_FORMAT_INDUSTRY_NAME), &tmp_params, next_substr_case_index); + FormatString(builder, GetStringPtr(STR_FORMAT_INDUSTRY_NAME), tmp_params, next_substr_case_index); } next_substr_case_index = 0; break; } case SCC_PRESIDENT_NAME: { // {PRESIDENT_NAME} - const Company *c = Company::GetIfValid(args->GetInt32(SCC_PRESIDENT_NAME)); + const Company *c = Company::GetIfValid(args.GetInt32(SCC_PRESIDENT_NAME)); if (c == nullptr) break; if (!c->president_name.empty()) { int64 args_array[] = {(int64)(size_t)c->president_name.c_str()}; StringParameters tmp_params(args_array); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, &tmp_params); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); } else { int64 args_array[] = {c->president_name_2}; StringParameters tmp_params(args_array); - GetStringWithArgs(builder, c->president_name_1, &tmp_params); + GetStringWithArgs(builder, c->president_name_1, tmp_params); } break; } case SCC_STATION_NAME: { // {STATION} - StationID sid = args->GetInt32(SCC_STATION_NAME); + StationID sid = args.GetInt32(SCC_STATION_NAME); const Station *st = Station::GetIfValid(sid); if (st == nullptr) { @@ -1506,7 +1506,7 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara * be "drawing" an invalid station is in the case of cargo that is * in transit. */ StringParameters tmp_params(nullptr, 0, nullptr); - GetStringWithArgs(builder, STR_UNKNOWN_STATION, &tmp_params); + GetStringWithArgs(builder, STR_UNKNOWN_STATION, tmp_params); break; } @@ -1517,7 +1517,7 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara } else if (!st->name.empty()) { int64 args_array[] = {(int64)(size_t)st->name.c_str()}; StringParameters tmp_params(args_array); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, &tmp_params); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); } else { StringID string_id = st->string_id; if (st->indtype != IT_INVALID) { @@ -1535,13 +1535,13 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara uint64 args_array[] = {STR_TOWN_NAME, st->town->index, st->index}; WChar types_array[] = {0, SCC_TOWN_NAME, SCC_NUM}; StringParameters tmp_params(args_array, 3, types_array); - GetStringWithArgs(builder, string_id, &tmp_params); + GetStringWithArgs(builder, string_id, tmp_params); } break; } case SCC_TOWN_NAME: { // {TOWN} - const Town *t = Town::GetIfValid(args->GetInt32(SCC_TOWN_NAME)); + const Town *t = Town::GetIfValid(args.GetInt32(SCC_TOWN_NAME)); if (t == nullptr) break; static bool use_cache = true; @@ -1551,7 +1551,7 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara } else if (!t->name.empty()) { int64 args_array[] = {(int64)(size_t)t->name.c_str()}; StringParameters tmp_params(args_array); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, &tmp_params); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); } else { GetTownName(builder, t); } @@ -1559,36 +1559,36 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara } case SCC_WAYPOINT_NAME: { // {WAYPOINT} - Waypoint *wp = Waypoint::GetIfValid(args->GetInt32(SCC_WAYPOINT_NAME)); + Waypoint *wp = Waypoint::GetIfValid(args.GetInt32(SCC_WAYPOINT_NAME)); if (wp == nullptr) break; if (!wp->name.empty()) { int64 args_array[] = {(int64)(size_t)wp->name.c_str()}; StringParameters tmp_params(args_array); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, &tmp_params); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); } else { int64 args_array[] = {wp->town->index, wp->town_cn + 1}; StringParameters tmp_params(args_array); StringID string_id = ((wp->string_id == STR_SV_STNAME_BUOY) ? STR_FORMAT_BUOY_NAME : STR_FORMAT_WAYPOINT_NAME); if (wp->town_cn != 0) string_id++; - GetStringWithArgs(builder, string_id, &tmp_params); + GetStringWithArgs(builder, string_id, tmp_params); } break; } case SCC_VEHICLE_NAME: { // {VEHICLE} - const Vehicle *v = Vehicle::GetIfValid(args->GetInt32(SCC_VEHICLE_NAME)); + const Vehicle *v = Vehicle::GetIfValid(args.GetInt32(SCC_VEHICLE_NAME)); if (v == nullptr) break; if (!v->name.empty()) { int64 args_array[] = {(int64)(size_t)v->name.c_str()}; StringParameters tmp_params(args_array); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, &tmp_params); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); } else if (v->group_id != DEFAULT_GROUP) { /* The vehicle has no name, but is member of a group, so print group name */ int64 args_array[] = {v->group_id, v->unitnumber}; StringParameters tmp_params(args_array); - GetStringWithArgs(builder, STR_FORMAT_GROUP_VEHICLE_NAME, &tmp_params); + GetStringWithArgs(builder, STR_FORMAT_GROUP_VEHICLE_NAME, tmp_params); } else { int64 args_array[] = {v->unitnumber}; StringParameters tmp_params(args_array); @@ -1602,28 +1602,28 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara case VEH_AIRCRAFT: string_id = STR_SV_AIRCRAFT_NAME; break; } - GetStringWithArgs(builder, string_id, &tmp_params); + GetStringWithArgs(builder, string_id, tmp_params); } break; } case SCC_SIGN_NAME: { // {SIGN} - const Sign *si = Sign::GetIfValid(args->GetInt32()); + const Sign *si = Sign::GetIfValid(args.GetInt32()); if (si == nullptr) break; if (!si->name.empty()) { int64 args_array[] = {(int64)(size_t)si->name.c_str()}; StringParameters tmp_params(args_array); - GetStringWithArgs(builder, STR_JUST_RAW_STRING, &tmp_params); + GetStringWithArgs(builder, STR_JUST_RAW_STRING, tmp_params); } else { StringParameters tmp_params(nullptr, 0, nullptr); - GetStringWithArgs(builder, STR_DEFAULT_SIGN_NAME, &tmp_params); + GetStringWithArgs(builder, STR_DEFAULT_SIGN_NAME, tmp_params); } break; } case SCC_STATION_FEATURES: { // {STATIONFEATURES} - StationGetSpecialString(builder, args->GetInt32(SCC_STATION_FEATURES)); + StationGetSpecialString(builder, args.GetInt32(SCC_STATION_FEATURES)); break; } @@ -1761,25 +1761,25 @@ static void GenPresidentName(StringBuilder &builder, uint32 x) builder += base[num * GB(x, 16, 8) >> 8]; } -static void GetSpecialNameString(StringBuilder &builder, int ind, StringParameters *args) +static void GetSpecialNameString(StringBuilder &builder, int ind, StringParameters &args) { switch (ind) { case 1: // not used - builder += _silly_company_names[std::min(args->GetInt32() & 0xFFFF, lengthof(_silly_company_names) - 1)]; + builder += _silly_company_names[std::min(args.GetInt32() & 0xFFFF, lengthof(_silly_company_names) - 1)]; return; case 2: // used for Foobar & Co company names - GenAndCoName(builder, args->GetInt32()); + GenAndCoName(builder, args.GetInt32()); return; case 3: // President name - GenPresidentName(builder, args->GetInt32()); + GenPresidentName(builder, args.GetInt32()); return; } /* town name? */ if (IsInsideMM(ind - 6, 0, SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1)) { - GetSpecialTownNameString(builder, ind - 6, args->GetInt32()); + GetSpecialTownNameString(builder, ind - 6, args.GetInt32()); builder += " Transport"; return; } diff --git a/src/strings_func.h b/src/strings_func.h index 736b51a72f..c997a5acc2 100644 --- a/src/strings_func.h +++ b/src/strings_func.h @@ -179,7 +179,7 @@ public: extern StringParameters _global_string_params; std::string GetString(StringID string); -std::string GetStringWithArgs(StringID string, StringParameters *args); +std::string GetStringWithArgs(StringID string, StringParameters &args); const char *GetStringPtr(StringID string); uint ConvertKmhishSpeedToDisplaySpeed(uint speed, VehicleType type); diff --git a/src/strings_internal.h b/src/strings_internal.h index d471baadf1..10c5e523ff 100644 --- a/src/strings_internal.h +++ b/src/strings_internal.h @@ -112,7 +112,7 @@ public: } }; -void GetStringWithArgs(StringBuilder &builder, StringID string, StringParameters *args, uint case_index = 0, bool game_script = false); +void GetStringWithArgs(StringBuilder &builder, StringID string, StringParameters &args, uint case_index = 0, bool game_script = false); /* Do not leak the StringBuilder to everywhere. */ void GenerateTownNameString(StringBuilder &builder, size_t lang, uint32_t seed); diff --git a/src/townname.cpp b/src/townname.cpp index 8676eb93e9..3cd1b0ab07 100644 --- a/src/townname.cpp +++ b/src/townname.cpp @@ -50,7 +50,7 @@ static void GetTownName(StringBuilder &builder, const TownNameParams *par, uint3 if (par->grfid == 0) { int64 args_array[1] = { townnameparts }; StringParameters tmp_params(args_array); - GetStringWithArgs(builder, par->type, &tmp_params); + GetStringWithArgs(builder, par->type, tmp_params); return; }