xo-gc stack: fix mutation setup + xo-reader2 utest

This commit is contained in:
Roland Conybeare 2026-05-07 23:44:32 -04:00
commit b64940fa0a
24 changed files with 478 additions and 48 deletions

View file

@ -76,6 +76,11 @@ namespace xo {
static DArray * _empty(obj<AAllocator> mm,
size_type cap);
/** ofp version of _empty(mm,cap) **/
template <typename AFacet = AGCObject>
static obj<AFacet,DArray> empty(obj<AAllocator> mm,
size_type cap);
/** create copy of @p src using memory from @p mm
* with capacity for @p new_cap elements
**/
@ -198,6 +203,15 @@ namespace xo {
///@}
};
template <typename AFacet>
obj<AFacet,DArray>
DArray::empty(obj<AAllocator> mm, DArray::size_type cap)
{
DArray * retval = _empty(mm, cap);
return obj<AFacet,DArray>(retval);
}
template <typename... Args>
requires (std::convertible_to<Args, obj<DArray::AGCObject>> && ...)
DArray *

View file

@ -84,7 +84,8 @@ namespace xo {
}
bool
DArray::push_back(obj<AAllocator> mm, obj<AGCObject> elt) noexcept
DArray::push_back(obj<AAllocator> mm,
obj<AGCObject> elt) noexcept
{
if (size_ >= capacity_) {
return false;

View file

@ -63,6 +63,9 @@ namespace xo {
auto alloc = with_facet<AAllocator>::mkobj(&arena);
obj<AAllocator> null_mm;
REQUIRE(!null_mm.data());
REQUIRE(!null_mm._has_null_vptr()); // any
DArray * arr = DArray::_empty(alloc, 16);
REQUIRE(arr != nullptr);
REQUIRE(arr->capacity() == 16);