diff options
author | Arne Juul <arnej@verizonmedia.com> | 2020-10-01 14:03:31 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2020-10-02 12:08:37 +0000 |
commit | cd208a0b8939372d7ac3554231f4b94a64ed52bc (patch) | |
tree | 97ce62b1b695e32970e947737bd652ef80a28569 | |
parent | 1a980f57d890cc67a3eb81aa5da92c42751a5201 (diff) |
use typify_invoke instead of explicit switch
-rw-r--r-- | eval/src/vespa/eval/tensor/serialization/sparse_binary_format.cpp | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/eval/src/vespa/eval/tensor/serialization/sparse_binary_format.cpp b/eval/src/vespa/eval/tensor/serialization/sparse_binary_format.cpp index c246ccf16e1..a0b691872a0 100644 --- a/eval/src/vespa/eval/tensor/serialization/sparse_binary_format.cpp +++ b/eval/src/vespa/eval/tensor/serialization/sparse_binary_format.cpp @@ -131,6 +131,18 @@ SparseBinaryFormat::serialize(nbostream &stream, const Tensor &tensor) stream.write(cells.peek(), cells.size()); } +struct BuildSparseCells { + template<typename CT> + static auto invoke(ValueType type, nbostream &stream, + size_t dimensionsSize, + size_t cellsSize) + { + DirectSparseTensorBuilder<CT> builder(std::move(type)); + decodeCells<CT>(stream, dimensionsSize, cellsSize, builder); + return builder.build(); + } +}; + std::unique_ptr<Tensor> SparseBinaryFormat::deserialize(nbostream &stream, CellType cell_type) { @@ -143,19 +155,8 @@ SparseBinaryFormat::deserialize(nbostream &stream, CellType cell_type) } size_t cellsSize = stream.getInt1_4Bytes(); ValueType type = ValueType::tensor_type(std::move(dimensions), cell_type); - switch (cell_type) { - case CellType::DOUBLE: { - DirectSparseTensorBuilder<double> builder(type); - builder.reserve(cellsSize); - decodeCells<double>(stream, dimensionsSize, cellsSize, builder); - return builder.build(); } - case CellType::FLOAT: { - DirectSparseTensorBuilder<float> builder(type); - builder.reserve(cellsSize); - decodeCells<float>(stream, dimensionsSize, cellsSize, builder); - return builder.build(); } - } - abort(); + return typify_invoke<1,eval::TypifyCellType,BuildSparseCells>(cell_type, + std::move(type), stream, dimensionsSize, cellsSize); } } // namespace |