From 03e0b8b0739ba9b53616968f54601ab783e4cba2 Mon Sep 17 00:00:00 2001 From: yamacir-kit Date: Fri, 22 Mar 2024 23:58:54 +0900 Subject: [PATCH] Remove static member function `mutator::locate` Signed-off-by: yamacir-kit --- README.md | 6 ++--- VERSION | 2 +- include/meevax/memory/collector.hpp | 37 +++++---------------------- include/meevax/memory/gc_pointer.hpp | 8 +++--- include/meevax/memory/integer_set.hpp | 6 +++-- 5 files changed, 18 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index e8f194644..cbfe39463 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ Procedures for each standard are provided by the following R7RS-style libraries: cmake -B build -DCMAKE_BUILD_TYPE=Release cd build make package -sudo apt install build/meevax_0.5.150_amd64.deb +sudo apt install build/meevax_0.5.151_amd64.deb ``` or @@ -123,9 +123,9 @@ sudo rm -rf /usr/local/share/meevax | Target Name | Description |-------------|------------- -| `all` | Build shared-library `libmeevax.0.5.150.so` and executable `meevax` +| `all` | Build shared-library `libmeevax.0.5.151.so` and executable `meevax` | `test` | Test executable `meevax` -| `package` | Generate debian package `meevax_0.5.150_amd64.deb` +| `package` | Generate debian package `meevax_0.5.151_amd64.deb` | `install` | Copy files into `/usr/local` directly ## Usage diff --git a/VERSION b/VERSION index 5a23fcf60..ad41454f0 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.5.150 +0.5.151 diff --git a/include/meevax/memory/collector.hpp b/include/meevax/memory/collector.hpp index 7302b9197..8fb8b9791 100644 --- a/include/meevax/memory/collector.hpp +++ b/include/meevax/memory/collector.hpp @@ -160,7 +160,7 @@ inline namespace memory protected: top const* object = nullptr; - constexpr mutator() = default; + mutator() = default; explicit mutator(top const* object) noexcept : object { object } @@ -173,41 +173,18 @@ inline namespace memory ~mutator() noexcept { - if (object) - { - mutators.erase(this); - } + mutators.erase(this); } auto reset(top const* after = nullptr) noexcept -> void { - if (auto before = std::exchange(object, after); not before and after) + if (object = after; after) { mutators.insert(this); } - else if (before and not after) - { - mutators.erase(this); - } - } - - static auto locate(void const* const data) noexcept -> top const* - { - if (not data) - { - return nullptr; - } - else if (cache->contains(data)) - { - return cache; - } - else if (auto iter = objects.lower_bound(reinterpret_cast(data)); iter != objects.begin() and (*--iter)->contains(data)) - { - return *iter; - } else { - return nullptr; + mutators.erase(this); } } }; @@ -222,8 +199,6 @@ inline namespace memory using pointer_set = integer_set; private: - static inline top * cache = nullptr; - static inline pointer_set objects {}; static inline pointer_set mutators {}; @@ -247,7 +222,7 @@ inline namespace memory auto operator =(collector const&) -> collector & = delete; - template , typename... Ts> + template static auto make(Ts&&... xs) { static_assert(std::is_base_of_v); @@ -259,7 +234,7 @@ inline namespace memory if (auto data = new T(std::forward(xs)...); data) { - objects.insert(cache = data); + objects.insert(data); return data; } diff --git a/include/meevax/memory/gc_pointer.hpp b/include/meevax/memory/gc_pointer.hpp index 4fe1c7993..259a63ad2 100644 --- a/include/meevax/memory/gc_pointer.hpp +++ b/include/meevax/memory/gc_pointer.hpp @@ -40,7 +40,7 @@ inline namespace memory gc_pointer(base_pointer const& p) : base_pointer { p } - , collector::mutator { locate(base_pointer::get()) } + , collector::mutator { base_pointer::get() } {} gc_pointer(std::nullptr_t = nullptr) @@ -48,7 +48,7 @@ inline namespace memory gc_pointer(Top * top) // TODO Top const* : base_pointer { top } - , collector::mutator { locate(base_pointer::get()) } + , collector::mutator { base_pointer::get() } {} template or ... or std::is_same_v)>> @@ -85,7 +85,7 @@ inline namespace memory auto reset(base_pointer const& p) -> void { base_pointer::reset(p); - collector::mutator::reset(locate(base_pointer::get())); + collector::mutator::reset(base_pointer::get()); } auto reset(std::nullptr_t = nullptr) -> void @@ -99,7 +99,7 @@ inline namespace memory { if constexpr (std::is_class_v) { - return collector::make>, Allocator>(std::forward(xs)...); + return collector::make>>(std::forward(xs)...); } else { diff --git a/include/meevax/memory/integer_set.hpp b/include/meevax/memory/integer_set.hpp index fa8c8b52e..b26f2f816 100644 --- a/include/meevax/memory/integer_set.hpp +++ b/include/meevax/memory/integer_set.hpp @@ -216,8 +216,10 @@ inline namespace memory auto erase(T value) noexcept { - auto [i, j] = split(value); - data[i]->erase(j); + if (auto [i, j] = split(value); data[i]) + { + data[i]->erase(j); + } } auto contains(T value) noexcept -> bool