diff options
author | Arne Juul <arnej@verizonmedia.com> | 2020-10-01 13:08:28 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2020-10-01 13:08:28 +0000 |
commit | bbbd46939473092b1adaec45326ed7ce1aa1827f (patch) | |
tree | f81bb8b57e9734d64ad10006b0f2225d76f33f7f | |
parent | db19918b01b4f5c759884eb099e5e4e2aef8e554 (diff) |
change add_subspace to take ConstArrayRef also
13 files changed, 23 insertions, 20 deletions
diff --git a/eval/src/tests/eval/simple_value/simple_value_test.cpp b/eval/src/tests/eval/simple_value/simple_value_test.cpp index 3d824913252..e989b567e20 100644 --- a/eval/src/tests/eval/simple_value/simple_value_test.cpp +++ b/eval/src/tests/eval/simple_value/simple_value_test.cpp @@ -94,7 +94,8 @@ TEST(SimpleValueTest, simple_value_can_be_built_and_inspected) { float seq = 0.0; for (vespalib::string x: {"a", "b", "c"}) { for (vespalib::string y: {"aa", "bb"}) { - auto subspace = builder->add_subspace({x, y}); + std::vector<vespalib::stringref> addr = {x, y}; + auto subspace = builder->add_subspace(addr); EXPECT_EQ(subspace.size(), 2); subspace[0] = seq + 1.0; subspace[1] = seq + 5.0; diff --git a/eval/src/tests/tensor/packed_mappings/packed_mixed_test.cpp b/eval/src/tests/tensor/packed_mappings/packed_mixed_test.cpp index ba2e01980d9..e8c57384335 100644 --- a/eval/src/tests/tensor/packed_mappings/packed_mixed_test.cpp +++ b/eval/src/tests/tensor/packed_mappings/packed_mixed_test.cpp @@ -43,7 +43,8 @@ TEST(PackedMixedTest, packed_mixed_tensors_can_be_built_and_inspected) { float seq = 0.0; for (vespalib::string x: {"a", "b", "c"}) { for (vespalib::string y: {"aa", "bb"}) { - auto subspace = builder->add_subspace({x, y}); + std::vector<vespalib::stringref> addr = {x, y}; + auto subspace = builder->add_subspace(addr); EXPECT_EQ(subspace.size(), 2); subspace[0] = seq + 1.0; subspace[1] = seq + 5.0; diff --git a/eval/src/vespa/eval/eval/double_value_builder.h b/eval/src/vespa/eval/eval/double_value_builder.h index ba85d5838ad..4d5aa258b5f 100644 --- a/eval/src/vespa/eval/eval/double_value_builder.h +++ b/eval/src/vespa/eval/eval/double_value_builder.h @@ -17,7 +17,7 @@ public: DoubleValueBuilder() : _value(0.0) {} ~DoubleValueBuilder() override; ArrayRef<double> - add_subspace(const std::vector<vespalib::stringref> &) override { + add_subspace(ConstArrayRef<vespalib::stringref>) override { return ArrayRef<double>(&_value, 1); } std::unique_ptr<Value> diff --git a/eval/src/vespa/eval/eval/simple_value.cpp b/eval/src/vespa/eval/eval/simple_value.cpp index 889cbfe81e1..304244532d8 100644 --- a/eval/src/vespa/eval/eval/simple_value.cpp +++ b/eval/src/vespa/eval/eval/simple_value.cpp @@ -102,7 +102,7 @@ public: //----------------------------------------------------------------------------- void -SimpleValue::add_mapping(const std::vector<vespalib::stringref> &addr) +SimpleValue::add_mapping(ConstArrayRef<vespalib::stringref> addr) { size_t id = _index.size(); std::vector<vespalib::string> my_addr; @@ -145,7 +145,7 @@ SimpleValueT<T>::~SimpleValueT() = default; template <typename T> ArrayRef<T> -SimpleValueT<T>::add_subspace(const std::vector<vespalib::stringref> &addr) +SimpleValueT<T>::add_subspace(ConstArrayRef<vespalib::stringref> addr) { size_t old_size = _cells.size(); assert(old_size == (index().size() * subspace_size())); diff --git a/eval/src/vespa/eval/eval/simple_value.h b/eval/src/vespa/eval/eval/simple_value.h index c7a55c27ebf..8fef9ea1dc8 100644 --- a/eval/src/vespa/eval/eval/simple_value.h +++ b/eval/src/vespa/eval/eval/simple_value.h @@ -30,7 +30,7 @@ private: std::map<Addr,size_t> _index; protected: size_t subspace_size() const { return _subspace_size; } - void add_mapping(const std::vector<vespalib::stringref> &addr); + void add_mapping(ConstArrayRef<vespalib::stringref> addr); public: SimpleValue(const ValueType &type, size_t num_mapped_dims_in, size_t subspace_size_in); ~SimpleValue() override; @@ -52,7 +52,7 @@ public: SimpleValueT(const ValueType &type, size_t num_mapped_dims_in, size_t subspace_size_in); ~SimpleValueT() override; TypedCells cells() const override { return TypedCells(ConstArrayRef<T>(_cells)); } - ArrayRef<T> add_subspace(const std::vector<vespalib::stringref> &addr) override; + ArrayRef<T> add_subspace(ConstArrayRef<vespalib::stringref> addr) override; std::unique_ptr<Value> build(std::unique_ptr<ValueBuilder<T>> self) override { ValueBuilder<T>* me = this; assert(me == self.get()); diff --git a/eval/src/vespa/eval/eval/value.h b/eval/src/vespa/eval/eval/value.h index ebcf960814f..35a9b347e8b 100644 --- a/eval/src/vespa/eval/eval/value.h +++ b/eval/src/vespa/eval/eval/value.h @@ -135,7 +135,7 @@ struct ValueBuilder : ValueBuilderBase { // returned subspaces will be invalidated when new subspaces are // added. Also note that adding the same subspace multiple times // is not allowed. - virtual ArrayRef<T> add_subspace(const std::vector<vespalib::stringref> &addr) = 0; + virtual ArrayRef<T> add_subspace(ConstArrayRef<vespalib::stringref> addr) = 0; // Given the ownership of the builder itself, produce the newly // created value. This means that builders can only be used once, 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 index c420be2c582..49a660553ee 100644 --- a/eval/src/vespa/eval/tensor/dense/dense_tensor_value_builder.h +++ b/eval/src/vespa/eval/tensor/dense/dense_tensor_value_builder.h @@ -19,7 +19,7 @@ public: DenseTensorValueBuilder(const eval::ValueType &type, size_t subspace_size_in); ~DenseTensorValueBuilder() override; ArrayRef<T> - add_subspace(const std::vector<vespalib::stringref> &) override { + add_subspace(ConstArrayRef<vespalib::stringref>) override { return _cells; } std::unique_ptr<eval::Value> diff --git a/eval/src/vespa/eval/tensor/mixed/packed_mappings_builder.cpp b/eval/src/vespa/eval/tensor/mixed/packed_mappings_builder.cpp index fdfe5957a3f..1b3349324ba 100644 --- a/eval/src/vespa/eval/tensor/mixed/packed_mappings_builder.cpp +++ b/eval/src/vespa/eval/tensor/mixed/packed_mappings_builder.cpp @@ -8,14 +8,15 @@ namespace vespalib::eval::packed_mixed_tensor { PackedMappingsBuilder::~PackedMappingsBuilder() = default; uint32_t -PackedMappingsBuilder::add_mapping_for(SparseAddress address) +PackedMappingsBuilder::add_mapping_for(ConstArrayRef<vespalib::stringref> address_in) { - assert(address.size() == _num_dims); - for (auto & label_value : address) { + SparseAddress address; + for (auto & label_value : address_in) { // store label string in our own set: auto iter = _labels.insert(label_value).first; - label_value = *iter; + address.push_back(*iter); } + assert(address.size() == _num_dims); uint32_t next_index = _mappings.size(); auto iter = _mappings.emplace(address, next_index).first; return iter->second; diff --git a/eval/src/vespa/eval/tensor/mixed/packed_mappings_builder.h b/eval/src/vespa/eval/tensor/mixed/packed_mappings_builder.h index bf2ae434275..01f16a8b8e1 100644 --- a/eval/src/vespa/eval/tensor/mixed/packed_mappings_builder.h +++ b/eval/src/vespa/eval/tensor/mixed/packed_mappings_builder.h @@ -20,8 +20,6 @@ namespace vespalib::eval::packed_mixed_tensor { **/ class PackedMappingsBuilder { public: - using SparseAddress = std::vector<vespalib::stringref>; - PackedMappingsBuilder(uint32_t num_mapped_dims) : _num_dims(num_mapped_dims), _labels(), @@ -33,7 +31,7 @@ public: // returns a new index for new addresses // may be called multiple times with same address, // will then return the same index for that address. - uint32_t add_mapping_for(SparseAddress address); + uint32_t add_mapping_for(ConstArrayRef<vespalib::stringref> address); // how much extra memory is needed by target_memory // not including sizeof(PackedMappings) @@ -56,6 +54,7 @@ public: private: uint32_t _num_dims; std::set<vespalib::string> _labels; + using SparseAddress = std::vector<vespalib::stringref>; using IndexMap = std::map<SparseAddress, uint32_t>; IndexMap _mappings; }; diff --git a/eval/src/vespa/eval/tensor/mixed/packed_mixed_tensor_builder.cpp b/eval/src/vespa/eval/tensor/mixed/packed_mixed_tensor_builder.cpp index 75b307b1aa7..e419673ee22 100644 --- a/eval/src/vespa/eval/tensor/mixed/packed_mixed_tensor_builder.cpp +++ b/eval/src/vespa/eval/tensor/mixed/packed_mixed_tensor_builder.cpp @@ -6,8 +6,9 @@ namespace vespalib::eval::packed_mixed_tensor { template <typename T> ArrayRef<T> -PackedMixedTensorBuilder<T>::add_subspace(const std::vector<vespalib::stringref> &addr) +PackedMixedTensorBuilder<T>::add_subspace(ConstArrayRef<vespalib::stringref> addr_in) { + std::vector<vespalib::stringref> addr(addr_in.begin(), addr_in.end()); uint32_t idx = _mappings_builder.add_mapping_for(addr); size_t offset = idx * _subspace_size; assert(offset <= _cells.size()); diff --git a/eval/src/vespa/eval/tensor/mixed/packed_mixed_tensor_builder.h b/eval/src/vespa/eval/tensor/mixed/packed_mixed_tensor_builder.h index c99762b7e8b..a683b82dd24 100644 --- a/eval/src/vespa/eval/tensor/mixed/packed_mixed_tensor_builder.h +++ b/eval/src/vespa/eval/tensor/mixed/packed_mixed_tensor_builder.h @@ -33,7 +33,7 @@ public: ~PackedMixedTensorBuilder() override = default; - ArrayRef<T> add_subspace(const std::vector<vespalib::stringref> &addr) override; + ArrayRef<T> add_subspace(ConstArrayRef<vespalib::stringref> addr) override; std::unique_ptr<Value> build(std::unique_ptr<ValueBuilder<T>> self) override; }; diff --git a/eval/src/vespa/eval/tensor/sparse/sparse_tensor_value_builder.cpp b/eval/src/vespa/eval/tensor/sparse/sparse_tensor_value_builder.cpp index 7c584246d83..2152a2c3b6e 100644 --- a/eval/src/vespa/eval/tensor/sparse/sparse_tensor_value_builder.cpp +++ b/eval/src/vespa/eval/tensor/sparse/sparse_tensor_value_builder.cpp @@ -7,7 +7,7 @@ namespace vespalib::tensor { template <typename T> ArrayRef<T> -SparseTensorValueBuilder<T>::add_subspace(const std::vector<vespalib::stringref> &addr) +SparseTensorValueBuilder<T>::add_subspace(ConstArrayRef<vespalib::stringref> addr) { uint32_t idx = _cells.size(); _addr_builder.clear(); diff --git a/eval/src/vespa/eval/tensor/sparse/sparse_tensor_value_builder.h b/eval/src/vespa/eval/tensor/sparse/sparse_tensor_value_builder.h index db3ff314ed2..a48af150b15 100644 --- a/eval/src/vespa/eval/tensor/sparse/sparse_tensor_value_builder.h +++ b/eval/src/vespa/eval/tensor/sparse/sparse_tensor_value_builder.h @@ -34,7 +34,7 @@ public: ~SparseTensorValueBuilder() override = default; - ArrayRef<T> add_subspace(const std::vector<vespalib::stringref> &addr) override; + ArrayRef<T> add_subspace(ConstArrayRef<vespalib::stringref> addr) override; std::unique_ptr<eval::Value> build(std::unique_ptr<eval::ValueBuilder<T>> self) override; }; |