From 929c25a7a6d78b4216da31b4befbd1b02582295f Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Fri, 16 Jan 2026 13:34:22 -0500 Subject: [PATCH] xo-expression2: + IGCObject_DUniqueString + facet/type registration --- xo-expression2/CMakeLists.txt | 12 ++++ .../idl/IGCObject_DUniqueString.json5 | 15 +++++ .../detail/IGCObject_DUniqueString.hpp | 67 +++++++++++++++++++ .../expression2_register_facets.hpp | 17 +++++ .../expression2_register_types.hpp | 17 +++++ .../expression2/IGCObject_DUniqueString.cpp | 39 +++++++++++ .../expression2_register_facets.cpp | 26 ++++++- .../expression2_register_types.cpp | 37 ++++++++++ 8 files changed, 227 insertions(+), 3 deletions(-) create mode 100644 xo-expression2/idl/IGCObject_DUniqueString.json5 create mode 100644 xo-expression2/include/xo/expression2/detail/IGCObject_DUniqueString.hpp create mode 100644 xo-expression2/include/xo/expression2/expression2_register_facets.hpp create mode 100644 xo-expression2/include/xo/expression2/expression2_register_types.hpp create mode 100644 xo-expression2/src/expression2/IGCObject_DUniqueString.cpp create mode 100644 xo-expression2/src/expression2/expression2_register_types.cpp diff --git a/xo-expression2/CMakeLists.txt b/xo-expression2/CMakeLists.txt index 0c6419c8..415b920d 100644 --- a/xo-expression2/CMakeLists.txt +++ b/xo-expression2/CMakeLists.txt @@ -44,6 +44,18 @@ xo_add_genfacetimpl( OUTPUT_CPP_DIR src/expression2 ) +# note: manual target; generated code committed to git +xo_add_genfacetimpl( + TARGET xo-expression2-facetimpl-gcobject-uniquestring + FACET_PKG xo_gc + FACET GCObject + REPR UniqueString + INPUT idl/IGCObject_DUniqueString.json5 + OUTPUT_HPP_DIR include/xo/expression2 + OUTPUT_IMPL_SUBDIR detail + OUTPUT_CPP_DIR src/expression2 +) + # ---------------------------------------------------------------- # header-only library diff --git a/xo-expression2/idl/IGCObject_DUniqueString.json5 b/xo-expression2/idl/IGCObject_DUniqueString.json5 new file mode 100644 index 00000000..8cf516b2 --- /dev/null +++ b/xo-expression2/idl/IGCObject_DUniqueString.json5 @@ -0,0 +1,15 @@ +{ + mode: "implementation", + includes: [ + "", + "" + ], + local_types: [ ], + namespace1: "xo", + namespace2: "scm", + facet_idl: "idl/GCObject.json5", + brief: "provide AGCObject interface for DUniqueString", + using_doxygen: true, + repr: "DUniqueString", + doc: [ "implement AGCObject for DUniqueString" ], +} diff --git a/xo-expression2/include/xo/expression2/detail/IGCObject_DUniqueString.hpp b/xo-expression2/include/xo/expression2/detail/IGCObject_DUniqueString.hpp new file mode 100644 index 00000000..b971daea --- /dev/null +++ b/xo-expression2/include/xo/expression2/detail/IGCObject_DUniqueString.hpp @@ -0,0 +1,67 @@ +/** @file IGCObject_DUniqueString.hpp + * + * Generated automagically from ingredients: + * 1. code generator: + * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * arguments: + * --input [idl/IGCObject_DUniqueString.json5] + * 2. jinja2 template for abstract facet .hpp file: + * [iface_facet_repr.hpp.j2] + * 3. idl for facet methods + * [idl/IGCObject_DUniqueString.json5] + **/ + +#pragma once + +#include "GCObject.hpp" +#include +#include +#include "DUniqueString.hpp" + +namespace xo { namespace scm { class IGCObject_DUniqueString; } } + +namespace xo { + namespace facet { + template <> + struct FacetImplementation + { + using ImplType = xo::mm::IGCObject_Xfer + ; + }; + } +} + +namespace xo { + namespace scm { + /** @class IGCObject_DUniqueString + **/ + class IGCObject_DUniqueString { + public: + /** @defgroup scm-gcobject-duniquestring-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-duniquestring-methods **/ + ///@{ + // const methods + /** memory consumption for this instance **/ + static size_type shallow_size(const DUniqueString & self) noexcept; + /** copy instance using allocator **/ + static Opaque shallow_copy(const DUniqueString & self, obj mm) noexcept; + + // non-const methods + /** during GC: forward immdiate children **/ + static size_type forward_children(DUniqueString & self, obj gc) noexcept; + ///@} + }; + + } /*namespace scm*/ +} /*namespace xo*/ + +/* end */ \ No newline at end of file diff --git a/xo-expression2/include/xo/expression2/expression2_register_facets.hpp b/xo-expression2/include/xo/expression2/expression2_register_facets.hpp new file mode 100644 index 00000000..95feeea5 --- /dev/null +++ b/xo-expression2/include/xo/expression2/expression2_register_facets.hpp @@ -0,0 +1,17 @@ +/** @file expression2_register_facets.hpp + * + * @author Roland Conybeare, Jan 2026 + **/ + +#pragma once + +#include + +namespace xo { + namespace scm { + /** Register expression2 (facet,impl) combinations with FacetRegistry **/ + bool expression2_register_facets(); + } +} + +/* end expression2_register_facets.hpp */ diff --git a/xo-expression2/include/xo/expression2/expression2_register_types.hpp b/xo-expression2/include/xo/expression2/expression2_register_types.hpp new file mode 100644 index 00000000..6c7cc959 --- /dev/null +++ b/xo-expression2/include/xo/expression2/expression2_register_types.hpp @@ -0,0 +1,17 @@ +/** @file expression2_register_types.hpp + * + * @author Roland Conybeare, Dec 2025 + **/ + +#pragma once + +#include + +namespace xo { + namespace scm { + /** Register expression2 (facet,impl) combinations with FacetRegistry **/ + bool expression2_register_types(obj gc); + } +} + +/* end expression2_register_types.hpp */ diff --git a/xo-expression2/src/expression2/IGCObject_DUniqueString.cpp b/xo-expression2/src/expression2/IGCObject_DUniqueString.cpp new file mode 100644 index 00000000..b13b3f79 --- /dev/null +++ b/xo-expression2/src/expression2/IGCObject_DUniqueString.cpp @@ -0,0 +1,39 @@ +/** @file IGCObject_DUniqueString.cpp + * + * Generated automagically from ingredients: + * 1. code generator: + * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * arguments: + * --input [idl/IGCObject_DUniqueString.json5] + * 2. jinja2 template for abstract facet .hpp file: + * [iface_facet_any.hpp.j2] + * 3. idl for facet methods + * [idl/IGCObject_DUniqueString.json5] +**/ + +#include "detail/IGCObject_DUniqueString.hpp" + +namespace xo { + namespace scm { + auto + IGCObject_DUniqueString::shallow_size(const DUniqueString & self) noexcept -> size_type + { + return self.shallow_size(); + } + + auto + IGCObject_DUniqueString::shallow_copy(const DUniqueString & self, obj mm) noexcept -> Opaque + { + return self.shallow_copy(mm); + } + + auto + IGCObject_DUniqueString::forward_children(DUniqueString & self, obj gc) noexcept -> size_type + { + return self.forward_children(gc); + } + + } /*namespace scm*/ +} /*namespace xo*/ + +/* end IGCObject_DUniqueString.cpp */ \ No newline at end of file diff --git a/xo-expression2/src/expression2/expression2_register_facets.cpp b/xo-expression2/src/expression2/expression2_register_facets.cpp index 49edb80c..56ac85ae 100644 --- a/xo-expression2/src/expression2/expression2_register_facets.cpp +++ b/xo-expression2/src/expression2/expression2_register_facets.cpp @@ -1,11 +1,31 @@ /** @file expression2_register_facets.cpp -* + * * @author Roland Conybeare, Jan 2026 **/ +#include "expression2_register_facets.hpp" + +#include + +#include +#include +#include + namespace xo { + using xo::mm::AGCObject; + using xo::facet::FacetRegistry; + namespace scm { - } -} /*namesapce xo*/ + bool + expression2_register_facets() + { + scope log(XO_DEBUG(true)); + + FacetRegistry::register_impl(); + + return true; + } + } /*namespace scm*/ +} /*namespace xo*/ /* end expression2_register_facets.cpp */ diff --git a/xo-expression2/src/expression2/expression2_register_types.cpp b/xo-expression2/src/expression2/expression2_register_types.cpp new file mode 100644 index 00000000..2b8aadcf --- /dev/null +++ b/xo-expression2/src/expression2/expression2_register_types.cpp @@ -0,0 +1,37 @@ +/** @file expression2_register_types.cpp + * + * @author Roland Conybeare, Jan 2026 + **/ + +#include "expression2_register_types.hpp" + +#include "detail/IGCObject_DUniqueString.hpp" + +//#include "detail/IPrintable_DUniqueString.hpp" + +//#include +#include + +namespace xo { + using xo::mm::ACollector; + using xo::mm::AGCObject; + using xo::facet::impl_for; + using xo::facet::typeseq; + using xo::scope; + + namespace scm { + bool + expression2_register_types(obj gc) + { + scope log(XO_DEBUG(true)); + + bool ok = true; + + ok &= gc.install_type(impl_for()); + + return ok; + } + } +} /*namespace xo*/ + +/* end expression2_register_types.cpp */