diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-12-22 15:15:38 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2017-12-29 13:05:57 +0100 |
commit | eaf9266473a87a3537266260e49ffaad1c534011 (patch) | |
tree | 2b8dca63b1fea4c63dd1d1ba78d90dbc21744ce2 /eval | |
parent | 91d0b8518a1b9bbff2675d4ff1541e7d35583f9b (diff) |
Avoid all the plt indirections by declaring dll local and using simpler structures.
Conflicts:
eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_ref.h
Diffstat (limited to 'eval')
4 files changed, 20 insertions, 14 deletions
diff --git a/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_builder.h b/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_builder.h index 09286752550..ada8a10e541 100644 --- a/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_builder.h +++ b/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_builder.h @@ -2,9 +2,8 @@ #pragma once -#include <vespa/vespalib/stllike/string.h> -#include <vector> #include "sparse_tensor_address_ref.h" +#include <vespa/vespalib/stllike/string.h> namespace vespalib::tensor { @@ -19,16 +18,22 @@ namespace vespalib::tensor { class SparseTensorAddressBuilder { private: - std::vector<char> _address; + vespalib::Array<char> _address; +protected: void append(vespalib::stringref str) { - const char *cstr = str.c_str(); - _address.insert(_address.end(), cstr, cstr + str.size() + 1); + for (size_t i(0); i < str.size(); i++) { + _address.push_back_fast(str[i]); + } } + void ensure_room(size_t additional) { _address.reserve(_address.size() + additional); } public: SparseTensorAddressBuilder() : _address() {} - void add(vespalib::stringref label) { append(label); } - void addUndefined() { _address.emplace_back('\0'); } + void add(vespalib::stringref label) { + ensure_room(label.size()+1); + append(label); + } + void addUndefined() { _address.push_back('\0'); } void clear() { _address.clear(); } SparseTensorAddressRef getAddressRef() const { return SparseTensorAddressRef(&_address[0], _address.size()); diff --git a/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_combiner.cpp b/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_combiner.cpp index 9693832ea88..e0de63b90d2 100644 --- a/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_combiner.cpp +++ b/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_combiner.cpp @@ -47,15 +47,16 @@ TensorAddressCombiner::combine(SparseTensorAddressRef lhsRef, SparseTensorAddressRef rhsRef) { clear(); + ensure_room(lhsRef.size() + rhsRef.size()); SparseTensorAddressDecoder lhs(lhsRef); SparseTensorAddressDecoder rhs(rhsRef); for (auto op : _ops) { switch (op) { case AddressOp::LHS: - add(lhs.decodeLabel()); + append(lhs.decodeLabel()); break; case AddressOp::RHS: - add(rhs.decodeLabel()); + append(rhs.decodeLabel()); break; case AddressOp::BOTH: auto lhsLabel(lhs.decodeLabel()); @@ -63,7 +64,7 @@ TensorAddressCombiner::combine(SparseTensorAddressRef lhsRef, if (lhsLabel != rhsLabel) { return false; } - add(lhsLabel); + append(lhsLabel); } } return true; diff --git a/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_combiner.h b/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_combiner.h index 8e792cb100a..1a7f2fd8d3c 100644 --- a/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_combiner.h +++ b/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_combiner.h @@ -3,7 +3,8 @@ #pragma once #include "sparse_tensor_address_builder.h" -#include <vespa/eval/tensor/types.h> + +#define VESPA_DLL_LOCAL __attribute__ ((visibility("hidden"))) namespace vespalib::eval { class ValueType; } namespace vespalib::tensor::sparse { @@ -17,12 +18,11 @@ class TensorAddressCombiner : public SparseTensorAddressBuilder enum class AddressOp { LHS, RHS, BOTH }; std::vector<AddressOp> _ops; - public: TensorAddressCombiner(const eval::ValueType &lhs, const eval::ValueType &rhs); ~TensorAddressCombiner(); - bool combine(SparseTensorAddressRef lhsRef, SparseTensorAddressRef rhsRef); + VESPA_DLL_LOCAL bool combine(SparseTensorAddressRef lhsRef, SparseTensorAddressRef rhsRef); size_t numOverlappingDimensions() const; size_t numDimensions() const { return _ops.size(); } }; diff --git a/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_ref.h b/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_ref.h index ad14da4800b..321690085be 100644 --- a/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_ref.h +++ b/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_ref.h @@ -2,8 +2,8 @@ #pragma once -#include <vector> #include <vespa/vespalib/util/stash.h> +#include <cstring> namespace vespalib { |