refactor: use GCObjectVisitor api w/ gco_shallow_move
This commit is contained in:
parent
576fddaf7e
commit
7d3d2d7070
8 changed files with 16 additions and 22 deletions
|
|
@ -6,7 +6,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <xo/alloc2/Allocator.hpp>
|
#include <xo/alloc2/Allocator.hpp>
|
||||||
#include <xo/alloc2/Collector.hpp>
|
//#include <xo/alloc2/Collector.hpp>
|
||||||
#include <xo/alloc2/GCObjectVisitor.hpp>
|
#include <xo/alloc2/GCObjectVisitor.hpp>
|
||||||
#include <xo/facet/obj.hpp>
|
#include <xo/facet/obj.hpp>
|
||||||
#include <xo/indentlog/print/ppindentinfo.hpp>
|
#include <xo/indentlog/print/ppindentinfo.hpp>
|
||||||
|
|
@ -47,7 +47,7 @@ namespace xo {
|
||||||
/** xo allocator **/
|
/** xo allocator **/
|
||||||
using AAllocator = xo::mm::AAllocator;
|
using AAllocator = xo::mm::AAllocator;
|
||||||
/** garbage collector **/
|
/** garbage collector **/
|
||||||
using ACollector = xo::mm::ACollector;
|
//using ACollector = xo::mm::ACollector;
|
||||||
/** object visitor (garbage collector proxy) **/
|
/** object visitor (garbage collector proxy) **/
|
||||||
using AGCObjectVisitor = xo::mm::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObjectVisitor;
|
||||||
/** ppindentinfo for APrintable **/
|
/** ppindentinfo for APrintable **/
|
||||||
|
|
@ -245,10 +245,8 @@ namespace xo {
|
||||||
/** @defgroup dstring-gcobject-methods gcobject facet methods **/
|
/** @defgroup dstring-gcobject-methods gcobject facet methods **/
|
||||||
///@{
|
///@{
|
||||||
|
|
||||||
size_type shallow_size() const noexcept;
|
|
||||||
|
|
||||||
/** clone string, using memory from allocator @p mm **/
|
/** clone string, using memory from allocator @p mm **/
|
||||||
DString * shallow_move(obj<ACollector> gc) noexcept;
|
DString * gco_shallow_move(obj<AGCObjectVisitor> gc) noexcept;
|
||||||
|
|
||||||
/** fixup child pointers (trivial for DString, no children)
|
/** fixup child pointers (trivial for DString, no children)
|
||||||
* note: cref so we can use forward decl
|
* note: cref so we can use forward decl
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
|
|
||||||
/** clone unique string, using memory from allocator @p mm. **/
|
/** clone unique string, using memory from allocator @p mm. **/
|
||||||
DUniqueString * shallow_move(obj<ACollector> gc) noexcept;
|
DUniqueString * gco_shallow_move(obj<AGCObjectVisitor> gc) noexcept;
|
||||||
|
|
||||||
/** fixup child pointers (trivial for DUniqueString, no gc-owned children **/
|
/** fixup child pointers (trivial for DUniqueString, no gc-owned children **/
|
||||||
void visit_gco_children(obj<AGCObjectVisitor> gc) noexcept;
|
void visit_gco_children(obj<AGCObjectVisitor> gc) noexcept;
|
||||||
|
|
|
||||||
|
|
@ -53,8 +53,9 @@ namespace xo {
|
||||||
// const methods
|
// const methods
|
||||||
|
|
||||||
// non-const methods
|
// non-const methods
|
||||||
/** move instance using collector **/
|
/** move instance using object visitor.
|
||||||
static Opaque shallow_move(DString & self, obj<ACollector> gc) noexcept;
|
Arguably abusing the word 'visitor' here **/
|
||||||
|
static Opaque gco_shallow_move(DString & self, obj<AGCObjectVisitor> gc) noexcept;
|
||||||
/** Invoke fn.visit_child(iface,data) for each child GCObject pointer.
|
/** Invoke fn.visit_child(iface,data) for each child GCObject pointer.
|
||||||
Context: provides address of data pointer so it can be updated in place
|
Context: provides address of data pointer so it can be updated in place
|
||||||
when @p fn invokes garbage collector reentry point **/
|
when @p fn invokes garbage collector reentry point **/
|
||||||
|
|
|
||||||
|
|
@ -53,8 +53,9 @@ namespace xo {
|
||||||
// const methods
|
// const methods
|
||||||
|
|
||||||
// non-const methods
|
// non-const methods
|
||||||
/** move instance using collector **/
|
/** move instance using object visitor.
|
||||||
static Opaque shallow_move(DUniqueString & self, obj<ACollector> gc) noexcept;
|
Arguably abusing the word 'visitor' here **/
|
||||||
|
static Opaque gco_shallow_move(DUniqueString & self, obj<AGCObjectVisitor> gc) noexcept;
|
||||||
/** Invoke fn.visit_child(iface,data) for each child GCObject pointer.
|
/** Invoke fn.visit_child(iface,data) for each child GCObject pointer.
|
||||||
Context: provides address of data pointer so it can be updated in place
|
Context: provides address of data pointer so it can be updated in place
|
||||||
when @p fn invokes garbage collector reentry point **/
|
when @p fn invokes garbage collector reentry point **/
|
||||||
|
|
|
||||||
|
|
@ -149,14 +149,8 @@ namespace xo {
|
||||||
return this->size_;
|
return this->size_;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto
|
|
||||||
DString::shallow_size() const noexcept -> size_type
|
|
||||||
{
|
|
||||||
return sizeof(DString) + capacity_;
|
|
||||||
}
|
|
||||||
|
|
||||||
DString *
|
DString *
|
||||||
DString::shallow_move(obj<ACollector> gc) noexcept
|
DString::gco_shallow_move(obj<AGCObjectVisitor> gc) noexcept
|
||||||
{
|
{
|
||||||
// note: not using gc.std_move_for() here
|
// note: not using gc.std_move_for() here
|
||||||
// b/c DString flexible array means not move-constructible
|
// b/c DString flexible array means not move-constructible
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ namespace xo {
|
||||||
}
|
}
|
||||||
|
|
||||||
DUniqueString *
|
DUniqueString *
|
||||||
DUniqueString::shallow_move(obj<ACollector> gc) noexcept
|
DUniqueString::gco_shallow_move(obj<AGCObjectVisitor> gc) noexcept
|
||||||
{
|
{
|
||||||
// well-posed, but not expected to be used.
|
// well-posed, but not expected to be used.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,9 @@
|
||||||
namespace xo {
|
namespace xo {
|
||||||
namespace scm {
|
namespace scm {
|
||||||
auto
|
auto
|
||||||
IGCObject_DString::shallow_move(DString & self, obj<ACollector> gc) noexcept -> Opaque
|
IGCObject_DString::gco_shallow_move(DString & self, obj<AGCObjectVisitor> gc) noexcept -> Opaque
|
||||||
{
|
{
|
||||||
return self.shallow_move(gc);
|
return self.gco_shallow_move(gc);
|
||||||
}
|
}
|
||||||
auto
|
auto
|
||||||
IGCObject_DString::visit_gco_children(DString & self, obj<AGCObjectVisitor> fn) noexcept -> void
|
IGCObject_DString::visit_gco_children(DString & self, obj<AGCObjectVisitor> fn) noexcept -> void
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,9 @@
|
||||||
namespace xo {
|
namespace xo {
|
||||||
namespace scm {
|
namespace scm {
|
||||||
auto
|
auto
|
||||||
IGCObject_DUniqueString::shallow_move(DUniqueString & self, obj<ACollector> gc) noexcept -> Opaque
|
IGCObject_DUniqueString::gco_shallow_move(DUniqueString & self, obj<AGCObjectVisitor> gc) noexcept -> Opaque
|
||||||
{
|
{
|
||||||
return self.shallow_move(gc);
|
return self.gco_shallow_move(gc);
|
||||||
}
|
}
|
||||||
auto
|
auto
|
||||||
IGCObject_DUniqueString::visit_gco_children(DUniqueString & self, obj<AGCObjectVisitor> fn) noexcept -> void
|
IGCObject_DUniqueString::visit_gco_children(DUniqueString & self, obj<AGCObjectVisitor> fn) noexcept -> void
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue