From 73e721513caa0b736ca3a47af519b2d5b916111f Mon Sep 17 00:00:00 2001 From: Vyacheslav Ivanov Date: Thu, 1 Aug 2024 23:35:13 +0300 Subject: [PATCH 01/17] fix: optimization: PVS-Studio warning V836 Expression's value is copied at variable declaration. The variable is never modified. Consider declaring it as a reference. Changed variables to be a reference to avoid unnecessary copy. Reported by: PVS-Studio Signed-off-by: Vyacheslav Ivanov --- src/content/ContentLoader.cpp | 2 +- src/graphics/ui/gui_xml.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/ContentLoader.cpp b/src/content/ContentLoader.cpp index 448754a2..a156d6ab 100644 --- a/src/content/ContentLoader.cpp +++ b/src/content/ContentLoader.cpp @@ -85,7 +85,7 @@ bool ContentLoader::fixPackIndices( indexed.push_back(name); } } - for (auto name : detected) { + for (const auto &name : detected) { if (!util::contains(indexed, name)) { arr->put(name); modified = true; diff --git a/src/graphics/ui/gui_xml.cpp b/src/graphics/ui/gui_xml.cpp index 297ee4ac..637b2220 100644 --- a/src/graphics/ui/gui_xml.cpp +++ b/src/graphics/ui/gui_xml.cpp @@ -203,7 +203,7 @@ static void _readPanel(UiXmlReader& reader, const xml::xmlelement& element, Pane panel.setMaxLength(element->attr("max-length").asInt()); } if (element->has("orientation")) { - auto oname = element->attr("orientation").getText(); + const auto &oname = element->attr("orientation").getText(); if (oname == "horizontal") { panel.setOrientation(Orientation::horizontal); } From 5dd7a15c098f5d3164bb7574a3c81b6b84c3b205 Mon Sep 17 00:00:00 2001 From: Vyacheslav Ivanov Date: Thu, 1 Aug 2024 23:48:24 +0300 Subject: [PATCH 02/17] fix: optimization: PVS-Studio warning V832 It's better to use '= default;' syntax instead of empty constructor and destructor body. Using '= default;' can help the compiler generate more optimal code. Reported by: PVS-Studio Signed-off-by: Vyacheslav Ivanov --- src/assets/Assets.cpp | 3 +-- src/assets/Assets.hpp | 2 +- src/audio/audio.cpp | 6 +++--- src/coders/xml.hpp | 2 +- src/content/Content.cpp | 3 +-- src/content/ContentBuilder.cpp | 2 +- src/content/ContentPack.cpp | 3 +-- src/content/PacksManager.cpp | 5 ++--- src/data/dynamic.hpp | 4 ++-- src/files/WorldFiles.cpp | 3 +-- src/files/WorldRegions.cpp | 6 ++---- src/frontend/ContentGfxCache.cpp | 3 +-- src/frontend/LevelFrontend.cpp | 3 +-- src/graphics/core/Atlas.cpp | 3 +-- src/graphics/core/Atlas.hpp | 2 +- src/graphics/core/Font.cpp | 3 +-- src/graphics/core/ImageData.cpp | 3 +-- src/graphics/core/PostProcessing.cpp | 3 +-- src/graphics/core/Shader.cpp | 2 +- src/graphics/core/TextureAnimation.hpp | 2 +- src/graphics/render/ModelBatch.cpp | 3 +-- src/graphics/render/Skybox.cpp | 3 +-- src/graphics/render/WorldRenderer.cpp | 3 +-- src/graphics/ui/GUI.cpp | 3 +-- src/items/Inventories.cpp | 3 +-- src/lighting/Lighting.cpp | 3 +-- src/logic/ChunksController.cpp | 3 +-- src/logic/CommandsInterpreter.hpp | 2 +- src/maths/FrustumCulling.hpp | 2 +- src/maths/rays.hpp | 2 +- src/util/ThreadPool.hpp | 4 ++-- src/window/input.hpp | 2 +- 32 files changed, 38 insertions(+), 58 deletions(-) diff --git a/src/assets/Assets.cpp b/src/assets/Assets.cpp index c7ef6946..993e7360 100644 --- a/src/assets/Assets.cpp +++ b/src/assets/Assets.cpp @@ -1,7 +1,6 @@ #include "Assets.hpp" -Assets::~Assets() { -} +Assets::~Assets() = default; const std::vector& Assets::getAnimations() { return animations; diff --git a/src/assets/Assets.hpp b/src/assets/Assets.hpp index 4474301e..d30f8187 100644 --- a/src/assets/Assets.hpp +++ b/src/assets/Assets.hpp @@ -68,7 +68,7 @@ class Assets { std::unordered_map assets; std::vector setupFuncs; public: - Assets() {} + Assets() = default; Assets(const Assets&) = delete; ~Assets(); diff --git a/src/audio/audio.cpp b/src/audio/audio.cpp index b6a36e42..56887994 100644 --- a/src/audio/audio.cpp +++ b/src/audio/audio.cpp @@ -266,7 +266,7 @@ speakerid_t audio::play( } auto speaker = speaker_ptr.get(); speakerid_t id = nextId++; - speakers.emplace(id, std::move(speaker_ptr)); + speakers.try_emplace(id, std::move(speaker_ptr)); speaker->setPosition(position); speaker->setVolume(volume); speaker->setPitch(pitch); @@ -295,8 +295,8 @@ speakerid_t audio::play( } auto speaker = speaker_ptr.get(); speakerid_t id = nextId++; - streams.emplace(id, stream); - speakers.emplace(id, std::move(speaker_ptr)); + streams.try_emplace(id, stream); + speakers.try_emplace(id, std::move(speaker_ptr)); stream->bindSpeaker(id); speaker->setPosition(position); diff --git a/src/coders/xml.hpp b/src/coders/xml.hpp index c70ce9c2..4af2e4b1 100644 --- a/src/coders/xml.hpp +++ b/src/coders/xml.hpp @@ -23,7 +23,7 @@ namespace xml { std::string name; std::string text; public: - Attribute() {}; + Attribute() = default; Attribute(std::string name, std::string text); const std::string& getName() const; diff --git a/src/content/Content.cpp b/src/content/Content.cpp index 11e204d6..2e5612a4 100644 --- a/src/content/Content.cpp +++ b/src/content/Content.cpp @@ -46,8 +46,7 @@ Content::Content( } } -Content::~Content() { -} +Content::~Content() = default; const rigging::SkeletonConfig* Content::getSkeleton(const std::string& id) const { auto found = skeletons.find(id); diff --git a/src/content/ContentBuilder.cpp b/src/content/ContentBuilder.cpp index 6f7b730b..76f3052c 100644 --- a/src/content/ContentBuilder.cpp +++ b/src/content/ContentBuilder.cpp @@ -2,7 +2,7 @@ #include "../objects/rigging.hpp" -ContentBuilder::~ContentBuilder() {} +ContentBuilder::~ContentBuilder() = default; void ContentBuilder::add(std::unique_ptr pack) { packs[pack->getId()] = std::move(pack); diff --git a/src/content/ContentPack.cpp b/src/content/ContentPack.cpp index 8388e30c..0c88c7b0 100644 --- a/src/content/ContentPack.cpp +++ b/src/content/ContentPack.cpp @@ -142,5 +142,4 @@ ContentPackRuntime::ContentPackRuntime( { } -ContentPackRuntime::~ContentPackRuntime() { -} +ContentPackRuntime::~ContentPackRuntime() = default; diff --git a/src/content/PacksManager.cpp b/src/content/PacksManager.cpp index c8bb4e05..675efee9 100644 --- a/src/content/PacksManager.cpp +++ b/src/content/PacksManager.cpp @@ -5,8 +5,7 @@ #include #include -PacksManager::PacksManager() { -} +PacksManager::PacksManager() = default; void PacksManager::setSources(std::vector sources) { this->sources = sources; @@ -19,7 +18,7 @@ void PacksManager::scan() { for (auto& folder : sources) { ContentPack::scanFolder(folder, packsList); for (auto& pack : packsList) { - packs.emplace(pack.id, pack); + packs.try_emplace(pack.id, pack); } } } diff --git a/src/data/dynamic.hpp b/src/data/dynamic.hpp index 90f4fe69..6299a1c7 100644 --- a/src/data/dynamic.hpp +++ b/src/data/dynamic.hpp @@ -41,7 +41,7 @@ namespace dynamic { public: std::vector values; - List() {} + List() = default; List(std::vector values) : values(std::move(values)) {} std::string str(size_t index) const; @@ -79,7 +79,7 @@ namespace dynamic { public: std::unordered_map values; - Map() {} + Map() = default; Map(std::unordered_map values) : values(std::move(values)) {}; diff --git a/src/files/WorldFiles.cpp b/src/files/WorldFiles.cpp index 0d2f96c5..31868e81 100644 --- a/src/files/WorldFiles.cpp +++ b/src/files/WorldFiles.cpp @@ -47,8 +47,7 @@ WorldFiles::WorldFiles(const fs::path& directory, const DebugSettings& settings) regions.doWriteLights = doWriteLights; } -WorldFiles::~WorldFiles() { -} +WorldFiles::~WorldFiles() = default; void WorldFiles::createDirectories() { fs::create_directories(directory / fs::path("data")); diff --git a/src/files/WorldRegions.cpp b/src/files/WorldRegions.cpp index 92feacda..642453f8 100644 --- a/src/files/WorldRegions.cpp +++ b/src/files/WorldRegions.cpp @@ -56,8 +56,7 @@ WorldRegion::WorldRegion() sizes(std::make_unique(REGION_CHUNKS_COUNT)) {} -WorldRegion::~WorldRegion() { -} +WorldRegion::~WorldRegion() = default; void WorldRegion::setUnsaved(bool unsaved) { this->unsaved = unsaved; @@ -98,8 +97,7 @@ WorldRegions::WorldRegions(const fs::path& directory) : directory(directory) { layers[REGION_LAYER_ENTITIES].folder = directory/fs::path("entities"); } -WorldRegions::~WorldRegions() { -} +WorldRegions::~WorldRegions() = default; WorldRegion* WorldRegions::getRegion(int x, int z, int layer) { RegionsLayer& regions = layers[layer]; diff --git a/src/frontend/ContentGfxCache.cpp b/src/frontend/ContentGfxCache.cpp index b18492fd..4de80069 100644 --- a/src/frontend/ContentGfxCache.cpp +++ b/src/frontend/ContentGfxCache.cpp @@ -38,8 +38,7 @@ ContentGfxCache::ContentGfxCache(const Content* content, Assets* assets) : conte } } -ContentGfxCache::~ContentGfxCache() { -} +ContentGfxCache::~ContentGfxCache() = default; const Content* ContentGfxCache::getContent() const { return content; diff --git a/src/frontend/LevelFrontend.cpp b/src/frontend/LevelFrontend.cpp index 067b71a3..e5cadff5 100644 --- a/src/frontend/LevelFrontend.cpp +++ b/src/frontend/LevelFrontend.cpp @@ -81,8 +81,7 @@ LevelFrontend::LevelFrontend( ); } -LevelFrontend::~LevelFrontend() { -} +LevelFrontend::~LevelFrontend() = default; Level* LevelFrontend::getLevel() const { return level; diff --git a/src/graphics/core/Atlas.cpp b/src/graphics/core/Atlas.cpp index 7d8f7a31..6823757d 100644 --- a/src/graphics/core/Atlas.cpp +++ b/src/graphics/core/Atlas.cpp @@ -19,8 +19,7 @@ Atlas::Atlas( } } -Atlas::~Atlas() { -} +Atlas::~Atlas() = default; void Atlas::prepare() { texture = Texture::from(image.get()); diff --git a/src/graphics/core/Atlas.hpp b/src/graphics/core/Atlas.hpp index 8e8a7b33..827f6d0a 100644 --- a/src/graphics/core/Atlas.hpp +++ b/src/graphics/core/Atlas.hpp @@ -47,7 +47,7 @@ class AtlasBuilder { std::vector entries; std::set names; public: - AtlasBuilder() {} + AtlasBuilder() = default; void add(const std::string& name, std::unique_ptr image); bool has(const std::string& name) const; const std::set& getNames() { return names; }; diff --git a/src/graphics/core/Font.cpp b/src/graphics/core/Font.cpp index 14a05296..ca94bd8b 100644 --- a/src/graphics/core/Font.cpp +++ b/src/graphics/core/Font.cpp @@ -12,8 +12,7 @@ Font::Font(std::vector> pages, int lineHeight, int yoff : lineHeight(lineHeight), yoffset(yoffset), pages(std::move(pages)) { } -Font::~Font(){ -} +Font::~Font() = default; int Font::getYOffset() const { return yoffset; diff --git a/src/graphics/core/ImageData.cpp b/src/graphics/core/ImageData.cpp index 6499afb4..ee40bafc 100644 --- a/src/graphics/core/ImageData.cpp +++ b/src/graphics/core/ImageData.cpp @@ -41,8 +41,7 @@ ImageData::ImageData(ImageFormat format, uint width, uint height, const ubyte* d std::memcpy(this->data.get(), data, width * height * pixsize); } -ImageData::~ImageData() { -} +ImageData::~ImageData() = default; void ImageData::flipX() { switch (format) { diff --git a/src/graphics/core/PostProcessing.cpp b/src/graphics/core/PostProcessing.cpp index 0498c5e7..7352c3b5 100644 --- a/src/graphics/core/PostProcessing.cpp +++ b/src/graphics/core/PostProcessing.cpp @@ -18,8 +18,7 @@ PostProcessing::PostProcessing() { quadMesh = std::make_unique(vertices, 6, attrs); } -PostProcessing::~PostProcessing() { -} +PostProcessing::~PostProcessing() = default; void PostProcessing::use(DrawContext& context) { const auto& vp = context.getViewport(); diff --git a/src/graphics/core/Shader.cpp b/src/graphics/core/Shader.cpp index 62d82ee3..7f551fb5 100644 --- a/src/graphics/core/Shader.cpp +++ b/src/graphics/core/Shader.cpp @@ -32,7 +32,7 @@ uint Shader::getUniformLocation(const std::string& name) { auto found = uniformLocations.find(name); if (found == uniformLocations.end()) { uint location = glGetUniformLocation(id, name.c_str()); - uniformLocations.emplace(name, location); + uniformLocations.try_emplace(name, location); return location; } return found->second; diff --git a/src/graphics/core/TextureAnimation.hpp b/src/graphics/core/TextureAnimation.hpp index ac6eb3b7..839566bd 100644 --- a/src/graphics/core/TextureAnimation.hpp +++ b/src/graphics/core/TextureAnimation.hpp @@ -22,7 +22,7 @@ struct Frame { class TextureAnimation { public: TextureAnimation(Texture* srcTex, Texture* dstTex) : srcTexture(srcTex), dstTexture(dstTex) {}; - ~TextureAnimation() {}; + ~TextureAnimation() = default; void addFrame(const Frame& frame) { frames.emplace_back(frame); }; diff --git a/src/graphics/render/ModelBatch.cpp b/src/graphics/render/ModelBatch.cpp index c5130402..468fcbd5 100644 --- a/src/graphics/render/ModelBatch.cpp +++ b/src/graphics/render/ModelBatch.cpp @@ -64,8 +64,7 @@ ModelBatch::ModelBatch(size_t capacity, Assets* assets, Chunks* chunks) blank = Texture::from(&image); } -ModelBatch::~ModelBatch() { -} +ModelBatch::~ModelBatch() = default; void ModelBatch::draw(const model::Mesh& mesh, const glm::mat4& matrix, const glm::mat3& rotation, glm::vec3 tint, diff --git a/src/graphics/render/Skybox.cpp b/src/graphics/render/Skybox.cpp index 49310609..029f0b8b 100644 --- a/src/graphics/render/Skybox.cpp +++ b/src/graphics/render/Skybox.cpp @@ -55,8 +55,7 @@ Skybox::Skybox(uint size, Shader* shader) }); } -Skybox::~Skybox() { -} +Skybox::~Skybox() = default; void Skybox::drawBackground(Camera* camera, Assets* assets, int width, int height) { auto backShader = assets->get("background"); diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index 73a10047..64d392d2 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -75,8 +75,7 @@ WorldRenderer::WorldRenderer(Engine* engine, LevelFrontend* frontend, Player* pl ); } -WorldRenderer::~WorldRenderer() { -} +WorldRenderer::~WorldRenderer() = default; bool WorldRenderer::drawChunk( size_t index, diff --git a/src/graphics/ui/GUI.cpp b/src/graphics/ui/GUI.cpp index 13f32a38..40ae9bf5 100644 --- a/src/graphics/ui/GUI.cpp +++ b/src/graphics/ui/GUI.cpp @@ -44,8 +44,7 @@ GUI::GUI() { container->add(tooltip); } -GUI::~GUI() { -} +GUI::~GUI() = default; std::shared_ptr GUI::getMenu() { return menu; diff --git a/src/items/Inventories.cpp b/src/items/Inventories.cpp index 65e93535..d14dcb0a 100644 --- a/src/items/Inventories.cpp +++ b/src/items/Inventories.cpp @@ -8,8 +8,7 @@ Inventories::Inventories(Level& level) : level(level) { } -Inventories::~Inventories() { -} +Inventories::~Inventories() = default; std::shared_ptr Inventories::create(size_t size) { int64_t id = level.getWorld()->getNextInventoryId(); diff --git a/src/lighting/Lighting.cpp b/src/lighting/Lighting.cpp index 6d2d5cc4..1236d7dd 100644 --- a/src/lighting/Lighting.cpp +++ b/src/lighting/Lighting.cpp @@ -20,8 +20,7 @@ Lighting::Lighting(const Content* content, Chunks* chunks) solverS = std::make_unique(indices, chunks, 3); } -Lighting::~Lighting(){ -} +Lighting::~Lighting() = default; void Lighting::clear(){ for (size_t index = 0; index < chunks->volume; index++){ diff --git a/src/logic/ChunksController.cpp b/src/logic/ChunksController.cpp index f4c9aea7..02041d95 100644 --- a/src/logic/ChunksController.cpp +++ b/src/logic/ChunksController.cpp @@ -30,8 +30,7 @@ ChunksController::ChunksController(Level* level, uint padding) generator(WorldGenerators::createGenerator(level->getWorld()->getGenerator(), level->content)) { } -ChunksController::~ChunksController(){ -} +ChunksController::~ChunksController() = default; void ChunksController::update(int64_t maxDuration) { int64_t mcstotal = 0; diff --git a/src/logic/CommandsInterpreter.hpp b/src/logic/CommandsInterpreter.hpp index 7d7d8508..f9295978 100644 --- a/src/logic/CommandsInterpreter.hpp +++ b/src/logic/CommandsInterpreter.hpp @@ -55,7 +55,7 @@ namespace cmd { std::string description; executor_func executor; public: - Command() {} + Command() = default; Command( std::string name, diff --git a/src/maths/FrustumCulling.hpp b/src/maths/FrustumCulling.hpp index f8372c14..1f3f3e67 100644 --- a/src/maths/FrustumCulling.hpp +++ b/src/maths/FrustumCulling.hpp @@ -5,7 +5,7 @@ class Frustum { public: - Frustum() {}; + Frustum() = default; void update(glm::mat4 projview); bool isBoxVisible(const glm::vec3& minp, const glm::vec3& maxp) const; diff --git a/src/maths/rays.hpp b/src/maths/rays.hpp index d781881e..339c109b 100644 --- a/src/maths/rays.hpp +++ b/src/maths/rays.hpp @@ -21,7 +21,7 @@ class AABBFaces { public: std::array, AABBFACES_COUNT> faces; // every face is min-point and opposite corner point - AABBFaces(){}; + AABBFaces() = default; AABBFaces(const rayvec3& parentBoxPos, const AABB& parentBox); }; diff --git a/src/util/ThreadPool.hpp b/src/util/ThreadPool.hpp index 6b098b09..594885f2 100644 --- a/src/util/ThreadPool.hpp +++ b/src/util/ThreadPool.hpp @@ -28,8 +28,8 @@ struct ThreadPoolResult { template class Worker { public: - Worker() {} - virtual ~Worker() {} + Worker() = default; + virtual ~Worker() = default; virtual R operator()(const std::shared_ptr&) = 0; }; diff --git a/src/window/input.hpp b/src/window/input.hpp index 7c966087..fe991e4b 100644 --- a/src/window/input.hpp +++ b/src/window/input.hpp @@ -142,7 +142,7 @@ struct Binding { bool state = false; bool justChange = false; - Binding(){} + Binding() = default; Binding(inputtype type, int code) : type(type), code(code) {} bool active() const { From 818fd716cc407a882d0b2fd30ea806d9674d646c Mon Sep 17 00:00:00 2001 From: Vyacheslav Ivanov Date: Thu, 1 Aug 2024 23:53:14 +0300 Subject: [PATCH 03/17] fix: optimization: PVS-Studio warning V825 The 'current.reset(lang.release())' expression is equivalent to 'current = std::move(lang)'. Changed 'current.reset(lang.release())' to 'current = std::move(lang)' to improve code clarity and performance. Reported by: PVS-Studio Signed-off-by: Vyacheslav Ivanov --- src/frontend/locale.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/locale.cpp b/src/frontend/locale.cpp index e20b3059..f4f08a26 100644 --- a/src/frontend/locale.cpp +++ b/src/frontend/locale.cpp @@ -146,7 +146,7 @@ void langs::load(const fs::path& resdir, if (locale != fallback) { load(resdir, locale, packs, *lang.get()); } - current.reset(lang.release()); + current = std::move(lang); } void langs::setup(const fs::path& resdir, From 7fbd32b8df58864a0a3063b320ee33bcc374e636 Mon Sep 17 00:00:00 2001 From: Vyacheslav Ivanov Date: Fri, 2 Aug 2024 00:14:36 +0300 Subject: [PATCH 04/17] fix: optimization: PVS-Studio warning V823 Replaced 'push_back' with 'emplace_back' for better performance in containers. Reported by: PVS-Studio Signed-off-by: Vyacheslav Ivanov --- src/content/ContentLoader.cpp | 14 +++++++------- src/files/engine_paths.cpp | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/content/ContentLoader.cpp b/src/content/ContentLoader.cpp index a156d6ab..10c60df8 100644 --- a/src/content/ContentLoader.cpp +++ b/src/content/ContentLoader.cpp @@ -251,11 +251,11 @@ void ContentLoader::loadCustomBlockModel(Block& def, dynamic::Map* primitives) { if (boxarr->size() == 7) for (uint j = 6; j < 12; j++) { - def.modelTextures.push_back(boxarr->str(6)); + def.modelTextures.emplace_back(boxarr->str(6)); } else if (boxarr->size() == 12) for (uint j = 6; j < 12; j++) { - def.modelTextures.push_back(boxarr->str(j)); + def.modelTextures.emplace_back(boxarr->str(j)); } else for (uint j = 6; j < 12; j++) { @@ -276,7 +276,7 @@ void ContentLoader::loadCustomBlockModel(Block& def, dynamic::Map* primitives) { def.modelExtraPoints.push_back(p1+xw+yh); def.modelExtraPoints.push_back(p1+yh); - def.modelTextures.push_back(tgonobj->str(9)); + def.modelTextures.emplace_back(tgonobj->str(9)); } } } @@ -313,7 +313,7 @@ void ContentLoader::loadEntity(EntityDef& def, const std::string& name, const fs auto root = files::read_json(file); if (auto componentsarr = root->list("components")) { for (size_t i = 0; i < componentsarr->size(); i++) { - def.components.push_back(componentsarr->str(i)); + def.components.emplace_back(componentsarr->str(i)); } } if (auto boxarr = root->list("hitbox")) { @@ -324,12 +324,12 @@ void ContentLoader::loadEntity(EntityDef& def, const std::string& name, const fs if (auto sensorarr = sensorsarr->list(i)) { auto sensorType = sensorarr->str(0); if (sensorType == "aabb") { - def.boxSensors.push_back({i, { + def.boxSensors.emplace_back(i, AABB{ {sensorarr->num(1), sensorarr->num(2), sensorarr->num(3)}, {sensorarr->num(4), sensorarr->num(5), sensorarr->num(6)} - }}); + }); } else if (sensorType == "radius") { - def.radialSensors.push_back({i, sensorarr->num(1)}); + def.radialSensors.emplace_back(i, sensorarr->num(1)); } else { logger.error() << name << ": sensor #" << i << " - unknown type " << util::quote(sensorType); diff --git a/src/files/engine_paths.cpp b/src/files/engine_paths.cpp index c08d6bd2..00bc7670 100644 --- a/src/files/engine_paths.cpp +++ b/src/files/engine_paths.cpp @@ -214,7 +214,7 @@ std::vector ResPaths::listdirRaw(const std::string& folderName) con continue; for (const auto& entry : fs::directory_iterator(folder)) { auto name = entry.path().filename().u8string(); - entries.push_back(root.name+":"+folderName+"/"+name); + entries.emplace_back(root.name+":"+folderName+"/"+name); } } { @@ -223,7 +223,7 @@ std::vector ResPaths::listdirRaw(const std::string& folderName) con return entries; for (const auto& entry : fs::directory_iterator(folder)) { auto name = entry.path().filename().u8string(); - entries.push_back("core:"+folderName+"/"+name); + entries.emplace_back("core:"+folderName+"/"+name); } } return entries; From 307ffc3c8f58fce774d998a40654102813cc9392 Mon Sep 17 00:00:00 2001 From: Vyacheslav Ivanov Date: Fri, 2 Aug 2024 01:39:17 +0300 Subject: [PATCH 05/17] fix: optimization: PVS-Studio warning V837 Replaced 'emplace' with 'try_emplace' to avoid unnecessary copies or moves when insertion fails. The 'emplace' function does not guarantee that arguments will not be copied or moved if insertion is not successful. Using 'try_emplace' ensures that arguments are only copied or moved if the insertion actually takes place, thus improving performance. Reported by: PVS-Studio Signed-off-by: Vyacheslav Ivanov --- src/window/Events.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/window/Events.cpp b/src/window/Events.cpp index cd94946c..6c237a28 100644 --- a/src/window/Events.cpp +++ b/src/window/Events.cpp @@ -115,7 +115,7 @@ void Events::bind(const std::string& name, inputtype type, mousecode code) { } void Events::bind(const std::string& name, inputtype type, int code) { - bindings.emplace(name, Binding(type, code)); + bindings.try_emplace(name, Binding(type, code)); } void Events::rebind(const std::string& name, inputtype type, int code) { From 1bdc9cf759f78ef3e20c7d72bcc811d57c7eb75b Mon Sep 17 00:00:00 2001 From: Vyacheslav Ivanov Date: Fri, 2 Aug 2024 02:09:15 +0300 Subject: [PATCH 06/17] fix: optimization: PVS-Studio warning V835 Passing cheap-to-copy arguments by reference can sometimes lead to decreased performance. This change ensures that the argument is passed by value, which is more efficient in cases where the argument is inexpensive to copy. Reported by: PVS-Studio Signed-off-by: Vyacheslav Ivanov --- src/logic/PlayerController.cpp | 4 ++-- src/logic/PlayerController.hpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/logic/PlayerController.cpp b/src/logic/PlayerController.cpp index ba1f1069..5bab584d 100644 --- a/src/logic/PlayerController.cpp +++ b/src/logic/PlayerController.cpp @@ -105,7 +105,7 @@ glm::vec3 CameraControl::updateCameraShaking(const Hitbox& hitbox, float delta) } void CameraControl::updateFovEffects(const Hitbox& hitbox, - const PlayerInput& input, float delta) { + PlayerInput input, float delta) { bool crouch = input.shift && hitbox.grounded && !input.sprint; float dt = fmin(1.0f, delta * ZOOM_SPEED); @@ -146,7 +146,7 @@ void CameraControl::switchCamera() { } } -void CameraControl::update(const PlayerInput& input, float delta, Chunks* chunks) { +void CameraControl::update(PlayerInput input, float delta, Chunks* chunks) { offset = glm::vec3(0.0f, 0.0f, 0.0f); if (auto hitbox = player->getHitbox()) { diff --git a/src/logic/PlayerController.hpp b/src/logic/PlayerController.hpp index 79363f61..c90d1408 100644 --- a/src/logic/PlayerController.hpp +++ b/src/logic/PlayerController.hpp @@ -32,7 +32,7 @@ class CameraControl { /// @brief Update field-of-view effects /// @param input player inputs /// @param delta delta time - void updateFovEffects(const Hitbox& hitbox, const PlayerInput& input, + void updateFovEffects(const Hitbox& hitbox, PlayerInput input, float delta); /// @brief Switch active player camera @@ -41,7 +41,7 @@ public: CameraControl(const std::shared_ptr& player, const CameraSettings& settings); void updateMouse(PlayerInput& input); - void update(const PlayerInput& input, float delta, Chunks* chunks); + void update(PlayerInput input, float delta, Chunks* chunks); void refresh(); }; From f3f872c7a3e751d3d9374366e83719c42486bd83 Mon Sep 17 00:00:00 2001 From: Vyacheslav Ivanov Date: Fri, 2 Aug 2024 02:13:40 +0300 Subject: [PATCH 07/17] fix: optimization: PVS-Studio warning V831 Replaced 'at()' method with 'operator[]' to improve performance. The 'at()' method performs bounds checking, which can introduce overhead. Using 'operator[]' bypasses this check and can improve performance when you are certain that the index is within bounds. Reported by: PVS-Studio Signed-off-by: Vyacheslav Ivanov --- src/audio/audio.cpp | 2 +- src/graphics/ui/elements/Label.cpp | 4 ++-- src/graphics/ui/gui_xml.cpp | 2 +- src/logic/scripting/lua/libconsole.cpp | 2 +- src/logic/scripting/lua/libpack.cpp | 4 ++-- src/util/listutil.cpp | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/audio/audio.cpp b/src/audio/audio.cpp index 56887994..384a54a9 100644 --- a/src/audio/audio.cpp +++ b/src/audio/audio.cpp @@ -253,7 +253,7 @@ speakerid_t audio::play( if (!sound->variants.empty()) { size_t index = rand() % (sound->variants.size() + 1); if (index < sound->variants.size()) { - sound = sound->variants.at(index).get(); + sound = sound->variants[index].get(); } } auto speaker_ptr = sound->newInstance(priority, channel); diff --git a/src/graphics/ui/elements/Label.cpp b/src/graphics/ui/elements/Label.cpp index ac31e2a9..e2fd44db 100644 --- a/src/graphics/ui/elements/Label.cpp +++ b/src/graphics/ui/elements/Label.cpp @@ -145,7 +145,7 @@ uint Label::getLineByYOffset(int offset) const { uint Label::getLineByTextIndex(size_t index) const { for (size_t i = 0; i < cache.lines.size(); i++) { - if (cache.lines.at(i).offset > index) { + if (cache.lines[i].offset > index) { return i-1; } } @@ -195,7 +195,7 @@ void Label::draw(const DrawContext* pctx, Assets* assets) { if (multiline) { for (size_t i = 0; i < cache.lines.size(); i++) { - auto& line = cache.lines.at(i); + auto& line = cache.lines[i]; size_t offset = line.offset; std::wstring_view view(text.c_str()+offset, text.length()-offset); if (i < cache.lines.size()-1) { diff --git a/src/graphics/ui/gui_xml.cpp b/src/graphics/ui/gui_xml.cpp index 637b2220..7b0bd0d5 100644 --- a/src/graphics/ui/gui_xml.cpp +++ b/src/graphics/ui/gui_xml.cpp @@ -286,7 +286,7 @@ static std::shared_ptr readButton(UiXmlReader& reader, const xml::xmlele std::shared_ptr