diff --git a/src/base_media_func.h b/src/base_media_func.h index 8f1fac4c26..d5a96bcc93 100644 --- a/src/base_media_func.h +++ b/src/base_media_func.h @@ -79,7 +79,7 @@ bool BaseSet::FillSetDetails(const IniFile &ini, const std::string &path, con /* Add the translations of the descriptions too. */ for (const IniItem &titem : metadata->items) { - if (titem.name.compare(0, 12, "description.") != 0) continue; + if (!titem.name.starts_with("description.")) continue; this->description[titem.name.substr(12)] = titem.value.value_or(""); } diff --git a/src/fios.cpp b/src/fios.cpp index fc02d43da7..67eec48b44 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -507,7 +507,7 @@ std::tuple FiosGetHeightmapListCallback(SaveLoadOperation for (Searchpath sp : _valid_searchpaths) { std::string buf = FioGetDirectory(sp, HEIGHTMAP_DIR); - if (buf.compare(0, buf.size(), it->second.tar_filename, 0, buf.size()) == 0) { + if (it->second.tar_filename.starts_with(buf)) { match = true; break; } diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp index 27e4314f5a..021d5fec57 100644 --- a/src/game/game_text.cpp +++ b/src/game/game_text.cpp @@ -225,15 +225,15 @@ static std::shared_ptr LoadTranslations() if (!tar_filename.empty() && (iter = _tar_list[GAME_DIR].find(tar_filename)) != _tar_list[GAME_DIR].end()) { /* The main script is in a tar file, so find all files that * are in the same tar and add them to the langfile scanner. */ - for (const auto &tar : _tar_filelist[GAME_DIR]) { + for (const auto &[name, entry] : _tar_filelist[GAME_DIR]) { /* Not in the same tar. */ - if (tar.second.tar_filename != iter->first) continue; + if (entry.tar_filename != iter->first) continue; /* Check the path and extension. */ - if (tar.first.size() <= ldir.size() || tar.first.compare(0, ldir.size(), ldir) != 0) continue; - if (tar.first.compare(tar.first.size() - 4, 4, ".txt") != 0) continue; + if (!name.starts_with(ldir)) continue; + if (!name.ends_with(".txt")) continue; - scanner.AddFile(tar.first, 0, tar_filename); + scanner.AddFile(name, 0, tar_filename); } } else { /* Scan filesystem */ diff --git a/src/ini_load.cpp b/src/ini_load.cpp index 7702eed8ce..f134f6502e 100644 --- a/src/ini_load.cpp +++ b/src/ini_load.cpp @@ -173,8 +173,7 @@ IniGroup &IniLoadFile::CreateGroup(std::string_view name) */ void IniLoadFile::RemoveGroup(std::string_view name) { - size_t len = name.length(); - this->groups.remove_if([&name, &len](const IniGroup &group) { return group.name.compare(0, len, name) == 0; }); + this->groups.remove_if([&name](const IniGroup &group) { return group.name.starts_with(name); }); } /** diff --git a/src/language.h b/src/language.h index 4f1a50a29d..3158154ed2 100644 --- a/src/language.h +++ b/src/language.h @@ -67,10 +67,8 @@ struct LanguagePackHeader { */ uint8_t GetGenderIndex(std::string_view gender_str) const { - for (uint8_t i = 0; i < MAX_NUM_GENDERS; i++) { - if (gender_str.compare(this->genders[i]) == 0) return i; - } - return MAX_NUM_GENDERS; + auto it = std::ranges::find(this->genders, gender_str); + return static_cast(std::distance(std::begin(this->genders), it)); } /** @@ -80,10 +78,8 @@ struct LanguagePackHeader { */ uint8_t GetCaseIndex(std::string_view case_str) const { - for (uint8_t i = 0; i < MAX_NUM_CASES; i++) { - if (case_str.compare(this->cases[i]) == 0) return i; - } - return MAX_NUM_CASES; + auto it = std::ranges::find(this->cases, case_str); + return static_cast(std::distance(std::begin(this->cases), it)); } }; /** Make sure the size is right. */ diff --git a/src/network/network.cpp b/src/network/network.cpp index 6a02b82f5a..29cbcf7acf 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -875,14 +875,14 @@ static void CheckClientAndServerName() { static const std::string fallback_client_name = "Unnamed Client"; StrTrimInPlace(_settings_client.network.client_name); - if (_settings_client.network.client_name.empty() || _settings_client.network.client_name.compare(fallback_client_name) == 0) { + if (_settings_client.network.client_name.empty() || _settings_client.network.client_name == fallback_client_name) { Debug(net, 1, "No \"client_name\" has been set, using \"{}\" instead. Please set this now using the \"name \" command", fallback_client_name); _settings_client.network.client_name = fallback_client_name; } static const std::string fallback_server_name = "Unnamed Server"; StrTrimInPlace(_settings_client.network.server_name); - if (_settings_client.network.server_name.empty() || _settings_client.network.server_name.compare(fallback_server_name) == 0) { + if (_settings_client.network.server_name.empty() || _settings_client.network.server_name == fallback_server_name) { Debug(net, 1, "No \"server_name\" has been set, using \"{}\" instead. Please set this now using the \"server_name \" command", fallback_server_name); _settings_client.network.server_name = fallback_server_name; } diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp index 5ede07f12b..95694636d2 100644 --- a/src/network/network_admin.cpp +++ b/src/network/network_admin.cpp @@ -633,8 +633,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::Receive_ADMIN_JOIN(Packet &p) std::string password = p.Recv_string(NETWORK_PASSWORD_LENGTH); - if (_settings_client.network.admin_password.empty() || - _settings_client.network.admin_password.compare(password) != 0) { + if (_settings_client.network.admin_password.empty() || _settings_client.network.admin_password != password) { /* Password is invalid */ return this->SendError(NETWORK_ERROR_WRONG_PASSWORD); } diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 6dccf9e5fe..4313a9de0a 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -537,7 +537,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO(Pac ci = NetworkClientInfo::GetByClientID(client_id); if (ci != nullptr) { - if (playas == ci->client_playas && name.compare(ci->client_name) != 0) { + if (playas == ci->client_playas && name != ci->client_name) { /* Client name changed, display the change */ NetworkTextMessage(NETWORK_ACTION_NAME_CHANGE, CC_DEFAULT, false, ci->client_name, name); } else if (playas != ci->client_playas) { @@ -1296,17 +1296,17 @@ void NetworkUpdateClientName(const std::string &client_name) if (ci == nullptr) return; /* Don't change the name if it is the same as the old name */ - if (client_name.compare(ci->client_name) != 0) { - if (!_network_server) { - MyClient::SendSetName(client_name); - } else { - /* Copy to a temporary buffer so no #n gets added after our name in the settings when there are duplicate names. */ - std::string temporary_name = client_name; - if (NetworkMakeClientNameUnique(temporary_name)) { - NetworkTextMessage(NETWORK_ACTION_NAME_CHANGE, CC_DEFAULT, false, ci->client_name, temporary_name); - ci->client_name = std::move(temporary_name); - NetworkUpdateClientInfo(CLIENT_ID_SERVER); - } + if (client_name == ci->client_name) return; + + if (!_network_server) { + MyClient::SendSetName(client_name); + } else { + /* Copy to a temporary buffer so no #n gets added after our name in the settings when there are duplicate names. */ + std::string temporary_name = client_name; + if (NetworkMakeClientNameUnique(temporary_name)) { + NetworkTextMessage(NETWORK_ACTION_NAME_CHANGE, CC_DEFAULT, false, ci->client_name, temporary_name); + ci->client_name = std::move(temporary_name); + NetworkUpdateClientInfo(CLIENT_ID_SERVER); } } } diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 3087db360e..ff39b2b854 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -1451,7 +1451,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_RCON(Packet &p) /* We are allowed, nothing more to validate. */ } else if (_settings_client.network.rcon_password.empty()) { return NETWORK_RECV_STATUS_OKAY; - } else if (_settings_client.network.rcon_password.compare(password) != 0) { + } else if (_settings_client.network.rcon_password != password) { Debug(net, 1, "[rcon] Wrong password from client-id {}", this->client_id); return NETWORK_RECV_STATUS_OKAY; } @@ -1648,7 +1648,7 @@ bool NetworkServerChangeClientName(ClientID client_id, const std::string &new_na { /* Check if the name's already in use */ for (NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { - if (ci->client_name.compare(new_name) == 0) return false; + if (ci->client_name == new_name) return false; } NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id); diff --git a/src/os/windows/font_win32.cpp b/src/os/windows/font_win32.cpp index da30507260..24100a1704 100644 --- a/src/os/windows/font_win32.cpp +++ b/src/os/windows/font_win32.cpp @@ -38,9 +38,8 @@ struct EFCParam { bool Add(const std::wstring_view &font) { - for (const auto &entry : this->fonts) { - if (font.compare(entry) == 0) return false; - } + auto it = std::ranges::find(this->fonts, font); + if (it != std::end(this->fonts)) return false; this->fonts.emplace_back(font); diff --git a/src/saveload/ai_sl.cpp b/src/saveload/ai_sl.cpp index 29f759361c..e6e52f8217 100644 --- a/src/saveload/ai_sl.cpp +++ b/src/saveload/ai_sl.cpp @@ -111,7 +111,7 @@ struct AIPLChunkHandler : ChunkHandler { * latest version of the AI instead. */ config->Change(_ai_saveload_name, -1, false); if (!config->HasScript()) { - if (_ai_saveload_name.compare("%_dummy") != 0) { + if (_ai_saveload_name != "%_dummy") { Debug(script, 0, "The savegame has an AI by the name '{}', version {} which is no longer available.", _ai_saveload_name, _ai_saveload_version); Debug(script, 0, "Configuration switched to Random AI."); } @@ -136,7 +136,7 @@ struct AIPLChunkHandler : ChunkHandler { * latest version of the AI instead. */ config->Change(_ai_saveload_name, -1, false); if (!config->HasScript()) { - if (_ai_saveload_name.compare("%_dummy") != 0) { + if (_ai_saveload_name != "%_dummy") { Debug(script, 0, "The savegame has an AI by the name '{}', version {} which is no longer available.", _ai_saveload_name, _ai_saveload_version); Debug(script, 0, "A random other AI will be loaded in its place."); } else { diff --git a/src/saveload/game_sl.cpp b/src/saveload/game_sl.cpp index d6a35ffa20..82b2c783ed 100644 --- a/src/saveload/game_sl.cpp +++ b/src/saveload/game_sl.cpp @@ -80,7 +80,7 @@ struct GSDTChunkHandler : ChunkHandler { * latest version of the GameScript instead. */ config->Change(_game_saveload_name, -1, false); if (!config->HasScript()) { - if (_game_saveload_name.compare("%_dummy") != 0) { + if (_game_saveload_name != "%_dummy") { Debug(script, 0, "The savegame has an GameScript by the name '{}', version {} which is no longer available.", _game_saveload_name, _game_saveload_version); Debug(script, 0, "This game will continue to run without GameScript."); } else { diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 9f759cc7b0..a6dd26e3cf 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2861,7 +2861,7 @@ static std::pair GetSavegameFormat(std::string_ std::string_view name = has_comp_level ? full_name.substr(0, separator) : full_name; for (const auto &slf : _saveload_formats) { - if (slf.init_write != nullptr && name.compare(slf.name) == 0) { + if (slf.init_write != nullptr && name == slf.name) { if (has_comp_level) { auto complevel = full_name.substr(separator + 1); diff --git a/src/settings.cpp b/src/settings.cpp index 9efb21a057..1b90eb6140 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1547,7 +1547,7 @@ StringList GetGRFPresetList() ConfigIniFile ini(_config_file); for (const IniGroup &group : ini.groups) { - if (group.name.compare(0, 7, "preset-") == 0) { + if (group.name.starts_with("preset-")) { list.push_back(group.name.substr(7)); } } diff --git a/src/settings_table.cpp b/src/settings_table.cpp index b75bd3afb6..1881cfd79e 100644 --- a/src/settings_table.cpp +++ b/src/settings_table.cpp @@ -572,7 +572,7 @@ static void MaxVehiclesChanged(int32_t) */ static bool ReplaceAsteriskWithEmptyPassword(std::string &newval) { - if (newval.compare("*") == 0) newval.clear(); + if (newval == "*") newval.clear(); return true; }