summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2020-10-01 14:03:31 +0000
committerArne Juul <arnej@verizonmedia.com>2020-10-02 12:08:37 +0000
commitcd208a0b8939372d7ac3554231f4b94a64ed52bc (patch)
tree97ce62b1b695e32970e947737bd652ef80a28569
parent1a980f57d890cc67a3eb81aa5da92c42751a5201 (diff)
use typify_invoke instead of explicit switch
-rw-r--r--eval/src/vespa/eval/tensor/serialization/sparse_binary_format.cpp27
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