From 77f84cabbbc94cb362c68e65f22446bec8792148 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Tue, 2 Dec 2025 10:37:07 -0500 Subject: [PATCH] xo-alloc / xo-ordinaltree: work on dual-alloc-policy trees --- include/xo/alloc/GC.hpp | 3 ++- src/alloc/GC.cpp | 6 ++++++ src/alloc/Object.cpp | 3 ++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/include/xo/alloc/GC.hpp b/include/xo/alloc/GC.hpp index 092f2f36..be2ff071 100644 --- a/include/xo/alloc/GC.hpp +++ b/include/xo/alloc/GC.hpp @@ -318,7 +318,8 @@ namespace xo { * @param rhs. new target for @p *lhs **/ virtual void assign_member(IObject * parent, IObject ** lhs, IObject* rhs) final override; - + /** evacuate @p *lhs and replace with forwarding pointer **/ + virtual void forward_inplace(IObject ** lhs) final override; /** during GC check for source objects owned by GC. * See Object::_shallow_move. **/ diff --git a/src/alloc/GC.cpp b/src/alloc/GC.cpp index ca2506d9..40234bf3 100644 --- a/src/alloc/GC.cpp +++ b/src/alloc/GC.cpp @@ -568,6 +568,12 @@ namespace xo { } } + void + GC::forward_inplace(IObject ** lhs) + { + Object::_forward_inplace(lhs, this); + } + bool GC::check_owned(IObject * src) const { diff --git a/src/alloc/Object.cpp b/src/alloc/Object.cpp index 82583a0a..75abec14 100644 --- a/src/alloc/Object.cpp +++ b/src/alloc/Object.cpp @@ -24,7 +24,8 @@ namespace xo { Object::mm = nullptr; IObject * - Object::_forward(IObject * src, gc::IAlloc * gc) + Object::_forward(IObject * src, + gc::IAlloc * gc) { if (!src) return src;