diff --git a/CMakeLists.txt b/CMakeLists.txt index 961c965..529b737 100644 --- a/CMakeLists.txt +++ b/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/idl/ISequence_DArray.json5 b/idl/ISequence_DArray.json5 new file mode 100644 index 0000000..198410d --- /dev/null +++ b/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/include/xo/object2/array/ISequence_DArray.hpp b/include/xo/object2/array/ISequence_DArray.hpp new file mode 100644 index 0000000..27f47db --- /dev/null +++ b/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/src/object2/CMakeLists.txt b/src/object2/CMakeLists.txt index 6e3ba70..4c8645f 100644 --- a/src/object2/CMakeLists.txt +++ b/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/src/object2/ISequence_DArray.cpp b/src/object2/ISequence_DArray.cpp new file mode 100644 index 0000000..40ffe36 --- /dev/null +++ b/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/src/object2/object2_register_facets.cpp b/src/object2/object2_register_facets.cpp index 8dcb2c1..94cd749 100644 --- a/src/object2/object2_register_facets.cpp +++ b/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; }