summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2020-10-01 13:08:28 +0000
committerArne Juul <arnej@verizonmedia.com>2020-10-01 13:08:28 +0000
commitbbbd46939473092b1adaec45326ed7ce1aa1827f (patch)
treef81bb8b57e9734d64ad10006b0f2225d76f33f7f
parentdb19918b01b4f5c759884eb099e5e4e2aef8e554 (diff)
change add_subspace to take ConstArrayRef also
-rw-r--r--eval/src/tests/eval/simple_value/simple_value_test.cpp3
-rw-r--r--eval/src/tests/tensor/packed_mappings/packed_mixed_test.cpp3
-rw-r--r--eval/src/vespa/eval/eval/double_value_builder.h2
-rw-r--r--eval/src/vespa/eval/eval/simple_value.cpp4
-rw-r--r--eval/src/vespa/eval/eval/simple_value.h4
-rw-r--r--eval/src/vespa/eval/eval/value.h2
-rw-r--r--eval/src/vespa/eval/tensor/dense/dense_tensor_value_builder.h2
-rw-r--r--eval/src/vespa/eval/tensor/mixed/packed_mappings_builder.cpp9
-rw-r--r--eval/src/vespa/eval/tensor/mixed/packed_mappings_builder.h5
-rw-r--r--eval/src/vespa/eval/tensor/mixed/packed_mixed_tensor_builder.cpp3
-rw-r--r--eval/src/vespa/eval/tensor/mixed/packed_mixed_tensor_builder.h2
-rw-r--r--eval/src/vespa/eval/tensor/sparse/sparse_tensor_value_builder.cpp2
-rw-r--r--eval/src/vespa/eval/tensor/sparse/sparse_tensor_value_builder.h2
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;
};