From 88cf3aba0d4a66fd2f49a0b9666bb4d4cd96f700 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Thu, 15 Jan 2026 14:15:24 -0500 Subject: [PATCH] xo-object2: + ISequence_DArray + codegen --- xo-object2/CMakeLists.txt | 12 ++++ xo-object2/idl/ISequence_DArray.json5 | 12 ++++ .../xo/object2/array/ISequence_DArray.hpp | 64 +++++++++++++++++++ xo-object2/src/object2/CMakeLists.txt | 1 + xo-object2/src/object2/ISequence_DArray.cpp | 40 ++++++++++++ .../src/object2/object2_register_facets.cpp | 9 +++ 6 files changed, 138 insertions(+) create mode 100644 xo-object2/idl/ISequence_DArray.json5 create mode 100644 xo-object2/include/xo/object2/array/ISequence_DArray.hpp create mode 100644 xo-object2/src/object2/ISequence_DArray.cpp diff --git a/xo-object2/CMakeLists.txt b/xo-object2/CMakeLists.txt index 961c965a..529b7372 100644 --- a/xo-object2/CMakeLists.txt +++ b/xo-object2/CMakeLists.txt @@ -136,6 +136,18 @@ xo_add_genfacetimpl( OUTPUT_CPP_DIR src/object2 ) +# note: manual target; generated code committed to git +xo_add_genfacetimpl( + TARGET xo-object2-facetimpl-sequence-array + FACET_PKG xo_object2 + FACET Sequence + REPR Array + INPUT idl/ISequence_DArray.json5 + OUTPUT_HPP_DIR include/xo/object2 + OUTPUT_IMPL_SUBDIR array + OUTPUT_CPP_DIR src/object2 +) + # ---------------------------------------------------------------- # must complete definition of expression lib before configuring examples diff --git a/xo-object2/idl/ISequence_DArray.json5 b/xo-object2/idl/ISequence_DArray.json5 new file mode 100644 index 00000000..198410da --- /dev/null +++ b/xo-object2/idl/ISequence_DArray.json5 @@ -0,0 +1,12 @@ +{ + mode: "implementation", + includes: [ ], + local_types: [ ], + namespace1: "xo", + namespace2: "scm", + facet_idl: "idl/Sequence.json5", + brief: "provide ASequence interface for DArray state", + using_doxygen: true, + repr: "DArray", + doc: [ "implement ASequence for DArray" ], +} diff --git a/xo-object2/include/xo/object2/array/ISequence_DArray.hpp b/xo-object2/include/xo/object2/array/ISequence_DArray.hpp new file mode 100644 index 00000000..27f47db3 --- /dev/null +++ b/xo-object2/include/xo/object2/array/ISequence_DArray.hpp @@ -0,0 +1,64 @@ +/** @file ISequence_DArray.hpp + * + * Generated automagically from ingredients: + * 1. code generator: + * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * arguments: + * --input [idl/ISequence_DArray.json5] + * 2. jinja2 template for abstract facet .hpp file: + * [iface_facet_repr.hpp.j2] + * 3. idl for facet methods + * [idl/ISequence_DArray.json5] + **/ + +#pragma once + +#include "Sequence.hpp" +#include "DArray.hpp" + +namespace xo { namespace scm { class ISequence_DArray; } } + +namespace xo { + namespace facet { + template <> + struct FacetImplementation + { + using ImplType = xo::scm::ISequence_Xfer + ; + }; + } +} + +namespace xo { + namespace scm { + /** @class ISequence_DArray + **/ + class ISequence_DArray { + public: + /** @defgroup scm-sequence-darray-type-traits **/ + ///@{ + using size_type = xo::scm::ASequence::size_type; + using AGCObject = xo::scm::ASequence::AGCObject; + using Copaque = xo::scm::ASequence::Copaque; + using Opaque = xo::scm::ASequence::Opaque; + ///@} + /** @defgroup scm-sequence-darray-methods **/ + ///@{ + // const methods + /** true iff sequence is empty **/ + static bool is_empty(const DArray & self) noexcept; + /** true iff sequence is finite **/ + static bool is_finite(const DArray & self) noexcept; + /** return element @p index of this sequence **/ + static obj at(const DArray & self, size_type index); + + // non-const methods + ///@} + }; + + } /*namespace scm*/ +} /*namespace xo*/ + +/* end */ \ No newline at end of file diff --git a/xo-object2/src/object2/CMakeLists.txt b/xo-object2/src/object2/CMakeLists.txt index 6e3ba706..4c8645fe 100644 --- a/xo-object2/src/object2/CMakeLists.txt +++ b/xo-object2/src/object2/CMakeLists.txt @@ -7,6 +7,7 @@ set(SELF_SRCS IGCObject_DList.cpp IGCObject_DString.cpp ISequence_Any.cpp + ISequence_DArray.cpp ISequence_DList.cpp IPrintable_DList.cpp IPrintable_DFloat.cpp diff --git a/xo-object2/src/object2/ISequence_DArray.cpp b/xo-object2/src/object2/ISequence_DArray.cpp new file mode 100644 index 00000000..40ffe36a --- /dev/null +++ b/xo-object2/src/object2/ISequence_DArray.cpp @@ -0,0 +1,40 @@ +/** @file ISequence_DArray.cpp + * + * Generated automagically from ingredients: + * 1. code generator: + * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * arguments: + * --input [idl/ISequence_DArray.json5] + * 2. jinja2 template for abstract facet .hpp file: + * [iface_facet_any.hpp.j2] + * 3. idl for facet methods + * [idl/ISequence_DArray.json5] +**/ + +#include "array/ISequence_DArray.hpp" + +namespace xo { + namespace scm { + auto + ISequence_DArray::is_empty(const DArray & self) noexcept -> bool + { + return self.is_empty(); + } + + auto + ISequence_DArray::is_finite(const DArray & self) noexcept -> bool + { + return self.is_finite(); + } + + auto + ISequence_DArray::at(const DArray & self, size_type index) -> obj + { + return self.at(index); + } + + + } /*namespace scm*/ +} /*namespace xo*/ + +/* end ISequence_DArray.cpp */ \ No newline at end of file diff --git a/xo-object2/src/object2/object2_register_facets.cpp b/xo-object2/src/object2/object2_register_facets.cpp index 8dcb2c11..94cd7492 100644 --- a/xo-object2/src/object2/object2_register_facets.cpp +++ b/xo-object2/src/object2/object2_register_facets.cpp @@ -15,6 +15,9 @@ #include #include +#include +#include + #include #include #include @@ -27,6 +30,7 @@ namespace xo { using xo::scm::DList; using xo::scm::DFloat; using xo::scm::DString; + using xo::scm::DArray; using xo::facet::FacetRegistry; using xo::facet::typeseq; @@ -38,6 +42,7 @@ namespace xo { FacetRegistry::register_impl(); FacetRegistry::register_impl(); + FacetRegistry::register_impl(); FacetRegistry::register_impl(); FacetRegistry::register_impl(); @@ -48,14 +53,18 @@ namespace xo { FacetRegistry::register_impl(); FacetRegistry::register_impl(); + FacetRegistry::register_impl(); + log && log(xtag("DList.tseq", typeseq::id())); log && log(xtag("DFloat.tseq", typeseq::id())); log && log(xtag("DInteger.tseq", typeseq::id())); log && log(xtag("DString.tseq", typeseq::id())); + log && log(xtag("DArray.tseq", typeseq::id())); log && log(xtag("AAllocator.tseq", typeseq::id())); log && log(xtag("APrintable.tseq", typeseq::id())); log && log(xtag("AGCObject.tseq", typeseq::id())); + log && log(xtag("ASequence.tseq", typeseq::id())); return true; }