xo-gc stack: + gc-location-of() primitive
This commit is contained in:
parent
b8e7ff8b7a
commit
909c1e485a
5 changed files with 28 additions and 1 deletions
|
|
@ -65,6 +65,10 @@ public:
|
|||
virtual size_type committed(Copaque data, Generation g, role r) const noexcept = 0;
|
||||
/** address space reserved for this collector **/
|
||||
virtual size_type reserved(Copaque data, Generation g, role r) const noexcept = 0;
|
||||
/** Location of object in collector. -1 if not in collector memory.
|
||||
Other negative values represent collector error states (good luck!).
|
||||
Exact meaning of non-negative values up to collector implementation **/
|
||||
virtual std::int32_t locate_address(Copaque data, const void * addr) const noexcept = 0;
|
||||
/** true if gc responsible for data at @p addr, and data belongs to role @p r **/
|
||||
virtual bool contains(Copaque data, role r, const void * addr) const noexcept = 0;
|
||||
/** true iff gc-aware object of type @p tseq is installed in this collector **/
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ namespace mm {
|
|||
[[noreturn]] size_type allocated(Copaque, Generation, role) const noexcept override { _fatal(); }
|
||||
[[noreturn]] size_type committed(Copaque, Generation, role) const noexcept override { _fatal(); }
|
||||
[[noreturn]] size_type reserved(Copaque, Generation, role) const noexcept override { _fatal(); }
|
||||
[[noreturn]] std::int32_t locate_address(Copaque, const void *) const noexcept override { _fatal(); }
|
||||
[[noreturn]] bool contains(Copaque, role, const void *) const noexcept override { _fatal(); }
|
||||
[[noreturn]] bool is_type_installed(Copaque, typeseq) const noexcept override { _fatal(); }
|
||||
[[noreturn]] bool report_statistics(Copaque, obj<AAllocator>, obj<AAllocator>, obj<AGCObject> *) const noexcept override { _fatal(); }
|
||||
|
|
|
|||
|
|
@ -55,6 +55,9 @@ namespace mm {
|
|||
size_type reserved(Copaque data, Generation g, role r) const noexcept override {
|
||||
return I::reserved(_dcast(data), g, r);
|
||||
}
|
||||
std::int32_t locate_address(Copaque data, const void * addr) const noexcept override {
|
||||
return I::locate_address(_dcast(data), addr);
|
||||
}
|
||||
bool contains(Copaque data, role r, const void * addr) const noexcept override {
|
||||
return I::contains(_dcast(data), r, addr);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -88,6 +88,9 @@ public:
|
|||
size_type reserved(Generation g, role r) const noexcept {
|
||||
return O::iface()->reserved(O::data(), g, r);
|
||||
}
|
||||
std::int32_t locate_address(const void * addr) const noexcept {
|
||||
return O::iface()->locate_address(O::data(), addr);
|
||||
}
|
||||
bool contains(role r, const void * addr) const noexcept {
|
||||
return O::iface()->contains(O::data(), r, addr);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue