diff --git a/src/language/utils/BuiltinFunctionEmbedder.hpp b/src/language/utils/BuiltinFunctionEmbedder.hpp index 460ec3e866be479633e5bf9a9a416c1f84fc09e6..251c39e6d5eb5dc46423e75dedea28947d1a29be 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)); } }