From da393b38a099067bb5172115cb5df151b0d3b75a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com> Date: Wed, 15 Mar 2023 08:19:12 +0100 Subject: [PATCH] Fix Embedded data tuples as return type --- .../utils/BuiltinFunctionEmbedder.hpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/language/utils/BuiltinFunctionEmbedder.hpp b/src/language/utils/BuiltinFunctionEmbedder.hpp index 460ec3e86..251c39e6d 100644 --- a/src/language/utils/BuiltinFunctionEmbedder.hpp +++ b/src/language/utils/BuiltinFunctionEmbedder.hpp @@ -114,10 +114,21 @@ class BuiltinFunctionEmbedderBase<FX(Args...)> : public IBuiltinFunctionEmbedder } template <typename T> - PUGS_INLINE std::shared_ptr<IDataHandler> + PUGS_INLINE EmbeddedData _createHandler(std::shared_ptr<T> data) const { - return std::make_shared<DataHandler<T>>(data); + return EmbeddedData{std::make_shared<DataHandler<T>>(data)}; + } + + template <typename T> + PUGS_INLINE std::vector<EmbeddedData> + _createHandler(std::vector<std::shared_ptr<T>> data) const + { + std::vector<EmbeddedData> embedded(data.size()); + for (size_t i_data = 0; i_data < data.size(); ++i_data) { + embedded[i_data] = EmbeddedData(std::make_shared<DataHandler<T>>(data[i_data])); + } + return embedded; } template <typename ResultT> @@ -127,7 +138,7 @@ class BuiltinFunctionEmbedderBase<FX(Args...)> : public IBuiltinFunctionEmbedder if constexpr (is_data_variant_v<std::decay_t<ResultT>>) { return std::move(result); } else { - return EmbeddedData(_createHandler(std::move(result))); + return _createHandler(std::move(result)); } } @@ -327,7 +338,7 @@ class BuiltinFunctionEmbedder<FX(Args...)> : public BuiltinFunctionEmbedderBase< std::apply(m_f, t); return {}; } else { - return EmbeddedData(this->template _createHandler(std::apply(m_f, t))); + return this->template _createHandler(std::apply(m_f, t)); } } -- GitLab