xo-umbrella2/xo-gc/src/gc/DGCObjectStoreVisitor.cpp

56 lines
1.6 KiB
C++

/** @file DGCObjectStoreVisitor.cpp
*
* @author Roland Conybeare, Apr 2026
**/
#include "GCObjectStoreVisitor.hpp"
#include "GCObjectStore.hpp"
namespace xo {
namespace mm {
DGCObjectStoreVisitor::DGCObjectStoreVisitor(GCObjectStore * gcos,
Generation upto)
: p_gco_store_{gcos}, upto_{upto}
{}
Generation
DGCObjectStoreVisitor::generation_of(Role r, const void * addr) const noexcept
{
return p_gco_store_->generation_of(r, addr);
}
AllocInfo
DGCObjectStoreVisitor::alloc_info(void * mem) const noexcept
{
return p_gco_store_->alloc_info((std::byte *)mem);
}
void
DGCObjectStoreVisitor::visit_child(VisitReason reason,
AGCObject * lhs_iface, void ** lhs_data)
{
switch (reason.code()) {
case VisitReason::code::forward:
p_gco_store_->_forward_inplace_aux
(this->ref<AGCObjectVisitor>(), lhs_iface, lhs_data, upto_);
break;
case VisitReason::code::verify:
p_gco_store_->_verify_aux(lhs_iface, *lhs_data);
break;
default:
assert(false);
}
}
std::byte *
DGCObjectStoreVisitor::alloc_copy(void * src) noexcept {
// check whether we're promoting src.
return p_gco_store_->alloc_copy((std::byte *)src);
}
} /*namespace mm*/
} /*namespace xo*/
/* end DGCObjectVisitor.cpp */