xo-object2 xo-gc xo-facet: codegen updates + IGCObject_DString

This commit is contained in:
Roland Conybeare 2026-01-14 14:37:44 -05:00
commit ecfd3e4e6f
19 changed files with 280 additions and 68 deletions

View file

@ -6,7 +6,9 @@
#pragma once
#include <xo/alloc2/Allocator.hpp>
#include <xo/gc/Collector.hpp>
#include <xo/facet/obj.hpp>
#include <xo/indentlog/print/ppindentinfo.hpp>
#include <string_view>
#include <cstdint>
@ -38,11 +40,22 @@ namespace xo {
using const_iterator = const char *;
/** xo allocator **/
using AAllocator = xo::mm::AAllocator;
/** garbage collector **/
using ACollector = xo::mm::ACollector;
/** ppindentinfo for APrintable **/
using ppindentinfo = xo::print::ppindentinfo;
///@}
/** @defgroup dstring-ctors constructors **/
///@{
/** default ctor **/
DString() = default;
/** not simply copyable, because of flexible array.
* Need allocator
**/
DString(const DString &) = delete;
/** create empty string with space for @cap chars
* (including null terminator).
* Use memory from allocator @p mm
@ -56,6 +69,17 @@ namespace xo {
static DString * from_cstr(obj<AAllocator> mm,
const char * cstr);
/** clone existing string **/
static DString * clone(obj<AAllocator> mm,
const DString * src);
#ifdef NOT_YET
/** **/
static DString * concat(obj<AAllocator> mm,
DString * s1,
DString * s2);
#endif
///@}
/** @defgroup dstring-access access methods **/
///@{
@ -141,6 +165,24 @@ namespace xo {
operator const char * () const noexcept { return &(chars_[0]); }
///@}
/** @defgroup dstring-printable-methods printable facet methods **/
///@{
bool pretty(const ppindentinfo & ppii) const;
///@}
/** @defgroup dstring-gcobject-methods gcobject facet methods **/
///@{
size_type shallow_size() const noexcept;
/** clone string, using memory from allocator @p mm **/
DString * shallow_copy(obj<AAllocator> mm) const noexcept;
/** fixup child pointers (trivial for DString, no children) **/
size_type forward_children(obj<ACollector> gc) noexcept;
///@}
private:
/** @defgroup dstring-instance-variables instance variables **/

View file

@ -0,0 +1,66 @@
/** @file IGCObject_DString.hpp
*
* Generated automagically from ingredients:
* 1. code generator:
* [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet]
* arguments:
* --input [idl/IGCObject_DString.json5]
* 2. jinja2 template for abstract facet .hpp file:
* [iface_facet_any.hpp.j2]
* 3. idl for facet methods
* [idl/IGCObject_DString.json5]
**/
#pragma once
#include <xo/gc/GCObject.hpp>
#include <xo/alloc2/Allocator.hpp>
#include "DString.hpp"
namespace xo { namespace scm { class IGCObject_DString; } }
namespace xo {
namespace facet {
template <>
struct FacetImplementation<xo::mm::AGCObject,
xo::scm::DString>
{
using ImplType = xo::mm::IGCObject_Xfer
<xo::scm::DString,
xo::scm::IGCObject_DString>;
};
}
}
namespace xo {
namespace scm {
/** @class IGCObject_DString
**/
class IGCObject_DString {
public:
/** @defgroup scm-gcobject-dstring-type-traits **/
///@{
using size_type = xo::mm::AGCObject::size_type;
using AAllocator = xo::mm::AGCObject::AAllocator;
using ACollector = xo::mm::AGCObject::ACollector;
using Copaque = xo::mm::AGCObject::Copaque;
using Opaque = xo::mm::AGCObject::Opaque;
///@}
/** @defgroup scm-gcobject-dstring-methods **/
///@{
// const methods
/** memory consumption for this instance **/
static size_type shallow_size(const DString & self) noexcept;
/** copy instance using allocator **/
static Opaque shallow_copy(const DString & self, obj<AAllocator> mm) noexcept;
// non-const methods
/** during GC: forward immdiate children **/
static size_type forward_children(DString & self, obj<ACollector> gc) noexcept;
///@}
};
} /*namespace scm*/
} /*namespace xo*/
/* end */