diff options
author | Henning Baldersheim <balder@oath.com> | 2018-08-27 12:22:57 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@oath.com> | 2018-08-27 12:22:57 +0200 |
commit | 8ee3a24c5a39f5940537968516050702ac45b3eb (patch) | |
tree | da772aa213519d68e9f50a8ba5ab9c0cd5833b4a /searchlib | |
parent | 406bb7fca1f90f0ab97f6f6b4752ca3e235c08ce (diff) |
Use explicit template instantiation to reduce code bloat
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/src/vespa/searchlib/attribute/attribute_operation.cpp | 22 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/attribute/attribute_operation.h | 8 |
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); }; } |