diff options
author | Arne Juul <arnej@verizonmedia.com> | 2020-09-25 08:49:36 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2020-09-28 12:06:35 +0000 |
commit | 55b186000b19bec24008eefeae9e4c23a476e91e (patch) | |
tree | 9332b0a8b2d16a2282b59e0b08ecd5d2eb5c66fd /eval | |
parent | 4390afc15f1de2600a89ed14cffef1881dbf6e62 (diff) |
add DenseTensorValueBuilder
Diffstat (limited to 'eval')
4 files changed, 61 insertions, 0 deletions
diff --git a/eval/src/vespa/eval/eval/double_value_builder.cpp b/eval/src/vespa/eval/eval/double_value_builder.cpp index b90bf294d9d..299880cd2e2 100644 --- a/eval/src/vespa/eval/eval/double_value_builder.cpp +++ b/eval/src/vespa/eval/eval/double_value_builder.cpp @@ -11,6 +11,7 @@ DoubleValueBuilder::DoubleValueBuilder(const eval::ValueType &type, : _value(0.0) { assert(type.is_double()); + assert(type.cell_type() == ValueType::CellType::DOUBLE); assert(num_mapped_in == 0); assert(subspace_size_in == 1); } diff --git a/eval/src/vespa/eval/tensor/dense/CMakeLists.txt b/eval/src/vespa/eval/tensor/dense/CMakeLists.txt index b4e849a1dde..3a41fed132e 100644 --- a/eval/src/vespa/eval/tensor/dense/CMakeLists.txt +++ b/eval/src/vespa/eval/tensor/dense/CMakeLists.txt @@ -26,6 +26,7 @@ vespa_add_library(eval_tensor_dense OBJECT dense_tensor_modify.cpp dense_tensor_peek_function.cpp dense_tensor_reduce.cpp + dense_tensor_value_builder.cpp dense_tensor_view.cpp dense_xw_product_function.cpp index_lookup_table.cpp diff --git a/eval/src/vespa/eval/tensor/dense/dense_tensor_value_builder.cpp b/eval/src/vespa/eval/tensor/dense/dense_tensor_value_builder.cpp new file mode 100644 index 00000000000..0dea9b5bdfb --- /dev/null +++ b/eval/src/vespa/eval/tensor/dense/dense_tensor_value_builder.cpp @@ -0,0 +1,27 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "dense_tensor_value_builder.h" + +namespace vespalib::tensor { + +template<typename T> +DenseTensorValueBuilder<T>::DenseTensorValueBuilder( + const eval::ValueType &type, + size_t num_mapped_in, + size_t subspace_size_in, + size_t) + : _type(type), + _cells(subspace_size_in) +{ + assert(type.is_dense()); + assert(num_mapped_in == 0); + assert(subspace_size_in == type.dense_subspace_size()); +} + +template<typename T> +DenseTensorValueBuilder<T>::~DenseTensorValueBuilder() = default; + +template class DenseTensorValueBuilder<float>; +template class DenseTensorValueBuilder<double>; + +} diff --git a/eval/src/vespa/eval/tensor/dense/dense_tensor_value_builder.h b/eval/src/vespa/eval/tensor/dense/dense_tensor_value_builder.h new file mode 100644 index 00000000000..374ef3c191d --- /dev/null +++ b/eval/src/vespa/eval/tensor/dense/dense_tensor_value_builder.h @@ -0,0 +1,32 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include "dense_tensor.h" + +namespace vespalib::tensor { + +/** + * A builder for DenseTensor objects + **/ +template<typename T> +class DenseTensorValueBuilder : public eval::ValueBuilder<T> +{ +private: + eval::ValueType _type; + std::vector<T> _cells; +public: + DenseTensorValueBuilder(const eval::ValueType &type, size_t num_mapped_in, + size_t subspace_size_in, size_t expected_subspaces); + ~DenseTensorValueBuilder() override; + ArrayRef<T> + add_subspace(const std::vector<vespalib::stringref> &) override { + return _cells; + } + std::unique_ptr<eval::Value> + build(std::unique_ptr<eval::ValueBuilder<T>>) override { + return std::make_unique<DenseTensor<T>>(std::move(_type), std::move(_cells)); + } +}; + +} // namespace |