From 25a85b71d3d3d171eee1c6400e5bad242578458c Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Fri, 2 Jan 2026 18:55:53 -0500 Subject: [PATCH] xo-object2: utest: ++ allocation in collector utest --- include/xo/gc/DX1Collector.hpp | 5 +++++ include/xo/gc/detail/IAllocator_DX1Collector.hpp | 1 + src/gc/DX1Collector.cpp | 5 +++++ src/gc/IAllocator_DX1Collector.cpp | 6 ++++++ 4 files changed, 17 insertions(+) diff --git a/include/xo/gc/DX1Collector.hpp b/include/xo/gc/DX1Collector.hpp index bd9d5a6..429d220 100644 --- a/include/xo/gc/DX1Collector.hpp +++ b/include/xo/gc/DX1Collector.hpp @@ -237,6 +237,11 @@ namespace xo { * New allocs always in gen0 to-space **/ value_type sub_alloc(size_type z, bool complete) noexcept; + /** Allocate copy of source object at @p src. + * Source must be owned by this collector instance. + * Copy will have incremented age. + **/ + value_type alloc_copy(value_type src) noexcept; /** expand gen0 committed size to at least @p z. **/ bool expand(size_type z) noexcept; diff --git a/include/xo/gc/detail/IAllocator_DX1Collector.hpp b/include/xo/gc/detail/IAllocator_DX1Collector.hpp index 6ba79b5..0ed1ab1 100644 --- a/include/xo/gc/detail/IAllocator_DX1Collector.hpp +++ b/include/xo/gc/detail/IAllocator_DX1Collector.hpp @@ -62,6 +62,7 @@ namespace xo { static value_type alloc(DX1Collector & d, typeseq t, size_type z) noexcept; static value_type super_alloc(DX1Collector & d, typeseq t, size_type z) noexcept; static value_type sub_alloc(DX1Collector & d, size_type z, bool complete) noexcept; + static value_type alloc_copy(DX1Collector & d, value_type src) noexcept; /** expand gen0 spaces (both from-space and to-space) **/ static bool expand(DX1Collector & d, size_type z) noexcept; diff --git a/src/gc/DX1Collector.cpp b/src/gc/DX1Collector.cpp index 26223b9..edfd842 100644 --- a/src/gc/DX1Collector.cpp +++ b/src/gc/DX1Collector.cpp @@ -231,6 +231,11 @@ namespace xo { return with_facet::mkobj(new_space()).sub_alloc(z, complete); } + auto + DX1Collector::alloc_copy(value_type src) noexcept -> value_type { + return with_facet::mkobj(new_space()).alloc_copy(src); + } + bool DX1Collector::expand(size_type z) noexcept { diff --git a/src/gc/IAllocator_DX1Collector.cpp b/src/gc/IAllocator_DX1Collector.cpp index b5b26b5..6c4dc5b 100644 --- a/src/gc/IAllocator_DX1Collector.cpp +++ b/src/gc/IAllocator_DX1Collector.cpp @@ -102,6 +102,12 @@ namespace xo { return d.sub_alloc(z, complete); } + auto + IAllocator_DX1Collector::alloc_copy(DX1Collector & d, value_type src) noexcept -> value_type + { + return d.alloc_copy(src); + } + bool IAllocator_DX1Collector::expand(DX1Collector & d, size_type z) noexcept {