From 8aa718695c58c455d4309b5767527bb7ba09c02d Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Thu, 26 Mar 2026 11:30:16 -0400 Subject: [PATCH] xo-gc: generation -> Generation + bugfix idle test --- include/xo/alloc2/gc/ACollector.hpp | 8 ++++---- include/xo/alloc2/gc/ICollector_Any.hpp | 8 ++++---- include/xo/alloc2/gc/ICollector_Xfer.hpp | 8 ++++---- include/xo/alloc2/gc/RCollector.hpp | 8 ++++---- include/xo/alloc2/generation.hpp | 20 ++++++++++---------- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/include/xo/alloc2/gc/ACollector.hpp b/include/xo/alloc2/gc/ACollector.hpp index 32ee2b2..63004b7 100644 --- a/include/xo/alloc2/gc/ACollector.hpp +++ b/include/xo/alloc2/gc/ACollector.hpp @@ -38,11 +38,11 @@ namespace xo { virtual typeseq _typeseq() const noexcept = 0; virtual size_type allocated(Copaque d, - generation g, role r) const noexcept = 0; + Generation g, role r) const noexcept = 0; virtual size_type reserved(Copaque d, - generation g, role r) const noexcept = 0; + Generation g, role r) const noexcept = 0; virtual size_type committed(Copaque d, - generation g, role r) const noexcept = 0; + Generation g, role r) const noexcept = 0; virtual bool is_type_installed(Copaque d, typeseq tseq) const noexcept = 0; @@ -74,7 +74,7 @@ namespace xo { * 3. if collection is currently disabled, * collection will trigger the next time gc is enabled. **/ - virtual void request_gc(Opaque d, generation upto) = 0; + virtual void request_gc(Opaque d, Generation upto) = 0; /** Assign pointer @p p_lhs to destination @p rhs, within parent allocation @p parent * diff --git a/include/xo/alloc2/gc/ICollector_Any.hpp b/include/xo/alloc2/gc/ICollector_Any.hpp index dbff110..049978a 100644 --- a/include/xo/alloc2/gc/ICollector_Any.hpp +++ b/include/xo/alloc2/gc/ICollector_Any.hpp @@ -31,16 +31,16 @@ namespace xo { typeseq _typeseq() const noexcept override { return s_typeseq; } // const methods - [[noreturn]] size_type allocated(Copaque, generation, role) const noexcept override { _fatal(); } - [[noreturn]] size_type reserved(Copaque, generation, role) const noexcept override { _fatal(); } - [[noreturn]] size_type committed(Copaque, generation, role) const noexcept override { _fatal(); } + [[noreturn]] size_type allocated(Copaque, Generation, role) const noexcept override { _fatal(); } + [[noreturn]] size_type reserved(Copaque, Generation, role) const noexcept override { _fatal(); } + [[noreturn]] size_type committed(Copaque, Generation, role) const noexcept override { _fatal(); } [[noreturn]] bool is_type_installed(Copaque, typeseq) const noexcept override { _fatal(); } // non-const methods [[noreturn]] bool install_type(Opaque, const AGCObject &) noexcept override { _fatal(); } [[noreturn]] void add_gc_root_poly(Opaque, obj *) override { _fatal(); } [[noreturn]] void remove_gc_root_poly(Opaque, obj *) override { _fatal(); } - [[noreturn]] void request_gc(Opaque, generation) override { _fatal(); } + [[noreturn]] void request_gc(Opaque, Generation) override { _fatal(); } [[noreturn]] void assign_member(Opaque, void *, obj *, obj &) override { _fatal(); } [[noreturn]] void forward_inplace(Opaque, AGCObject *, void **) override { _fatal(); } diff --git a/include/xo/alloc2/gc/ICollector_Xfer.hpp b/include/xo/alloc2/gc/ICollector_Xfer.hpp index dbb6655..6482508 100644 --- a/include/xo/alloc2/gc/ICollector_Xfer.hpp +++ b/include/xo/alloc2/gc/ICollector_Xfer.hpp @@ -32,13 +32,13 @@ namespace xo { // const methods typeseq _typeseq() const noexcept override { return s_typeseq; } - size_type allocated(Copaque d, generation g, role r) const noexcept override { + size_type allocated(Copaque d, Generation g, role r) const noexcept override { return I::allocated(_dcast(d), g, r); } - size_type reserved(Copaque d, generation g, role r) const noexcept override { + size_type reserved(Copaque d, Generation g, role r) const noexcept override { return I::reserved(_dcast(d), g, r); } - size_type committed(Copaque d, generation g, role r) const noexcept override { + size_type committed(Copaque d, Generation g, role r) const noexcept override { return I::committed(_dcast(d), g, r); } bool is_type_installed(Copaque d, typeseq tseq) const noexcept override { @@ -56,7 +56,7 @@ namespace xo { void remove_gc_root_poly(Opaque d, obj * p_root) override { I::remove_gc_root_poly(_dcast(d), p_root); } - void request_gc(Opaque d, generation upto) override { + void request_gc(Opaque d, Generation upto) override { I::request_gc(_dcast(d), upto); } void assign_member(Opaque d, void * parent, diff --git a/include/xo/alloc2/gc/RCollector.hpp b/include/xo/alloc2/gc/RCollector.hpp index f62c02f..9dc313b 100644 --- a/include/xo/alloc2/gc/RCollector.hpp +++ b/include/xo/alloc2/gc/RCollector.hpp @@ -42,15 +42,15 @@ namespace xo { void forward_pivot_inplace(obj * p_obj); int32_t _typeseq() const noexcept { return O::iface()->_typeseq(); } - size_type allocated(generation g, role r) const noexcept { return O::iface()->allocated(O::data(), g, r); } - size_type reserved(generation g, role r) const noexcept { return O::iface()->reserved(O::data(), g, r); } - size_type committed(generation g, role r) const noexcept { return O::iface()->committed(O::data(), g, r); } + size_type allocated(Generation g, role r) const noexcept { return O::iface()->allocated(O::data(), g, r); } + size_type reserved(Generation g, role r) const noexcept { return O::iface()->reserved(O::data(), g, r); } + size_type committed(Generation g, role r) const noexcept { return O::iface()->committed(O::data(), g, r); } bool is_type_installed(typeseq tseq) const noexcept { return O::iface()->is_type_installed(O::data(), tseq); } bool install_type(const AGCObject & iface) { return O::iface()->install_type(O::data(), iface); } void add_gc_root_poly(obj * p_root) { O::iface()->add_gc_root_poly(O::data(), p_root); } void remove_gc_root_poly(obj * p_root) { O::iface()->remove_gc_root_poly(O::data(), p_root); } - void request_gc(generation g) { O::iface()->request_gc(O::data(), g); } + void request_gc(Generation g) { O::iface()->request_gc(O::data(), g); } void assign_member(void * parent, obj * p_lhs, diff --git a/include/xo/alloc2/generation.hpp b/include/xo/alloc2/generation.hpp index 08c8532..76ad1a8 100644 --- a/include/xo/alloc2/generation.hpp +++ b/include/xo/alloc2/generation.hpp @@ -11,38 +11,38 @@ namespace xo { namespace mm { /** hard maximum number of generations **/ - static constexpr uint32_t c_max_generation = 16; + static constexpr uint32_t c_max_generation = 2; /** @class generation * @brief type-safe generation number **/ - struct generation { + struct Generation { using value_type = std::uint32_t; - constexpr generation() = default; - explicit constexpr generation(value_type x) : value_{x} {} + constexpr Generation() = default; + explicit constexpr Generation(value_type x) : value_{x} {} - static generation nursery() { return generation{0}; } - static generation sentinel() { return generation(c_max_generation); } + static Generation nursery() { return Generation{0}; } + static Generation sentinel() { return Generation(c_max_generation); } bool is_sentinel() const noexcept { return value_ == c_max_generation; } constexpr operator value_type() const { return value_; } - generation & operator++() { ++value_; return *this; } + Generation & operator++() { ++value_; return *this; } std::uint32_t value_ = 0; }; - inline bool operator==(generation lhs, generation rhs) { + inline bool operator==(Generation lhs, Generation rhs) { return lhs.value_ == rhs.value_; } - inline bool operator<(generation lhs, generation rhs) { + inline bool operator<(Generation lhs, Generation rhs) { return lhs.value_ < rhs.value_; } - inline bool operator>(generation lhs, generation rhs) { + inline bool operator>(Generation lhs, Generation rhs) { return lhs.value_ > rhs.value_; }