From d0e6ab5b4458b0d8ccaff0a0f944470e1d8f3553 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sat, 4 Apr 2026 16:33:35 -0400 Subject: [PATCH] refactor: rename shallow_copy -> shallow_move + streamline Use RCollector.std_copy_for where appropriate --- include/xo/stringtable2/DString.hpp | 2 +- include/xo/stringtable2/DUniqueString.hpp | 2 +- include/xo/stringtable2/string/IGCObject_DString.hpp | 2 +- .../stringtable2/uniquestring/IGCObject_DUniqueString.hpp | 2 +- src/stringtable2/DString.cpp | 7 +++++-- src/stringtable2/DUniqueString.cpp | 8 ++++++-- src/stringtable2/IGCObject_DString.cpp | 4 ++-- src/stringtable2/IGCObject_DUniqueString.cpp | 4 ++-- 8 files changed, 19 insertions(+), 12 deletions(-) diff --git a/include/xo/stringtable2/DString.hpp b/include/xo/stringtable2/DString.hpp index bfcd30f..cdb362d 100644 --- a/include/xo/stringtable2/DString.hpp +++ b/include/xo/stringtable2/DString.hpp @@ -245,7 +245,7 @@ namespace xo { size_type shallow_size() const noexcept; /** clone string, using memory from allocator @p mm **/ - DString * shallow_move(obj mm) const noexcept; + DString * shallow_move(obj gc) noexcept; size_type forward_children(obj gc) noexcept; /** fixup child pointers (trivial for DString, no children) diff --git a/include/xo/stringtable2/DUniqueString.hpp b/include/xo/stringtable2/DUniqueString.hpp index d5b7562..c939f61 100644 --- a/include/xo/stringtable2/DUniqueString.hpp +++ b/include/xo/stringtable2/DUniqueString.hpp @@ -91,7 +91,7 @@ namespace xo { std::size_t shallow_size() const noexcept; /** clone unique string, using memory from allocator @p mm. **/ - DUniqueString * shallow_move(obj mm) const noexcept; + DUniqueString * shallow_move(obj gc) noexcept; /** fixup child pointers (trivial for DUniqueString, no gc-owned children **/ std::size_t forward_children(obj gc) noexcept; diff --git a/include/xo/stringtable2/string/IGCObject_DString.hpp b/include/xo/stringtable2/string/IGCObject_DString.hpp index 6dc2ad1..c4a71a5 100644 --- a/include/xo/stringtable2/string/IGCObject_DString.hpp +++ b/include/xo/stringtable2/string/IGCObject_DString.hpp @@ -55,7 +55,7 @@ namespace xo { // non-const methods /** move instance using allocator **/ - static Opaque shallow_move(DString & self, obj mm) noexcept; + static Opaque shallow_move(DString & self, obj gc) noexcept; /** during GC: forward immdiate children **/ static size_type forward_children(DString & self, obj gc) noexcept; ///@} diff --git a/include/xo/stringtable2/uniquestring/IGCObject_DUniqueString.hpp b/include/xo/stringtable2/uniquestring/IGCObject_DUniqueString.hpp index 1d6b8db..27bc825 100644 --- a/include/xo/stringtable2/uniquestring/IGCObject_DUniqueString.hpp +++ b/include/xo/stringtable2/uniquestring/IGCObject_DUniqueString.hpp @@ -55,7 +55,7 @@ namespace xo { // non-const methods /** move instance using allocator **/ - static Opaque shallow_move(DUniqueString & self, obj mm) noexcept; + static Opaque shallow_move(DUniqueString & self, obj gc) noexcept; /** during GC: forward immdiate children **/ static size_type forward_children(DUniqueString & self, obj gc) noexcept; ///@} diff --git a/src/stringtable2/DString.cpp b/src/stringtable2/DString.cpp index f04db7f..81f7780 100644 --- a/src/stringtable2/DString.cpp +++ b/src/stringtable2/DString.cpp @@ -156,9 +156,12 @@ namespace xo { } DString * - DString::shallow_move(obj mm) const noexcept + DString::shallow_move(obj gc) noexcept { - DString * copy = (DString *)mm.alloc_copy((std::byte *)this); + // note: not using gc.std_copy_for() here + // b/c DString flexible array means not move-constructible + + DString * copy = (DString *)gc.alloc_copy_for(this); if (copy) { copy->capacity_ = capacity_; diff --git a/src/stringtable2/DUniqueString.cpp b/src/stringtable2/DUniqueString.cpp index dcf7cc5..057ee1f 100644 --- a/src/stringtable2/DUniqueString.cpp +++ b/src/stringtable2/DUniqueString.cpp @@ -88,12 +88,16 @@ namespace xo { } DUniqueString * - DUniqueString::shallow_move(obj mm) const noexcept + DUniqueString::shallow_move(obj gc) noexcept { // well-posed, but not expected to be used. + // + // Not using gc.std_copy_for() here because compiler doesn't know + // actual alloc size of a DUniqueString instance + assert(false); - DUniqueString * copy = (DUniqueString *)mm.alloc_copy((std::byte *)this); + DUniqueString * copy = (DUniqueString *)gc.alloc_copy((std::byte *)this); if (copy) { // Copy assignment not implemented in general diff --git a/src/stringtable2/IGCObject_DString.cpp b/src/stringtable2/IGCObject_DString.cpp index c3f6503..01fc837 100644 --- a/src/stringtable2/IGCObject_DString.cpp +++ b/src/stringtable2/IGCObject_DString.cpp @@ -22,9 +22,9 @@ namespace xo { } auto - IGCObject_DString::shallow_move(DString & self, obj mm) noexcept -> Opaque + IGCObject_DString::shallow_move(DString & self, obj gc) noexcept -> Opaque { - return self.shallow_move(mm); + return self.shallow_move(gc); } auto IGCObject_DString::forward_children(DString & self, obj gc) noexcept -> size_type diff --git a/src/stringtable2/IGCObject_DUniqueString.cpp b/src/stringtable2/IGCObject_DUniqueString.cpp index 034b966..82e7c65 100644 --- a/src/stringtable2/IGCObject_DUniqueString.cpp +++ b/src/stringtable2/IGCObject_DUniqueString.cpp @@ -22,9 +22,9 @@ namespace xo { } auto - IGCObject_DUniqueString::shallow_move(DUniqueString & self, obj mm) noexcept -> Opaque + IGCObject_DUniqueString::shallow_move(DUniqueString & self, obj gc) noexcept -> Opaque { - return self.shallow_move(mm); + return self.shallow_move(gc); } auto IGCObject_DUniqueString::forward_children(DUniqueString & self, obj gc) noexcept -> size_type