/** @file RGCObjectVisitor_aux.hpp * * Out-of-line definitions for RCollector template methods * that depend on RGCObject (avoiding #include cycle in RCollector.hpp). * * Included via user_hpp_includes in GCObject.json5. * * @author Roland Conybeare **/ #pragma once #include "gc/RGCObjectVisitor.hpp" #include namespace xo { namespace mm { class ACollector; class AGCObject; /** defined here to avoid #include cycle, since * template obj awkward to make available * in RCollector.hpp **/ template template void RGCObjectVisitor::visit_child(VisitReason reason, xo::facet::obj * p_obj) { this->visit_child(reason, p_obj->iface(), (void **)&(p_obj->data_)); } template template void RGCObjectVisitor::visit_child(VisitReason reason, DRepr ** p_repr) { // fetch static interface for DRepr (strip const: FacetImplementation specializations use non-const DRepr) auto iface = xo::facet::impl_for>(); this->visit_child(reason, &iface, (void **)p_repr); } template template requires (!std::is_same_v) void RGCObjectVisitor::visit_poly_child(VisitReason reason, obj * p_objs) { if (*p_objs) { auto e = xo::facet::FacetRegistry::instance().variant(*p_objs); this->visit_child(reason, e.iface(), (void **)&(p_objs->data_)); } } } /*namespace mm*/ } /*namespace xo*/ /* end RCollector_aux.hpp */