From d0a635344912a5ca641131f03ec483ae1c045f2e Mon Sep 17 00:00:00 2001 From: jerrrrycho Date: Sat, 10 Oct 2026 16:24:06 +0200 Subject: [PATCH] refactor(sonar): use std::ranges algorithms and std::erase(_if) (cpp:S6197) --- McZapkie/Mover.cpp | 2 +- audio/sound.cpp | 5 ++--- launcher/textures_scanner.cpp | 8 ++++---- rendering/lightarray.cpp | 7 +------ rendering/particles.cpp | 6 ++---- scene/sceneeditor.cpp | 15 ++++++--------- simulation/simulationenvironment.cpp | 7 +++---- utilities/utilities.cpp | 8 ++++---- vehicle/Train.cpp | 5 ++--- 9 files changed, 25 insertions(+), 38 deletions(-) diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index 91073f50..b5c49557 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -11377,7 +11377,7 @@ void TMoverParameters::LoadFIZ_Switches(std::string const &Input) { auto &presets{PantsPreset.first}; extract_value(presets, "PantographPresets", Input, "0|1|3|2"); - presets.erase(std::remove(std::begin(presets), std::end(presets), '|'), std::end(presets)); + std::erase(presets, '|'); } } diff --git a/audio/sound.cpp b/audio/sound.cpp index 8848ffb8..b0935197 100644 --- a/audio/sound.cpp +++ b/audio/sound.cpp @@ -52,9 +52,8 @@ sound_source::deserialize( cParser &Input, sound_type const Legacytype, int cons if( false == m_soundchunks.empty() ) { // arrange loaded sound chunks in requested order - std::sort( - std::begin( m_soundchunks ), std::end( m_soundchunks ), - []( soundchunk_pair const &Left, soundchunk_pair const &Right ) { + std::ranges::sort( + m_soundchunks, []( soundchunk_pair const &Left, soundchunk_pair const &Right ) { return Left.second.threshold < Right.second.threshold; } ); // calculate and cache full range points for each chunk, including crossfade sections: // on the far end the crossfade section extends to the threshold point of the next chunk... diff --git a/launcher/textures_scanner.cpp b/launcher/textures_scanner.cpp index 622b4984..0a0abcb8 100644 --- a/launcher/textures_scanner.cpp +++ b/launcher/textures_scanner.cpp @@ -172,10 +172,10 @@ std::shared_ptr ui::vehicles_bank::parse_meta(const std::string & ToLower("n:" + meta->name + ":i:" + meta->short_id + ":d:" + meta->location + ":r:" + meta->rev_date + ":c:" + meta->rev_company + ":t:" + meta->texture_author + ":p:" + meta->photo_author); - std::replace(std::begin(meta->location), std::end(meta->location), '_', ' '); - std::replace(std::begin(meta->rev_company), std::end(meta->rev_company), '_', ' '); - std::replace(std::begin(meta->texture_author), std::end(meta->texture_author), '_', ' '); - std::replace(std::begin(meta->photo_author), std::end(meta->photo_author), '_', ' '); + std::ranges::replace(meta->location, '_', ' '); + std::ranges::replace(meta->rev_company, '_', ' '); + std::ranges::replace(meta->texture_author, '_', ' '); + std::ranges::replace(meta->photo_author, '_', ' '); if (!meta->rev_date.empty() && meta->rev_date != "?") { std::istringstream stream(meta->rev_date); diff --git a/rendering/lightarray.cpp b/rendering/lightarray.cpp index aa931f51..15020894 100644 --- a/rendering/lightarray.cpp +++ b/rendering/lightarray.cpp @@ -29,12 +29,7 @@ light_array::insert( TDynamicObject const *Owner ) { void light_array::remove( TDynamicObject const *Owner ) { - data.erase( - std::remove_if( - data.begin(), - data.end(), - [=]( light_record const &light ){ return light.owner == Owner; } ), - data.end() ); + std::erase_if( data, [=]( light_record const &light ){ return light.owner == Owner; } ); } // updates records in the collection diff --git a/rendering/particles.cpp b/rendering/particles.cpp index 4cbbc62c..bf5a602f 100644 --- a/rendering/particles.cpp +++ b/rendering/particles.cpp @@ -254,10 +254,8 @@ smoke_source::update( double const Timedelta, bool const Onlydespawn ) { // if we still have pending requests after filling entire container replace older particles if( m_spawncount >= 1.f ) { // sort all particles from most to least transparent, oldest to youngest if it's a tie - std::sort( - std::begin( m_particles ), - std::end( m_particles ), - []( smoke_particle const &Left, smoke_particle const &Right ) { + std::ranges::sort( + m_particles, []( smoke_particle const &Left, smoke_particle const &Right ) { return ( Left.opacity != Right.opacity ? Left.opacity < Right.opacity : Left.age > Right.age ); } ); diff --git a/scene/sceneeditor.cpp b/scene/sceneeditor.cpp index e5ae8d4f..5d56e915 100644 --- a/scene/sceneeditor.cpp +++ b/scene/sceneeditor.cpp @@ -50,9 +50,8 @@ basic_editor::translate( scene::basic_node *Node, glm::dvec3 const &Location, bo // TODO: contextual switch between group and item translation // TODO: translation of affected/relevant events auto &nodegroup { scene::Groups.group( Node->group() ).nodes }; - std::for_each( - std::begin( nodegroup ), std::end( nodegroup ), - [&]( auto *node ) { + std::ranges::for_each( + nodegroup, [&]( auto *node ) { translate_node( node, node->location() + translation ); } ); } } @@ -72,9 +71,8 @@ basic_editor::translate( scene::basic_node *Node, float const Offset ) { // TODO: contextual switch between group and item translation // TODO: translation of affected/relevant events auto &nodegroup { scene::Groups.group( Node->group() ).nodes }; - std::for_each( - std::begin( nodegroup ), std::end( nodegroup ), - [&]( auto *node ) { + std::ranges::for_each( + nodegroup, [&]( auto *node ) { translate_node( node, offset ); } ); } } @@ -161,9 +159,8 @@ basic_editor::rotate( scene::basic_node *Node, glm::vec3 const &Angle, float con // TODO: translation of affected/relevant events auto const &rotationcenter { Node->location() }; auto const &nodegroup { scene::Groups.group( Node->group() ).nodes }; - std::for_each( - std::begin( nodegroup ), std::end( nodegroup ), - [&]( auto *node ) { + std::ranges::for_each( + nodegroup, [&]( auto *node ) { rotate_node( node, rotation ); if( node != Node ) { translate_node( diff --git a/simulation/simulationenvironment.cpp b/simulation/simulationenvironment.cpp index 5570dffe..14ad2353 100644 --- a/simulation/simulationenvironment.cpp +++ b/simulation/simulationenvironment.cpp @@ -46,11 +46,10 @@ world_environment::compute_season( int const Yearday ) { { 341, "autumn:" }, { 366, "winter:" } }; auto const lookup = - std::lower_bound( - std::begin( seasonsequence ), std::end( seasonsequence ), + std::ranges::lower_bound( + seasonsequence, std::clamp( Yearday, 1, seasonsequence.back().first ), - []( dayseasonpair const &Left, const int Right ) { - return Left.first < Right; } ); + {}, &dayseasonpair::first ); Global.Season = lookup->second; // season can affect the weather so if it changes, re-calculate weather as well diff --git a/utilities/utilities.cpp b/utilities/utilities.cpp index 804ca66c..a930bce2 100644 --- a/utilities/utilities.cpp +++ b/utilities/utilities.cpp @@ -297,7 +297,7 @@ std::string ToLower(std::string const &text) { auto lowercase{text}; - std::transform(std::begin(text), std::end(text), std::begin(lowercase), [](unsigned char c) { return std::tolower(c); }); + std::ranges::transform(text, std::begin(lowercase), [](unsigned char c) { return std::tolower(c); }); return lowercase; } @@ -305,7 +305,7 @@ std::string ToUpper(std::string const &text) { auto uppercase{text}; - std::transform(std::begin(text), std::end(text), std::begin(uppercase), [](unsigned char c) { return std::toupper(c); }); + std::ranges::transform(text, std::begin(uppercase), [](unsigned char c) { return std::toupper(c); }); return uppercase; } @@ -607,7 +607,7 @@ std::string deserialize_random_set(cParser &Input, char const *Break) { auto token{Input.getToken(true, Break)}; - std::replace(token.begin(), token.end(), '\\', '/'); + std::ranges::replace(token, '\\', '/'); if (token != "[") { // simple case, single token @@ -622,7 +622,7 @@ std::string deserialize_random_set(cParser &Input, char const *Break) } if (false == tokens.empty()) { - std::shuffle(std::begin(tokens), std::end(tokens), Global.random_engine); + std::ranges::shuffle(tokens, Global.random_engine); return tokens.front(); } else diff --git a/vehicle/Train.cpp b/vehicle/Train.cpp index 09fdb0a1..56eeef15 100644 --- a/vehicle/Train.cpp +++ b/vehicle/Train.cpp @@ -10122,8 +10122,7 @@ void TTrain::update_sounds_radio() if (false == m_radiomessages.empty()) { // erase completed radio messages from the list - m_radiomessages.erase(std::remove_if(std::begin(m_radiomessages), std::end(m_radiomessages), [](auto const &source) { return false == source.second->is_playing(); }), - std::end(m_radiomessages)); + std::erase_if(m_radiomessages, [](auto const &source) { return false == source.second->is_playing(); }); } // adjust audibility of remaining messages based on current radio conditions auto const radioenabled{true == mvOccupied->Radio && (mvOccupied->Power24vIsAvailable || mvOccupied->Power110vIsAvailable)}; @@ -10472,7 +10471,7 @@ bool TTrain::InitializeCab(int NewCabNo, std::string const &asFileName) // model kabiny parser.getTokens(); parser >> token; - std::replace(token.begin(), token.end(), '\\', '/'); + std::ranges::replace(token, '\\', '/'); if (token != "none") { // bieżąca sciezka do tekstur to dynamic/...