From 0b3619ea357ead73ad911ee19c33780b7ae438f6 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 27 Mar 2025 08:38:58 +0000 Subject: [PATCH] Codechange: Use unique_ptr to manage blitters. (#13904) --- src/blitter/32bpp_anim.hpp | 2 +- src/blitter/32bpp_anim_sse2.hpp | 2 +- src/blitter/32bpp_anim_sse4.hpp | 2 +- src/blitter/32bpp_optimized.hpp | 2 +- src/blitter/32bpp_simple.hpp | 2 +- src/blitter/32bpp_sse2.hpp | 2 +- src/blitter/32bpp_sse4.hpp | 2 +- src/blitter/32bpp_ssse3.hpp | 2 +- src/blitter/40bpp_anim.hpp | 2 +- src/blitter/8bpp_optimized.hpp | 2 +- src/blitter/8bpp_simple.hpp | 2 +- src/blitter/factory.hpp | 18 ++++++++---------- src/blitter/null.hpp | 2 +- 13 files changed, 20 insertions(+), 22 deletions(-) diff --git a/src/blitter/32bpp_anim.hpp b/src/blitter/32bpp_anim.hpp index 3e4a63685f..acc911ffe0 100644 --- a/src/blitter/32bpp_anim.hpp +++ b/src/blitter/32bpp_anim.hpp @@ -71,7 +71,7 @@ public: class FBlitter_32bppAnim : public BlitterFactory { public: FBlitter_32bppAnim() : BlitterFactory("32bpp-anim", "32bpp Animation Blitter (palette animation)") {} - Blitter *CreateInstance() override { return new Blitter_32bppAnim(); } + std::unique_ptr CreateInstance() override { return std::make_unique(); } }; #endif /* BLITTER_32BPP_ANIM_HPP */ diff --git a/src/blitter/32bpp_anim_sse2.hpp b/src/blitter/32bpp_anim_sse2.hpp index 56262e387f..623bf2bd5d 100644 --- a/src/blitter/32bpp_anim_sse2.hpp +++ b/src/blitter/32bpp_anim_sse2.hpp @@ -38,7 +38,7 @@ public: class FBlitter_32bppSSE2_Anim : public BlitterFactory { public: FBlitter_32bppSSE2_Anim() : BlitterFactory("32bpp-sse2-anim", "32bpp partially SSE2 Animation Blitter (palette animation)", HasCPUIDFlag(1, 3, 26)) {} - Blitter *CreateInstance() override { return new Blitter_32bppSSE2_Anim(); } + std::unique_ptr CreateInstance() override { return std::make_unique(); } }; #endif /* WITH_SSE */ diff --git a/src/blitter/32bpp_anim_sse4.hpp b/src/blitter/32bpp_anim_sse4.hpp index 8217e7d805..cad4295a9b 100644 --- a/src/blitter/32bpp_anim_sse4.hpp +++ b/src/blitter/32bpp_anim_sse4.hpp @@ -50,7 +50,7 @@ public: class FBlitter_32bppSSE4_Anim: public BlitterFactory { public: FBlitter_32bppSSE4_Anim() : BlitterFactory("32bpp-sse4-anim", "32bpp SSE4 Blitter (palette animation)", HasCPUIDFlag(1, 2, 19)) {} - Blitter *CreateInstance() override { return static_cast(new Blitter_32bppSSE4_Anim()); } + std::unique_ptr CreateInstance() override { return std::unique_ptr(static_cast(new Blitter_32bppSSE4_Anim())); } }; #endif /* WITH_SSE */ diff --git a/src/blitter/32bpp_optimized.hpp b/src/blitter/32bpp_optimized.hpp index 862c1d9e7e..ccd7d9ac2e 100644 --- a/src/blitter/32bpp_optimized.hpp +++ b/src/blitter/32bpp_optimized.hpp @@ -37,7 +37,7 @@ protected: class FBlitter_32bppOptimized : public BlitterFactory { public: FBlitter_32bppOptimized() : BlitterFactory("32bpp-optimized", "32bpp Optimized Blitter (no palette animation)") {} - Blitter *CreateInstance() override { return new Blitter_32bppOptimized(); } + std::unique_ptr CreateInstance() override { return std::make_unique(); } }; #endif /* BLITTER_32BPP_OPTIMIZED_HPP */ diff --git a/src/blitter/32bpp_simple.hpp b/src/blitter/32bpp_simple.hpp index 902af2905a..cbecf3c44b 100644 --- a/src/blitter/32bpp_simple.hpp +++ b/src/blitter/32bpp_simple.hpp @@ -35,7 +35,7 @@ public: class FBlitter_32bppSimple : public BlitterFactory { public: FBlitter_32bppSimple() : BlitterFactory("32bpp-simple", "32bpp Simple Blitter (no palette animation)") {} - Blitter *CreateInstance() override { return new Blitter_32bppSimple(); } + std::unique_ptr CreateInstance() override { return std::make_unique(); } }; #endif /* BLITTER_32BPP_SIMPLE_HPP */ diff --git a/src/blitter/32bpp_sse2.hpp b/src/blitter/32bpp_sse2.hpp index df42d7dd38..4d2c1f10bc 100644 --- a/src/blitter/32bpp_sse2.hpp +++ b/src/blitter/32bpp_sse2.hpp @@ -98,7 +98,7 @@ public: class FBlitter_32bppSSE2 : public BlitterFactory { public: FBlitter_32bppSSE2() : BlitterFactory("32bpp-sse2", "32bpp SSE2 Blitter (no palette animation)", HasCPUIDFlag(1, 3, 26)) {} - Blitter *CreateInstance() override { return new Blitter_32bppSSE2(); } + std::unique_ptr CreateInstance() override { return std::make_unique(); } }; #endif /* WITH_SSE */ diff --git a/src/blitter/32bpp_sse4.hpp b/src/blitter/32bpp_sse4.hpp index 7d8798c697..a46e624b02 100644 --- a/src/blitter/32bpp_sse4.hpp +++ b/src/blitter/32bpp_sse4.hpp @@ -39,7 +39,7 @@ public: class FBlitter_32bppSSE4: public BlitterFactory { public: FBlitter_32bppSSE4() : BlitterFactory("32bpp-sse4", "32bpp SSE4 Blitter (no palette animation)", HasCPUIDFlag(1, 2, 19)) {} - Blitter *CreateInstance() override { return new Blitter_32bppSSE4(); } + std::unique_ptr CreateInstance() override { return std::make_unique(); } }; #endif /* WITH_SSE */ diff --git a/src/blitter/32bpp_ssse3.hpp b/src/blitter/32bpp_ssse3.hpp index 4ee475d45f..323b77d825 100644 --- a/src/blitter/32bpp_ssse3.hpp +++ b/src/blitter/32bpp_ssse3.hpp @@ -39,7 +39,7 @@ public: class FBlitter_32bppSSSE3: public BlitterFactory { public: FBlitter_32bppSSSE3() : BlitterFactory("32bpp-ssse3", "32bpp SSSE3 Blitter (no palette animation)", HasCPUIDFlag(1, 2, 9)) {} - Blitter *CreateInstance() override { return new Blitter_32bppSSSE3(); } + std::unique_ptr CreateInstance() override { return std::make_unique(); } }; #endif /* WITH_SSE */ diff --git a/src/blitter/40bpp_anim.hpp b/src/blitter/40bpp_anim.hpp index 0174735c3a..385a4fe555 100644 --- a/src/blitter/40bpp_anim.hpp +++ b/src/blitter/40bpp_anim.hpp @@ -54,7 +54,7 @@ protected: public: FBlitter_40bppAnim() : BlitterFactory("40bpp-anim", "40bpp Animation Blitter (OpenGL)") {} - Blitter *CreateInstance() override { return new Blitter_40bppAnim(); } + std::unique_ptr CreateInstance() override { return std::make_unique(); } }; #endif /* BLITTER_40BPP_OPTIMIZED_HPP */ diff --git a/src/blitter/8bpp_optimized.hpp b/src/blitter/8bpp_optimized.hpp index c3c8e381d0..8452111d73 100644 --- a/src/blitter/8bpp_optimized.hpp +++ b/src/blitter/8bpp_optimized.hpp @@ -32,7 +32,7 @@ public: class FBlitter_8bppOptimized : public BlitterFactory { public: FBlitter_8bppOptimized() : BlitterFactory("8bpp-optimized", "8bpp Optimized Blitter (compression + all-ZoomLevel cache)") {} - Blitter *CreateInstance() override { return new Blitter_8bppOptimized(); } + std::unique_ptr CreateInstance() override { return std::make_unique(); } }; #endif /* BLITTER_8BPP_OPTIMIZED_HPP */ diff --git a/src/blitter/8bpp_simple.hpp b/src/blitter/8bpp_simple.hpp index 12e7f0fd8e..77dcf16a84 100644 --- a/src/blitter/8bpp_simple.hpp +++ b/src/blitter/8bpp_simple.hpp @@ -26,7 +26,7 @@ public: class FBlitter_8bppSimple : public BlitterFactory { public: FBlitter_8bppSimple() : BlitterFactory("8bpp-simple", "8bpp Simple Blitter (relative slow, but never wrong)") {} - Blitter *CreateInstance() override { return new Blitter_8bppSimple(); } + std::unique_ptr CreateInstance() override { return std::make_unique(); } }; #endif /* BLITTER_8BPP_SIMPLE_HPP */ diff --git a/src/blitter/factory.hpp b/src/blitter/factory.hpp index 5071a168ae..0dceea90f2 100644 --- a/src/blitter/factory.hpp +++ b/src/blitter/factory.hpp @@ -39,10 +39,10 @@ private: * Get the currently active blitter. * @return The currently active blitter. */ - static Blitter **GetActiveBlitter() + static std::unique_ptr &GetActiveBlitter() { - static Blitter *s_blitter = nullptr; - return &s_blitter; + static std::unique_ptr s_blitter = nullptr; + return s_blitter; } protected: @@ -98,12 +98,10 @@ public: BlitterFactory *b = GetBlitterFactory(name); if (b == nullptr) return nullptr; - Blitter *newb = b->CreateInstance(); - delete *GetActiveBlitter(); - *GetActiveBlitter() = newb; + GetActiveBlitter() = b->CreateInstance(); - Debug(driver, 1, "Successfully {} blitter '{}'", name.empty() ? "probed" : "loaded", newb->GetName()); - return newb; + Debug(driver, 1, "Successfully {} blitter '{}'", name.empty() ? "probed" : "loaded", GetCurrentBlitter()->GetName()); + return GetCurrentBlitter(); } /** @@ -137,7 +135,7 @@ public: */ static Blitter *GetCurrentBlitter() { - return *GetActiveBlitter(); + return GetActiveBlitter().get(); } /** @@ -175,7 +173,7 @@ public: /** * Create an instance of this Blitter-class. */ - virtual Blitter *CreateInstance() = 0; + virtual std::unique_ptr CreateInstance() = 0; }; extern std::string _ini_blitter; diff --git a/src/blitter/null.hpp b/src/blitter/null.hpp index a9d59668d7..15dc722929 100644 --- a/src/blitter/null.hpp +++ b/src/blitter/null.hpp @@ -38,7 +38,7 @@ public: class FBlitter_Null : public BlitterFactory { public: FBlitter_Null() : BlitterFactory("null", "Null Blitter (does nothing)") {} - Blitter *CreateInstance() override { return new Blitter_Null(); } + std::unique_ptr CreateInstance() override { return std::make_unique(); } }; #endif /* BLITTER_NULL_HPP */