xo-gc stack: refactor + streamline.
Retiring unused Collector typealiases. Fix #include topology. Fix/improve write barrier setup.
This commit is contained in:
parent
4ab49af785
commit
3625758272
76 changed files with 279 additions and 182 deletions
|
|
@ -4,7 +4,7 @@
|
||||||
output_hpp_dir: "include/xo/alloc2",
|
output_hpp_dir: "include/xo/alloc2",
|
||||||
output_impl_subdir: "gc",
|
output_impl_subdir: "gc",
|
||||||
includes: [
|
includes: [
|
||||||
"<xo/alloc2/Allocator.hpp>",
|
"<xo/alloc2/Allocator_basic.hpp>",
|
||||||
"<xo/alloc2/Generation.hpp>",
|
"<xo/alloc2/Generation.hpp>",
|
||||||
"<xo/alloc2/role.hpp>",
|
"<xo/alloc2/role.hpp>",
|
||||||
// "<cstdint>",
|
// "<cstdint>",
|
||||||
|
|
@ -254,6 +254,7 @@
|
||||||
name: "assign_member",
|
name: "assign_member",
|
||||||
doc: [
|
doc: [
|
||||||
"Assign pointer @p p_lhs to destination @p rhs, within parent allocation @p parent",
|
"Assign pointer @p p_lhs to destination @p rhs, within parent allocation @p parent",
|
||||||
|
"DEPRECATED. Only used in MockCollector for gc unit test",
|
||||||
"",
|
"",
|
||||||
"Require: gc not in progress",
|
"Require: gc not in progress",
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@
|
||||||
output_hpp_dir: "include/xo/alloc2",
|
output_hpp_dir: "include/xo/alloc2",
|
||||||
output_impl_subdir: "gc",
|
output_impl_subdir: "gc",
|
||||||
includes: [
|
includes: [
|
||||||
"<xo/alloc2/Allocator.hpp>",
|
"<xo/alloc2/Allocator_basic.hpp>",
|
||||||
"<xo/alloc2/Collector.hpp>",
|
// "<xo/alloc2/Collector.hpp>",
|
||||||
"<xo/alloc2/GCObjectVisitor.hpp>",
|
"<xo/alloc2/GCObjectVisitor.hpp>",
|
||||||
"<cstdint>",
|
"<cstdint>",
|
||||||
"<cstddef>",
|
"<cstddef>",
|
||||||
|
|
@ -38,11 +38,11 @@
|
||||||
doc: ["fomo allocator type"],
|
doc: ["fomo allocator type"],
|
||||||
definition: "xo::mm::AAllocator",
|
definition: "xo::mm::AAllocator",
|
||||||
},
|
},
|
||||||
{
|
// {
|
||||||
name: "ACollector",
|
// name: "ACollector",
|
||||||
doc: ["fomo collector type"],
|
// doc: ["fomo collector type"],
|
||||||
definition: "xo::mm::ACollector",
|
// definition: "xo::mm::ACollector",
|
||||||
},
|
// },
|
||||||
{
|
{
|
||||||
name: "AGCObjectVisitor",
|
name: "AGCObjectVisitor",
|
||||||
doc: ["fomo collector type"],
|
doc: ["fomo collector type"],
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,4 @@
|
||||||
#include "gc/IGCObject_Xfer.hpp"
|
#include "gc/IGCObject_Xfer.hpp"
|
||||||
#include "gc/RGCObject.hpp"
|
#include "gc/RGCObject.hpp"
|
||||||
|
|
||||||
#include "gc/RCollector_aux.hpp"
|
|
||||||
|
|
||||||
/* end GCObject.hpp */
|
/* end GCObject.hpp */
|
||||||
|
|
|
||||||
|
|
@ -18,5 +18,6 @@
|
||||||
#include "gc/IGCObjectVisitor_Xfer.hpp"
|
#include "gc/IGCObjectVisitor_Xfer.hpp"
|
||||||
#include "gc/RGCObjectVisitor.hpp"
|
#include "gc/RGCObjectVisitor.hpp"
|
||||||
|
|
||||||
|
#include "gc/RGCObjectVisitor_aux.hpp"
|
||||||
|
|
||||||
/* end GCObjectVisitor.hpp */
|
/* end GCObjectVisitor.hpp */
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,13 @@ namespace xo {
|
||||||
obj<AGCObject> * p_lhs,
|
obj<AGCObject> * p_lhs,
|
||||||
obj<AGCObject> rhs) noexcept;
|
obj<AGCObject> rhs) noexcept;
|
||||||
|
|
||||||
|
// Need _drepr suffix to distinguish from .barrier_assign()
|
||||||
|
// see [RAllocator_aux.hpp] for implementation
|
||||||
|
template <typename DRepr>
|
||||||
|
void barrier_assign_drepr(void * parent,
|
||||||
|
DRepr ** lhs_data,
|
||||||
|
DRepr * rhs_data);
|
||||||
|
|
||||||
static bool _valid;
|
static bool _valid;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,23 @@ namespace xo {
|
||||||
rhs.iface(), rhs.opaque_data());
|
rhs.iface(), rhs.opaque_data());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Object>
|
||||||
|
template <typename DRepr>
|
||||||
|
void
|
||||||
|
RAllocator<Object>::barrier_assign_drepr(void * parent,
|
||||||
|
DRepr ** lhs_data,
|
||||||
|
DRepr * rhs_data)
|
||||||
|
{
|
||||||
|
// need to get AGCObject i/face that goes with DRepr.
|
||||||
|
obj<AGCObject,DRepr> rhs_gco(rhs_data);
|
||||||
|
|
||||||
|
this->barrier_assign_aux(parent,
|
||||||
|
nullptr /*not needed*/,
|
||||||
|
lhs_data,
|
||||||
|
rhs_gco.iface(),
|
||||||
|
rhs_data);
|
||||||
|
}
|
||||||
|
|
||||||
} /*namespace mm*/
|
} /*namespace mm*/
|
||||||
} /*namespace xo*/
|
} /*namespace xo*/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -116,6 +116,7 @@ Return false if installation fails (e.g. memory exhausted) **/
|
||||||
**/
|
**/
|
||||||
virtual void request_gc(Opaque data, Generation upto) = 0;
|
virtual void request_gc(Opaque data, Generation upto) = 0;
|
||||||
/** Assign pointer @p p_lhs to destination @p rhs, within parent allocation @p parent
|
/** Assign pointer @p p_lhs to destination @p rhs, within parent allocation @p parent
|
||||||
|
DEPRECATED. Only used in MockCollector for gc unit test
|
||||||
|
|
||||||
Require: gc not in progress **/
|
Require: gc not in progress **/
|
||||||
virtual void assign_member(Opaque data, void * parent, obj<AGCObject> * p_lhs, obj<AGCObject> & rhs) = 0;
|
virtual void assign_member(Opaque data, void * parent, obj<AGCObject> * p_lhs, obj<AGCObject> & rhs) = 0;
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@
|
||||||
|
|
||||||
// includes (via {facet_includes})
|
// includes (via {facet_includes})
|
||||||
#include <xo/alloc2/Allocator_basic.hpp>
|
#include <xo/alloc2/Allocator_basic.hpp>
|
||||||
#include <xo/alloc2/Collector.hpp>
|
|
||||||
#include <xo/alloc2/GCObjectVisitor.hpp>
|
#include <xo/alloc2/GCObjectVisitor.hpp>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
|
@ -48,8 +47,6 @@ public:
|
||||||
/** fomo allocator type **/
|
/** fomo allocator type **/
|
||||||
using AAllocator = xo::mm::AAllocator;
|
using AAllocator = xo::mm::AAllocator;
|
||||||
/** fomo collector type **/
|
/** fomo collector type **/
|
||||||
using ACollector = xo::mm::ACollector;
|
|
||||||
/** fomo collector type **/
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObjectVisitor;
|
||||||
/** hint arg when navigating object graph **/
|
/** hint arg when navigating object graph **/
|
||||||
using VisitReason = xo::mm::VisitReason;
|
using VisitReason = xo::mm::VisitReason;
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,18 @@
|
||||||
* [iface_facet_any.hpp.j2]
|
* [iface_facet_any.hpp.j2]
|
||||||
* 3. idl for facet methods
|
* 3. idl for facet methods
|
||||||
* [idl/Collector.json5]
|
* [idl/Collector.json5]
|
||||||
|
*
|
||||||
|
* variables:
|
||||||
|
* {facet_hpp_fname} -> Collector.hpp
|
||||||
|
* {impl_hpp_subdir} -> gc
|
||||||
|
* {facet_ns1} -> xo
|
||||||
|
* {facet_detail_subdir} -> gc
|
||||||
|
* {abstract_facet_fname} -> ACollector.hpp
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "ACollector.hpp"
|
||||||
#include <xo/alloc2/Allocator_basic.hpp>
|
#include <xo/alloc2/Allocator_basic.hpp>
|
||||||
#include <xo/alloc2/Generation.hpp>
|
#include <xo/alloc2/Generation.hpp>
|
||||||
#include <xo/alloc2/role.hpp>
|
#include <xo/alloc2/role.hpp>
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,18 @@
|
||||||
* [iface_facet_any.hpp.j2]
|
* [iface_facet_any.hpp.j2]
|
||||||
* 3. idl for facet methods
|
* 3. idl for facet methods
|
||||||
* [idl/GCObjectVisitor.json5]
|
* [idl/GCObjectVisitor.json5]
|
||||||
|
*
|
||||||
|
* variables:
|
||||||
|
* {facet_hpp_fname} -> GCObjectVisitor.hpp
|
||||||
|
* {impl_hpp_subdir} -> gc
|
||||||
|
* {facet_ns1} -> xo
|
||||||
|
* {facet_detail_subdir} -> gc
|
||||||
|
* {abstract_facet_fname} -> AGCObjectVisitor.hpp
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "AGCObjectVisitor.hpp"
|
||||||
#include <xo/alloc2/Generation.hpp>
|
#include <xo/alloc2/Generation.hpp>
|
||||||
#include <xo/alloc2/role.hpp>
|
#include <xo/alloc2/role.hpp>
|
||||||
#include <xo/alloc2/VisitReason.hpp>
|
#include <xo/alloc2/VisitReason.hpp>
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,6 @@ namespace mm {
|
||||||
using typeseq = xo::facet::typeseq;
|
using typeseq = xo::facet::typeseq;
|
||||||
using size_type = AGCObject::size_type;
|
using size_type = AGCObject::size_type;
|
||||||
using AAllocator = AGCObject::AAllocator;
|
using AAllocator = AGCObject::AAllocator;
|
||||||
using ACollector = AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = AGCObject::VisitReason;
|
using VisitReason = AGCObject::VisitReason;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,12 +9,19 @@
|
||||||
* [iface_facet_any.hpp.j2]
|
* [iface_facet_any.hpp.j2]
|
||||||
* 3. idl for facet methods
|
* 3. idl for facet methods
|
||||||
* [idl/GCObject.json5]
|
* [idl/GCObject.json5]
|
||||||
|
*
|
||||||
|
* variables:
|
||||||
|
* {facet_hpp_fname} -> GCObject.hpp
|
||||||
|
* {impl_hpp_subdir} -> gc
|
||||||
|
* {facet_ns1} -> xo
|
||||||
|
* {facet_detail_subdir} -> gc
|
||||||
|
* {abstract_facet_fname} -> AGCObject.hpp
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "AGCObject.hpp"
|
||||||
#include <xo/alloc2/Allocator_basic.hpp>
|
#include <xo/alloc2/Allocator_basic.hpp>
|
||||||
#include <xo/alloc2/Collector.hpp>
|
|
||||||
#include <xo/alloc2/GCObjectVisitor.hpp>
|
#include <xo/alloc2/GCObjectVisitor.hpp>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
|
@ -34,7 +41,6 @@ namespace mm {
|
||||||
using typeseq = AGCObject::typeseq;
|
using typeseq = AGCObject::typeseq;
|
||||||
using size_type = AGCObject::size_type;
|
using size_type = AGCObject::size_type;
|
||||||
using AAllocator = AGCObject::AAllocator;
|
using AAllocator = AGCObject::AAllocator;
|
||||||
using ACollector = AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = AGCObject::VisitReason;
|
using VisitReason = AGCObject::VisitReason;
|
||||||
///@}
|
///@}
|
||||||
|
|
|
||||||
|
|
@ -17,82 +17,6 @@ namespace xo {
|
||||||
class ACollector;
|
class ACollector;
|
||||||
class AGCObject;
|
class AGCObject;
|
||||||
|
|
||||||
/** defined here to avoid #include cycle, since
|
|
||||||
* template obj<AGCObject,DRepr> awkward to make available
|
|
||||||
* in RCollector.hpp
|
|
||||||
**/
|
|
||||||
template <typename Object>
|
|
||||||
template <typename DRepr>
|
|
||||||
void
|
|
||||||
RGCObjectVisitor<Object>::visit_child(VisitReason reason,
|
|
||||||
xo::facet::obj<AGCObject,DRepr> * p_obj)
|
|
||||||
{
|
|
||||||
this->visit_child(reason, p_obj->iface(), (void **)&(p_obj->data_));
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Object>
|
|
||||||
template <typename DRepr>
|
|
||||||
void
|
|
||||||
RGCObjectVisitor<Object>::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<AGCObject, std::remove_const_t<DRepr>>();
|
|
||||||
|
|
||||||
this->visit_child(reason, &iface, (void **)p_repr);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Object>
|
|
||||||
template <typename AFacet, typename DRepr>
|
|
||||||
requires (!std::is_same_v<AFacet, AGCObject>)
|
|
||||||
void
|
|
||||||
RGCObjectVisitor<Object>::visit_poly_child(VisitReason reason, obj<AFacet, DRepr> * p_objs)
|
|
||||||
{
|
|
||||||
if (*p_objs) {
|
|
||||||
auto e = xo::facet::FacetRegistry::instance().variant<AGCObject,AFacet>(*p_objs);
|
|
||||||
|
|
||||||
this->visit_child(reason, e.iface(), (void **)&(p_objs->data_));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----- DEPRECATED -----
|
|
||||||
//
|
|
||||||
// Moving these methods to RGCObjectVisitor
|
|
||||||
|
|
||||||
/** defined here to avoid #include cycle, since
|
|
||||||
* template obj<AGCObject,DRepr> awkward to make available
|
|
||||||
* in RCollector.hpp
|
|
||||||
**/
|
|
||||||
template <typename Object>
|
|
||||||
template <typename DRepr>
|
|
||||||
void
|
|
||||||
RCollector<Object>::forward_inplace(xo::facet::obj<AGCObject,DRepr> * p_obj)
|
|
||||||
{
|
|
||||||
this->forward_inplace(p_obj->iface(), (void **)&(p_obj->data_));
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Object>
|
|
||||||
template <typename DRepr>
|
|
||||||
void
|
|
||||||
RCollector<Object>::forward_inplace(DRepr ** p_repr)
|
|
||||||
{
|
|
||||||
// fetch static interface for DRepr (strip const: FacetImplementation specializations use non-const DRepr)
|
|
||||||
auto iface = xo::facet::impl_for<AGCObject, std::remove_const_t<DRepr>>();
|
|
||||||
|
|
||||||
this->forward_inplace(&iface, (void **)p_repr);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Object>
|
|
||||||
template <typename AFacet, typename DRepr>
|
|
||||||
requires (!std::is_same_v<AFacet, AGCObject>)
|
|
||||||
void
|
|
||||||
RCollector<Object>::forward_pivot_inplace(obj<AFacet, DRepr> * p_objs)
|
|
||||||
{
|
|
||||||
if (*p_objs) {
|
|
||||||
auto e = xo::facet::FacetRegistry::instance().variant<AGCObject,AFacet>(*p_objs);
|
|
||||||
this->forward_inplace(e.iface(), (void **)&(p_objs->data_));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----- mm_do_assign -----
|
// ----- mm_do_assign -----
|
||||||
|
|
||||||
/** gc-aware assignment; engage special book-keeping for cross-gen pointers **/
|
/** gc-aware assignment; engage special book-keeping for cross-gen pointers **/
|
||||||
|
|
@ -110,6 +34,7 @@ namespace xo {
|
||||||
*p_lhs = rhs;
|
*p_lhs = rhs;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} /*namespace mm*/
|
} /*namespace mm*/
|
||||||
} /*namespace xo*/
|
} /*namespace xo*/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,6 @@ public:
|
||||||
using typeseq = xo::reflect::typeseq;
|
using typeseq = xo::reflect::typeseq;
|
||||||
using size_type = AGCObject::size_type;
|
using size_type = AGCObject::size_type;
|
||||||
using AAllocator = AGCObject::AAllocator;
|
using AAllocator = AGCObject::AAllocator;
|
||||||
using ACollector = AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = AGCObject::VisitReason;
|
using VisitReason = AGCObject::VisitReason;
|
||||||
///@}
|
///@}
|
||||||
|
|
|
||||||
61
xo-alloc2/include/xo/alloc2/gc/RGCObjectVisitor_aux.hpp
Normal file
61
xo-alloc2/include/xo/alloc2/gc/RGCObjectVisitor_aux.hpp
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
/** @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 <xo/facet/FacetRegistry.hpp>
|
||||||
|
|
||||||
|
namespace xo {
|
||||||
|
namespace mm {
|
||||||
|
class ACollector;
|
||||||
|
class AGCObject;
|
||||||
|
|
||||||
|
/** defined here to avoid #include cycle, since
|
||||||
|
* template obj<AGCObject,DRepr> awkward to make available
|
||||||
|
* in RCollector.hpp
|
||||||
|
**/
|
||||||
|
template <typename Object>
|
||||||
|
template <typename DRepr>
|
||||||
|
void
|
||||||
|
RGCObjectVisitor<Object>::visit_child(VisitReason reason,
|
||||||
|
xo::facet::obj<AGCObject,DRepr> * p_obj)
|
||||||
|
{
|
||||||
|
this->visit_child(reason, p_obj->iface(), (void **)&(p_obj->data_));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Object>
|
||||||
|
template <typename DRepr>
|
||||||
|
void
|
||||||
|
RGCObjectVisitor<Object>::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<AGCObject, std::remove_const_t<DRepr>>();
|
||||||
|
|
||||||
|
this->visit_child(reason, &iface, (void **)p_repr);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Object>
|
||||||
|
template <typename AFacet, typename DRepr>
|
||||||
|
requires (!std::is_same_v<AFacet, AGCObject>)
|
||||||
|
void
|
||||||
|
RGCObjectVisitor<Object>::visit_poly_child(VisitReason reason, obj<AFacet, DRepr> * p_objs)
|
||||||
|
{
|
||||||
|
if (*p_objs) {
|
||||||
|
auto e = xo::facet::FacetRegistry::instance().variant<AGCObject,AFacet>(*p_objs);
|
||||||
|
|
||||||
|
this->visit_child(reason, e.iface(), (void **)&(p_objs->data_));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} /*namespace mm*/
|
||||||
|
} /*namespace xo*/
|
||||||
|
|
||||||
|
/* end RCollector_aux.hpp */
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// includes (via {facet_includes})
|
// includes (via {facet_includes})
|
||||||
#include "Allocator_basic.hpp"
|
#include "Allocator.hpp"
|
||||||
#include <xo/facet/obj.hpp>
|
#include <xo/facet/obj.hpp>
|
||||||
#include <xo/facet/facet_implementation.hpp>
|
#include <xo/facet/facet_implementation.hpp>
|
||||||
#include <xo/facet/typeseq.hpp>
|
#include <xo/facet/typeseq.hpp>
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,18 @@
|
||||||
* [iface_facet_any.hpp.j2]
|
* [iface_facet_any.hpp.j2]
|
||||||
* 3. idl for facet methods
|
* 3. idl for facet methods
|
||||||
* [idl/ResourceVisitor.json5]
|
* [idl/ResourceVisitor.json5]
|
||||||
|
*
|
||||||
|
* variables:
|
||||||
|
* {facet_hpp_fname} -> ResourceVisitor.hpp
|
||||||
|
* {impl_hpp_subdir} -> visitor
|
||||||
|
* {facet_ns1} -> xo
|
||||||
|
* {facet_detail_subdir} -> visitor
|
||||||
|
* {abstract_facet_fname} -> AResourceVisitor.hpp
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "AResourceVisitor.hpp"
|
||||||
#include "Allocator.hpp"
|
#include "Allocator.hpp"
|
||||||
|
|
||||||
namespace xo {
|
namespace xo {
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,18 @@
|
||||||
* [iface_facet_any.hpp.j2]
|
* [iface_facet_any.hpp.j2]
|
||||||
* 3. idl for facet methods
|
* 3. idl for facet methods
|
||||||
* [idl/Expression.json5]
|
* [idl/Expression.json5]
|
||||||
|
*
|
||||||
|
* variables:
|
||||||
|
* {facet_hpp_fname} -> Expression.hpp
|
||||||
|
* {impl_hpp_subdir} -> detail
|
||||||
|
* {facet_ns1} -> xo
|
||||||
|
* {facet_detail_subdir} -> detail
|
||||||
|
* {abstract_facet_fname} -> AExpression.hpp
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "AExpression.hpp"
|
||||||
#include "TypeRef.hpp"
|
#include "TypeRef.hpp"
|
||||||
#include "exprtype.hpp"
|
#include "exprtype.hpp"
|
||||||
#include <xo/reflect/TypeDescr.hpp>
|
#include <xo/reflect/TypeDescr.hpp>
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,18 @@
|
||||||
* [iface_facet_any.hpp.j2]
|
* [iface_facet_any.hpp.j2]
|
||||||
* 3. idl for facet methods
|
* 3. idl for facet methods
|
||||||
* [idl/SymbolTable.json5]
|
* [idl/SymbolTable.json5]
|
||||||
|
*
|
||||||
|
* variables:
|
||||||
|
* {facet_hpp_fname} -> SymbolTable.hpp
|
||||||
|
* {impl_hpp_subdir} -> symtab
|
||||||
|
* {facet_ns1} -> xo
|
||||||
|
* {facet_detail_subdir} -> symtab
|
||||||
|
* {abstract_facet_fname} -> ASymbolTable.hpp
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "ASymbolTable.hpp"
|
||||||
#include "Binding.hpp"
|
#include "Binding.hpp"
|
||||||
#include "DUniqueString.hpp"
|
#include "DUniqueString.hpp"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -154,11 +154,13 @@ def gen_facet(env,
|
||||||
# RFoo.hpp
|
# RFoo.hpp
|
||||||
router_facet_hpp_fname = f'{router_facet}.hpp'
|
router_facet_hpp_fname = f'{router_facet}.hpp'
|
||||||
|
|
||||||
|
# REMINDER: this context for FACET definition, e.g. AGCObject
|
||||||
context = {
|
context = {
|
||||||
'genfacet': 'xo-facet/codegen/genfacet',
|
'genfacet': 'xo-facet/codegen/genfacet',
|
||||||
'genfacet_input': idl_fname,
|
'genfacet_input': idl_fname,
|
||||||
'using_dox': using_dox,
|
'using_dox': using_dox,
|
||||||
'impl_hpp_subdir': facet_detail_subdir,
|
'impl_hpp_subdir': facet_detail_subdir, # legacy name
|
||||||
|
'facet_detail_subdir': facet_detail_subdir,
|
||||||
#
|
#
|
||||||
'facet_hpp_j2': 'facet.hpp.j2',
|
'facet_hpp_j2': 'facet.hpp.j2',
|
||||||
'facet_includes': facet_includes,
|
'facet_includes': facet_includes,
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,18 @@
|
||||||
* [{{ iface_facet_any_hpp_j2 }}]
|
* [{{ iface_facet_any_hpp_j2 }}]
|
||||||
* 3. idl for facet methods
|
* 3. idl for facet methods
|
||||||
* [{{ idl_fname }}]
|
* [{{ idl_fname }}]
|
||||||
|
*
|
||||||
|
* variables:
|
||||||
|
* {facet_hpp_fname} -> {{facet_hpp_fname}}
|
||||||
|
* {impl_hpp_subdir} -> {{impl_hpp_subdir}}
|
||||||
|
* {facet_ns1} -> {{facet_ns1}}
|
||||||
|
* {facet_detail_subdir} -> {{facet_detail_subdir}}
|
||||||
|
* {abstract_facet_fname} -> {{abstract_facet_fname}}
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "{{abstract_facet_fname}}"
|
||||||
{% for include_fname in facet_includes %}
|
{% for include_fname in facet_includes %}
|
||||||
#include {{include_fname}}
|
#include {{include_fname}}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
||||||
|
|
@ -307,7 +307,9 @@ namespace xo {
|
||||||
|
|
||||||
// ----- mutation -----
|
// ----- mutation -----
|
||||||
|
|
||||||
/** Modify a gc-owned pointer @p *p_lhs, within allocation @p parent,
|
/** DEPRECATED. Prefer .barrier_assign_aux().
|
||||||
|
*
|
||||||
|
* Modify a gc-owned pointer @p *p_lhs, within allocation @p parent,
|
||||||
* to point to @p rhs.
|
* to point to @p rhs.
|
||||||
*
|
*
|
||||||
* Motivation: need special handling for cross-generational pointers with
|
* Motivation: need special handling for cross-generational pointers with
|
||||||
|
|
|
||||||
|
|
@ -55,14 +55,22 @@ namespace xo {
|
||||||
void verify_ok() noexcept;
|
void verify_ok() noexcept;
|
||||||
|
|
||||||
/** on behalf of gc-aware object store @p gc,
|
/** on behalf of gc-aware object store @p gc,
|
||||||
* change the value of a child pointer at @p p_lhs
|
* change the value of a child pointer {@p lhs_iface, @p *lhs_data}
|
||||||
* with parent object @p parent. p_lhs and parent must belong
|
* with parent object @p parent, to point to {@p rhs_iface, @p rhs_data}
|
||||||
* to the same allocation.
|
* p_lhs and parent must belong to the same allocation.
|
||||||
|
*
|
||||||
|
* @p lhs_iface can be nullptr, if parent holds ordinary pointer
|
||||||
|
* instead of fop (i.e. DRepr* instead of obj<AFacet,DRepr>).
|
||||||
|
*
|
||||||
|
* @p rhs_iface must be non-null, it's load-bearing for mlog entry
|
||||||
|
* snapshot member.
|
||||||
**/
|
**/
|
||||||
void assign_member(GCObjectStore * gc,
|
void assign_member_aux(GCObjectStore * gc,
|
||||||
void * parent,
|
void * parent,
|
||||||
obj<AGCObject> * p_lhs,
|
AGCObject * lhs_iface,
|
||||||
obj<AGCObject> rhs);
|
void ** lhs_data,
|
||||||
|
AGCObject * rhs_iface,
|
||||||
|
void * rhs_data);
|
||||||
|
|
||||||
/** swap {to, from} roles
|
/** swap {to, from} roles
|
||||||
**/
|
**/
|
||||||
|
|
|
||||||
|
|
@ -104,6 +104,7 @@ Return false if installation fails (e.g. memory exhausted) **/
|
||||||
**/
|
**/
|
||||||
static void request_gc(DX1Collector & self, Generation upto);
|
static void request_gc(DX1Collector & self, Generation upto);
|
||||||
/** Assign pointer @p p_lhs to destination @p rhs, within parent allocation @p parent
|
/** Assign pointer @p p_lhs to destination @p rhs, within parent allocation @p parent
|
||||||
|
DEPRECATED. Only used in MockCollector for gc unit test
|
||||||
|
|
||||||
Require: gc not in progress **/
|
Require: gc not in progress **/
|
||||||
static void assign_member(DX1Collector & self, void * parent, obj<AGCObject> * p_lhs, obj<AGCObject> & rhs);
|
static void assign_member(DX1Collector & self, void * parent, obj<AGCObject> * p_lhs, obj<AGCObject> & rhs);
|
||||||
|
|
|
||||||
|
|
@ -620,24 +620,11 @@ namespace xo {
|
||||||
void
|
void
|
||||||
DX1Collector::assign_member(void * parent, obj<AGCObject> * p_lhs, obj<AGCObject> rhs)
|
DX1Collector::assign_member(void * parent, obj<AGCObject> * p_lhs, obj<AGCObject> rhs)
|
||||||
{
|
{
|
||||||
scope log(XO_DEBUG(config_.debug_flag_),
|
this->barrier_assign_aux(parent,
|
||||||
xtag("parent", parent), xtag("lhs", p_lhs), xtag("rhs", rhs.data()));
|
p_lhs->iface(),
|
||||||
|
p_lhs->opaque_data_addr(),
|
||||||
// ++ stats.n_mutation_;
|
rhs.iface(),
|
||||||
|
rhs.opaque_data());
|
||||||
if (runstate_.is_running()) {
|
|
||||||
*p_lhs = rhs;
|
|
||||||
|
|
||||||
// for removal of all doubt:
|
|
||||||
// don't log mutations during GC cycle.
|
|
||||||
// That said: should not be happening!
|
|
||||||
assert(false);
|
|
||||||
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
mlog_store_.assign_member(&gco_store_, parent, p_lhs, rhs);
|
|
||||||
|
|
||||||
}
|
|
||||||
} /*assign_member*/
|
} /*assign_member*/
|
||||||
|
|
||||||
DX1CollectorIterator
|
DX1CollectorIterator
|
||||||
|
|
@ -702,7 +689,12 @@ namespace xo {
|
||||||
xtag("lhs.iface", lhs_iface), xtag("&lhs.data", lhs_data),
|
xtag("lhs.iface", lhs_iface), xtag("&lhs.data", lhs_data),
|
||||||
xtag("rhs.iface", rhs_iface), xtag("rhs.data", rhs_data));
|
xtag("rhs.iface", rhs_iface), xtag("rhs.data", rhs_data));
|
||||||
|
|
||||||
// see .assign_member()
|
mlog_store_.assign_member_aux(&gco_store_,
|
||||||
|
parent,
|
||||||
|
lhs_iface,
|
||||||
|
lhs_data,
|
||||||
|
rhs_iface,
|
||||||
|
rhs_data);
|
||||||
}
|
}
|
||||||
} /*namespace mm*/
|
} /*namespace mm*/
|
||||||
} /*namespace xo*/
|
} /*namespace xo*/
|
||||||
|
|
|
||||||
|
|
@ -139,17 +139,31 @@ namespace xo {
|
||||||
} /*verify_ok*/
|
} /*verify_ok*/
|
||||||
|
|
||||||
void
|
void
|
||||||
MutationLogStore::assign_member(GCObjectStore * gco_store,
|
MutationLogStore::assign_member_aux(GCObjectStore * gco_store,
|
||||||
void * parent,
|
void * parent,
|
||||||
obj<AGCObject> * p_lhs,
|
AGCObject * lhs_iface,
|
||||||
obj<AGCObject> rhs)
|
void ** lhs_addr,
|
||||||
|
AGCObject * rhs_iface,
|
||||||
|
void * rhs_data)
|
||||||
{
|
{
|
||||||
scope log(XO_DEBUG(config_.debug_flag_),
|
scope log(XO_DEBUG(config_.debug_flag_),
|
||||||
xtag("parent", parent), xtag("lhs", p_lhs), xtag("rhs", rhs.data()));
|
xtag("parent", parent),
|
||||||
|
xtag("lhs.iface", lhs_iface),
|
||||||
|
xtag("&lhs.data", lhs_addr),
|
||||||
|
xtag("rhs.iface", rhs_iface),
|
||||||
|
xtag("rhs.data", rhs_data));
|
||||||
|
|
||||||
// ++ stats.n_mutation_;
|
// ++ stats.n_mutation_;
|
||||||
|
|
||||||
*p_lhs = rhs;
|
assert(parent);
|
||||||
|
assert(lhs_addr);
|
||||||
|
assert(rhs_iface);
|
||||||
|
assert(rhs_data);
|
||||||
|
|
||||||
|
if (lhs_iface)
|
||||||
|
*lhs_iface = *rhs_iface;
|
||||||
|
|
||||||
|
*lhs_addr = rhs_data;
|
||||||
|
|
||||||
if (!config_.enabled_flag_) {
|
if (!config_.enabled_flag_) {
|
||||||
log && log(xtag("msg", "noop b/c incremental gc disabled"));
|
log && log(xtag("msg", "noop b/c incremental gc disabled"));
|
||||||
|
|
@ -162,7 +176,7 @@ namespace xo {
|
||||||
// 1. generation of lhs
|
// 1. generation of lhs
|
||||||
// 2. generation of rhs
|
// 2. generation of rhs
|
||||||
|
|
||||||
Generation src_g = gco_store->generation_of(Role::to_space(), p_lhs);
|
Generation src_g = gco_store->generation_of(Role::to_space(), lhs_addr);
|
||||||
|
|
||||||
if (src_g.is_sentinel()) {
|
if (src_g.is_sentinel()) {
|
||||||
log && log(xtag("msg", "noop because src not gc-owned"));
|
log && log(xtag("msg", "noop because src not gc-owned"));
|
||||||
|
|
@ -172,7 +186,7 @@ namespace xo {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Generation dest_g = gco_store->generation_of(Role::to_space(), rhs.data());
|
Generation dest_g = gco_store->generation_of(Role::to_space(), rhs_data);
|
||||||
|
|
||||||
if (dest_g.is_sentinel()) {
|
if (dest_g.is_sentinel()) {
|
||||||
log && log(xtag("msg", "noop because dest not gc-owned"));
|
log && log(xtag("msg", "noop because dest not gc-owned"));
|
||||||
|
|
@ -197,7 +211,7 @@ namespace xo {
|
||||||
const DArena * arena = gco_store->get_space(Role::to_space(), src_g);
|
const DArena * arena = gco_store->get_space(Role::to_space(), src_g);
|
||||||
|
|
||||||
const DArena::header_type * src_hdr = arena->obj2hdr(parent);
|
const DArena::header_type * src_hdr = arena->obj2hdr(parent);
|
||||||
const DArena::header_type * dest_hdr = arena->obj2hdr(rhs.data());
|
const DArena::header_type * dest_hdr = arena->obj2hdr(rhs_data);
|
||||||
|
|
||||||
assert(src_hdr && dest_hdr);
|
assert(src_hdr && dest_hdr);
|
||||||
|
|
||||||
|
|
@ -222,16 +236,16 @@ namespace xo {
|
||||||
|
|
||||||
// control here: we have an older->younger pointer, need to log it
|
// control here: we have an older->younger pointer, need to log it
|
||||||
|
|
||||||
void ** lhs_addr = reinterpret_cast<void **>(&(p_lhs->data_));
|
obj<AGCObject> snap(rhs_iface, rhs_data);
|
||||||
|
|
||||||
this->_append_mutation(dest_g, parent, lhs_addr, rhs);
|
this->_append_mutation(dest_g, parent, lhs_addr, snap);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MutationLogStore::_append_mutation(Generation dest_g,
|
MutationLogStore::_append_mutation(Generation dest_g,
|
||||||
void * parent,
|
void * parent,
|
||||||
void ** addr,
|
void ** addr,
|
||||||
obj<AGCObject> rhs)
|
obj<AGCObject> snap)
|
||||||
{
|
{
|
||||||
// mlog keyed by generation in which pointer _destination_ resides:
|
// mlog keyed by generation in which pointer _destination_ resides:
|
||||||
// collection that moves destination generation around needs to also
|
// collection that moves destination generation around needs to also
|
||||||
|
|
@ -239,7 +253,7 @@ namespace xo {
|
||||||
//
|
//
|
||||||
MutationLog * mlog = this->mlog_[Role::to_space()][dest_g];
|
MutationLog * mlog = this->mlog_[Role::to_space()][dest_g];
|
||||||
|
|
||||||
mlog->push_back(MutationLogEntry(parent, addr, rhs));
|
mlog->push_back(MutationLogEntry(parent, addr, snap));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,12 @@ namespace xo {
|
||||||
void
|
void
|
||||||
DMockCollector::assign_member(void * parent, obj<AGCObject> * p_lhs, obj<AGCObject> & rhs)
|
DMockCollector::assign_member(void * parent, obj<AGCObject> * p_lhs, obj<AGCObject> & rhs)
|
||||||
{
|
{
|
||||||
mls_->assign_member(gcos_, parent, p_lhs, rhs);
|
mls_->assign_member_aux(gcos_,
|
||||||
|
parent,
|
||||||
|
p_lhs->iface(),
|
||||||
|
p_lhs->opaque_data_addr(),
|
||||||
|
rhs.iface(),
|
||||||
|
rhs.opaque_data());
|
||||||
}
|
}
|
||||||
|
|
||||||
void *
|
void *
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
@ -67,4 +66,4 @@ when @p fn invokes garbage collector reentry point **/
|
||||||
} /*namespace scm*/
|
} /*namespace scm*/
|
||||||
} /*namespace xo*/
|
} /*namespace xo*/
|
||||||
|
|
||||||
/* end */
|
/* end */
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,18 @@
|
||||||
* [iface_facet_any.hpp.j2]
|
* [iface_facet_any.hpp.j2]
|
||||||
* 3. idl for facet methods
|
* 3. idl for facet methods
|
||||||
* [idl/Numeric.json5]
|
* [idl/Numeric.json5]
|
||||||
|
*
|
||||||
|
* variables:
|
||||||
|
* {facet_hpp_fname} -> Numeric.hpp
|
||||||
|
* {impl_hpp_subdir} -> detail
|
||||||
|
* {facet_ns1} -> xo
|
||||||
|
* {facet_detail_subdir} -> detail
|
||||||
|
* {abstract_facet_fname} -> ANumeric.hpp
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "ANumeric.hpp"
|
||||||
|
|
||||||
namespace xo {
|
namespace xo {
|
||||||
namespace scm {
|
namespace scm {
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,18 @@
|
||||||
* [iface_facet_any.hpp.j2]
|
* [iface_facet_any.hpp.j2]
|
||||||
* 3. idl for facet methods
|
* 3. idl for facet methods
|
||||||
* [idl/Sequence.json5]
|
* [idl/Sequence.json5]
|
||||||
|
*
|
||||||
|
* variables:
|
||||||
|
* {facet_hpp_fname} -> Sequence.hpp
|
||||||
|
* {impl_hpp_subdir} -> sequence
|
||||||
|
* {facet_ns1} -> xo
|
||||||
|
* {facet_detail_subdir} -> sequence
|
||||||
|
* {abstract_facet_fname} -> ASequence.hpp
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "ASequence.hpp"
|
||||||
#include <xo/alloc2/GCObject.hpp>
|
#include <xo/alloc2/GCObject.hpp>
|
||||||
|
|
||||||
namespace xo {
|
namespace xo {
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#include "DArray.hpp"
|
#include "DArray.hpp"
|
||||||
#include "gc/RCollector_aux.hpp"
|
//#include "gc/RCollector_aux.hpp"
|
||||||
#include <xo/printable2/Printable.hpp>
|
#include <xo/printable2/Printable.hpp>
|
||||||
#include <xo/facet/FacetRegistry.hpp>
|
#include <xo/facet/FacetRegistry.hpp>
|
||||||
#include <xo/indentlog/print/pretty.hpp>
|
#include <xo/indentlog/print/pretty.hpp>
|
||||||
|
|
@ -16,7 +16,7 @@ namespace xo {
|
||||||
using xo::print::APrintable;
|
using xo::print::APrintable;
|
||||||
using xo::facet::FacetRegistry;
|
using xo::facet::FacetRegistry;
|
||||||
using xo::mm::AGCObject;
|
using xo::mm::AGCObject;
|
||||||
using xo::mm::mm_do_assign;
|
//using xo::mm::mm_do_assign;
|
||||||
using xo::facet::typeseq;
|
using xo::facet::typeseq;
|
||||||
|
|
||||||
namespace scm {
|
namespace scm {
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,13 @@
|
||||||
#include "DList.hpp"
|
#include "DList.hpp"
|
||||||
#include "list/IPrintable_DList.hpp"
|
#include "list/IPrintable_DList.hpp"
|
||||||
#include "list/IGCObject_DList.hpp"
|
#include "list/IGCObject_DList.hpp"
|
||||||
|
#include <xo/alloc2/GCObjectVisitor.hpp>
|
||||||
#include <xo/alloc2/GCObject.hpp>
|
#include <xo/alloc2/GCObject.hpp>
|
||||||
|
|
||||||
|
// need Collector for mm_do_assign()
|
||||||
|
#include <xo/alloc2/Collector.hpp>
|
||||||
|
#include <xo/alloc2/gc/RCollector_aux.hpp> // for mm_do_assign()
|
||||||
|
|
||||||
#include <xo/printable2/Printable.hpp>
|
#include <xo/printable2/Printable.hpp>
|
||||||
#include <xo/facet/FacetRegistry.hpp>
|
#include <xo/facet/FacetRegistry.hpp>
|
||||||
#include <xo/facet/facet_implementation.hpp>
|
#include <xo/facet/facet_implementation.hpp>
|
||||||
|
|
@ -137,7 +143,7 @@ namespace xo {
|
||||||
{
|
{
|
||||||
scope log(XO_DEBUG(true), xtag("gc.data", gc.data_));
|
scope log(XO_DEBUG(true), xtag("gc.data", gc.data_));
|
||||||
|
|
||||||
mm_do_assign(gc, this, &head_, rhs);
|
xo::mm::mm_do_assign(gc, this, &head_, rhs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,18 @@
|
||||||
* [iface_facet_any.hpp.j2]
|
* [iface_facet_any.hpp.j2]
|
||||||
* 3. idl for facet methods
|
* 3. idl for facet methods
|
||||||
* [idl/Procedure.json5]
|
* [idl/Procedure.json5]
|
||||||
|
*
|
||||||
|
* variables:
|
||||||
|
* {facet_hpp_fname} -> Procedure.hpp
|
||||||
|
* {impl_hpp_subdir} -> detail
|
||||||
|
* {facet_ns1} -> xo
|
||||||
|
* {facet_detail_subdir} -> detail
|
||||||
|
* {abstract_facet_fname} -> AProcedure.hpp
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "AProcedure.hpp"
|
||||||
#include "RuntimeContext.hpp"
|
#include "RuntimeContext.hpp"
|
||||||
#include <xo/alloc2/GCObject.hpp>
|
#include <xo/alloc2/GCObject.hpp>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,18 @@
|
||||||
* [iface_facet_any.hpp.j2]
|
* [iface_facet_any.hpp.j2]
|
||||||
* 3. idl for facet methods
|
* 3. idl for facet methods
|
||||||
* [idl/RuntimeContext.json5]
|
* [idl/RuntimeContext.json5]
|
||||||
|
*
|
||||||
|
* variables:
|
||||||
|
* {facet_hpp_fname} -> RuntimeContext.hpp
|
||||||
|
* {impl_hpp_subdir} -> detail
|
||||||
|
* {facet_ns1} -> xo
|
||||||
|
* {facet_detail_subdir} -> detail
|
||||||
|
* {abstract_facet_fname} -> ARuntimeContext.hpp
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "ARuntimeContext.hpp"
|
||||||
#include <xo/stringtable2/StringTable.hpp>
|
#include <xo/stringtable2/StringTable.hpp>
|
||||||
#include <xo/alloc2/Allocator.hpp>
|
#include <xo/alloc2/Allocator.hpp>
|
||||||
#include <xo/alloc2/Collector.hpp>
|
#include <xo/alloc2/Collector.hpp>
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,18 @@
|
||||||
* [iface_facet_any.hpp.j2]
|
* [iface_facet_any.hpp.j2]
|
||||||
* 3. idl for facet methods
|
* 3. idl for facet methods
|
||||||
* [idl/SyntaxStateMachine.json5]
|
* [idl/SyntaxStateMachine.json5]
|
||||||
|
*
|
||||||
|
* variables:
|
||||||
|
* {facet_hpp_fname} -> SyntaxStateMachine.hpp
|
||||||
|
* {impl_hpp_subdir} -> ssm
|
||||||
|
* {facet_ns1} -> xo
|
||||||
|
* {facet_detail_subdir} -> ssm
|
||||||
|
* {abstract_facet_fname} -> ASyntaxStateMachine.hpp
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "ASyntaxStateMachine.hpp"
|
||||||
#include "ParserStateMachine.hpp"
|
#include "ParserStateMachine.hpp"
|
||||||
#include "syntaxstatetype.hpp"
|
#include "syntaxstatetype.hpp"
|
||||||
#include <xo/type/Type.hpp>
|
#include <xo/type/Type.hpp>
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
//using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
@ -67,4 +66,4 @@ when @p fn invokes garbage collector reentry point **/
|
||||||
} /*namespace scm*/
|
} /*namespace scm*/
|
||||||
} /*namespace xo*/
|
} /*namespace xo*/
|
||||||
|
|
||||||
/* end */
|
/* end */
|
||||||
|
|
@ -43,7 +43,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,18 @@
|
||||||
* [iface_facet_any.hpp.j2]
|
* [iface_facet_any.hpp.j2]
|
||||||
* 3. idl for facet methods
|
* 3. idl for facet methods
|
||||||
* [idl/Type.json5]
|
* [idl/Type.json5]
|
||||||
|
*
|
||||||
|
* variables:
|
||||||
|
* {facet_hpp_fname} -> Type.hpp
|
||||||
|
* {impl_hpp_subdir} -> type
|
||||||
|
* {facet_ns1} -> xo
|
||||||
|
* {facet_detail_subdir} -> type
|
||||||
|
* {abstract_facet_fname} -> AType.hpp
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "AType.hpp"
|
||||||
#include <xo/type/Metatype.hpp>
|
#include <xo/type/Metatype.hpp>
|
||||||
#include <xo/reflect/TypeDescr.hpp>
|
#include <xo/reflect/TypeDescr.hpp>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
using size_type = xo::mm::AGCObject::size_type;
|
using size_type = xo::mm::AGCObject::size_type;
|
||||||
using AAllocator = xo::mm::AGCObject::AAllocator;
|
using AAllocator = xo::mm::AGCObject::AAllocator;
|
||||||
using ACollector = xo::mm::AGCObject::ACollector;
|
|
||||||
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
using AGCObjectVisitor = xo::mm::AGCObject::AGCObjectVisitor;
|
||||||
using VisitReason = xo::mm::AGCObject::VisitReason;
|
using VisitReason = xo::mm::AGCObject::VisitReason;
|
||||||
using Copaque = xo::mm::AGCObject::Copaque;
|
using Copaque = xo::mm::AGCObject::Copaque;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue