summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@oath.com>2018-08-27 12:22:57 +0200
committerHenning Baldersheim <balder@oath.com>2018-08-27 12:22:57 +0200
commit8ee3a24c5a39f5940537968516050702ac45b3eb (patch)
treeda772aa213519d68e9f50a8ba5ab9c0cd5833b4a /searchlib
parent406bb7fca1f90f0ab97f6f6b4752ca3e235c08ce (diff)
Use explicit template instantiation to reduce code bloat
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attribute_operation.cpp22
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attribute_operation.h8
2 files changed, 13 insertions, 17 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_operation.cpp b/searchlib/src/vespa/searchlib/attribute/attribute_operation.cpp
index 0a81c5cb8b9..91d56d78779 100644
--- a/searchlib/src/vespa/searchlib/attribute/attribute_operation.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/attribute_operation.cpp
@@ -320,23 +320,21 @@ Operation::create(BasicType type, V hits) const {
}
+template <typename Hits>
std::unique_ptr<AttributeOperation>
-AttributeOperation::create(BasicType type, const vespalib::string & operation, std::vector<uint32_t> docs) {
+AttributeOperation::create(BasicType type, const vespalib::string & operation, Hits docs) {
Operation op = Operation::create(operation);
- return op.create<std::vector<uint32_t>>(type, std::move(docs));
+ return op.create<Hits>(type, std::move(docs));
}
-std::unique_ptr<AttributeOperation>
-AttributeOperation::create(BasicType type, const vespalib::string & operation, std::vector<Hit> docs) {
- Operation op = Operation::create(operation);
- return op.create<std::vector<Hit>>(type, std::move(docs));
-}
+template std::unique_ptr<AttributeOperation>
+AttributeOperation::create(BasicType, const vespalib::string &, std::vector<uint32_t>);
-std::unique_ptr<AttributeOperation>
-AttributeOperation::create(BasicType type, const vespalib::string & operation, FullResult && docs) {
- Operation op = Operation::create(operation);
- return op.create<FullResult>(type, std::move(docs));
-}
+template std::unique_ptr<AttributeOperation>
+AttributeOperation::create(BasicType, const vespalib::string &, std::vector<Hit>);
+
+template std::unique_ptr<AttributeOperation>
+AttributeOperation::create(BasicType, const vespalib::string &, FullResult);
}
diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_operation.h b/searchlib/src/vespa/searchlib/attribute/attribute_operation.h
index 7a3e22fce27..f872edd712f 100644
--- a/searchlib/src/vespa/searchlib/attribute/attribute_operation.h
+++ b/searchlib/src/vespa/searchlib/attribute/attribute_operation.h
@@ -16,12 +16,10 @@ class AttributeOperation : public IAttributeFunctor {
public:
using Hit = std::pair<uint32_t, double>;
using FullResult = std::pair<std::unique_ptr<search::BitVector>, vespalib::Array<search::RankedHit>>;
+
+ template <typename Hits>
static std::unique_ptr<AttributeOperation>
- create(search::attribute::BasicType type, const vespalib::string & operation, std::vector<uint32_t> docIds);
- static std::unique_ptr<AttributeOperation>
- create(search::attribute::BasicType type, const vespalib::string & operation, std::vector<Hit> hits);
- static std::unique_ptr<AttributeOperation>
- create(search::attribute::BasicType type, const vespalib::string & operation, FullResult && result);
+ create(search::attribute::BasicType type, const vespalib::string & operation, Hits docIds);
};
}