From b3e9448ff4efcc9c6773889cf422f295044bcde0 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 3 Feb 2026 13:07:40 -0500 Subject: [PATCH] Go further in avoiding std::function. --- Analyser/Static/Atari2600/StaticAnalyser.cpp | 2 +- Components/1770/1770.cpp | 4 +++- Components/1770/1770.hpp | 7 ++++++- Machines/Commodore/Vic-20/Vic20.cpp | 5 ++++- OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.mm | 5 ++++- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Analyser/Static/Atari2600/StaticAnalyser.cpp b/Analyser/Static/Atari2600/StaticAnalyser.cpp index 9a1c29632..714310dd9 100644 --- a/Analyser/Static/Atari2600/StaticAnalyser.cpp +++ b/Analyser/Static/Atari2600/StaticAnalyser.cpp @@ -23,7 +23,7 @@ static void DeterminePagingFor2kCartridge(Target &target, const Storage::Cartrid // A CommaVid start address needs to be outside of its RAM. if(entry_address < 0x1800 || break_address < 0x1800) return; - std::function high_location_mapper = [](uint16_t address) { + auto high_location_mapper = [](uint16_t address) { address &= 0x1fff; return size_t(address - 0x1800); }; diff --git a/Components/1770/1770.cpp b/Components/1770/1770.cpp index 6928aa279..7b875552d 100644 --- a/Components/1770/1770.cpp +++ b/Components/1770/1770.cpp @@ -829,7 +829,9 @@ void WD1770::posit_event(const int new_event_type) { END_SECTION() } -void WD1770::update_status(const std::function updater) { +template +requires std::invocable +void WD1770::update_status(FuncT &&updater) { const Status old_status = status_; if(delegate_) { diff --git a/Components/1770/1770.hpp b/Components/1770/1770.hpp index a32888c6b..caad49d6c 100644 --- a/Components/1770/1770.hpp +++ b/Components/1770/1770.hpp @@ -10,6 +10,8 @@ #include "Storage/Disk/Controller/MFMDiskController.hpp" +#include + namespace WD { /*! @@ -112,7 +114,10 @@ private: int distance_into_section_; int step_direction_; - void update_status(std::function updater); + + template + requires std::invocable + void update_status(FuncT &&); // Events enum Event1770: int { diff --git a/Machines/Commodore/Vic-20/Vic20.cpp b/Machines/Commodore/Vic-20/Vic20.cpp index 6620c6e5b..4dfeb9b27 100644 --- a/Machines/Commodore/Vic-20/Vic20.cpp +++ b/Machines/Commodore/Vic-20/Vic20.cpp @@ -35,6 +35,7 @@ #include #include +#include #include #include @@ -740,7 +741,9 @@ private: const uint8_t *processor_read_memory_map_[64]{}; uint8_t *processor_write_memory_map_[64]{}; - void write_to_map(const std::function &store, uint16_t address, size_t length) { + template + requires std::invocable + void write_to_map(FuncT &&store, uint16_t address, size_t length) { address >>= 10; length >>= 10; size_t offset = 0; diff --git a/OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.mm b/OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.mm index 0f92972a6..c60bbdf16 100644 --- a/OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.mm +++ b/OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.mm @@ -13,6 +13,7 @@ #include #include #include +#include #include #include "BufferingScanTarget.hpp" @@ -142,11 +143,13 @@ constexpr MTLResourceOptions SharedResourceOptionsStandard = constexpr MTLResourceOptions SharedResourceOptionsTexture = MTLResourceCPUCacheModeWriteCombined | MTLResourceStorageModeManaged; +template +requires std::invocable void range_perform( const size_t start, const size_t end, const size_t size, - const std::function &func + const FuncT &&func ) { if(start == end) return; if(start < end) {