Skip to content
Snippets Groups Projects

Feature/builtin functions

2 files
+ 39
12
Compare changes
  • Side-by-side
  • Inline

Files

@@ -182,6 +182,17 @@ class BuiltinFunctionEmbedder<FX(Args...)> : public IBuiltinFunctionEmbedder
(_check_arg<I>(), ...);
}
template <typename ResultT>
PUGS_INLINE DataVariant
_resultToDataVariant(ResultT&& result) const
{
if constexpr (is_data_variant_v<std::decay_t<ResultT>>) {
return std::move(result);
} else {
return EmbeddedData(_createHandler(std::move(result)));
}
}
PUGS_INLINE
AggregateDataVariant
_applyToAggregate(const ArgsTuple& t) const
@@ -190,7 +201,8 @@ class BuiltinFunctionEmbedder<FX(Args...)> : public IBuiltinFunctionEmbedder
std::vector<DataVariant> vector_result;
vector_result.reserve(std::tuple_size_v<decltype(tuple_result)>);
std::apply([&](auto&&... result) { ((vector_result.emplace_back(std::move(result))), ...); }, tuple_result);
std::apply([&](auto&&... result) { ((vector_result.emplace_back(_resultToDataVariant(result))), ...); },
tuple_result);
return vector_result;
}
@@ -303,6 +315,17 @@ class BuiltinFunctionEmbedder<FX(void)> : public IBuiltinFunctionEmbedder
return ast_node_data_type_from<T>;
}
template <typename ResultT>
PUGS_INLINE DataVariant
_resultToDataVariant(ResultT&& result) const
{
if constexpr (is_data_variant_v<std::decay_t<ResultT>>) {
return std::move(result);
} else {
return EmbeddedData(_createHandler(std::move(result)));
}
}
PUGS_INLINE
AggregateDataVariant
_applyToAggregate() const
@@ -311,7 +334,8 @@ class BuiltinFunctionEmbedder<FX(void)> : public IBuiltinFunctionEmbedder
std::vector<DataVariant> vector_result;
vector_result.reserve(std::tuple_size_v<decltype(tuple_result)>);
std::apply([&](auto&&... result) { ((vector_result.emplace_back(std::move(result))), ...); }, tuple_result);
std::apply([&](auto&&... result) { ((vector_result.emplace_back(_resultToDataVariant(result))), ...); },
tuple_result);
return vector_result;
}
Loading