aboutsummaryrefslogtreecommitdiffstats
path: root/eval/src/vespa/eval/eval/compile_tensor_function.h
diff options
context:
space:
mode:
Diffstat (limited to 'eval/src/vespa/eval/eval/compile_tensor_function.h')
-rw-r--r--eval/src/vespa/eval/eval/compile_tensor_function.h28
1 files changed, 24 insertions, 4 deletions
diff --git a/eval/src/vespa/eval/eval/compile_tensor_function.h b/eval/src/vespa/eval/eval/compile_tensor_function.h
index f6edfe49052..dcc2ee58da8 100644
--- a/eval/src/vespa/eval/eval/compile_tensor_function.h
+++ b/eval/src/vespa/eval/eval/compile_tensor_function.h
@@ -27,18 +27,38 @@ struct CTFMetaData {
struct Step {
vespalib::string class_name;
vespalib::string symbol_name;
+ std::unique_ptr<CTFMetaData> nested;
Step(vespalib::string &&class_name_in,
vespalib::string &&symbol_name_in) noexcept
- : class_name(std::move(class_name_in)),
- symbol_name(std::move(symbol_name_in))
+ : class_name(std::move(class_name_in)),
+ symbol_name(std::move(symbol_name_in)),
+ nested()
{
}
};
std::vector<Step> steps;
+ CTFMetaData() noexcept = default;
+ CTFMetaData(const CTFMetaData &) = delete;
+ CTFMetaData(CTFMetaData &&) noexcept = default;
+ CTFMetaData &operator=(const CTFMetaData &) = delete;
+ CTFMetaData &operator=(CTFMetaData &&) noexcept = default;
+ std::unique_ptr<CTFMetaData> extract() {
+ return steps.empty()
+ ? std::unique_ptr<CTFMetaData>(nullptr)
+ : std::make_unique<CTFMetaData>(std::move(*this));
+ }
~CTFMetaData();
};
-std::vector<InterpretedFunction::Instruction> compile_tensor_function(const ValueBuilderFactory &factory, const TensorFunction &function, Stash &stash,
- CTFMetaData *meta);
+struct CTFContext {
+ const ValueBuilderFactory &factory;
+ Stash &stash;
+ CTFMetaData *meta;
+ constexpr CTFContext(const CTFContext &) noexcept = default;
+ constexpr CTFContext(const ValueBuilderFactory &factory_in, Stash &stash_in, CTFMetaData *meta_in) noexcept
+ : factory(factory_in), stash(stash_in), meta(meta_in) {}
+};
+
+std::vector<InterpretedFunction::Instruction> compile_tensor_function(const TensorFunction &function, const CTFContext &ctx);
} // namespace vespalib::eval