aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/vespa/searchlib/queryeval/children_iterators.h
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2020-06-02 11:46:16 +0000
committerArne Juul <arnej@verizonmedia.com>2020-06-04 10:19:59 +0000
commit67134e619715227e6cbe91f365213487ff1b1f34 (patch)
treec912b02050ed980ea6715a0b171ad61e47e34a89 /searchlib/src/vespa/searchlib/queryeval/children_iterators.h
parentc42ccbb874b581c7394a31dcb6a5e0e715d46e18 (diff)
use vector of UP as MultiSearch::Children
* add helper class for constructing MultiSearch::Children (mostly for unit tests) * rewrite as needed to adapt
Diffstat (limited to 'searchlib/src/vespa/searchlib/queryeval/children_iterators.h')
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/children_iterators.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/searchlib/src/vespa/searchlib/queryeval/children_iterators.h b/searchlib/src/vespa/searchlib/queryeval/children_iterators.h
new file mode 100644
index 00000000000..aa147e0299b
--- /dev/null
+++ b/searchlib/src/vespa/searchlib/queryeval/children_iterators.h
@@ -0,0 +1,39 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include "searchiterator.h"
+
+namespace search::queryeval {
+
+/**
+ * Convenience for constructing MultiSearch::Children
+ * holding them or passing ownership around.
+ **/
+class ChildrenIterators {
+ private:
+ std::vector<SearchIterator::UP> _data;
+ public:
+ ChildrenIterators(std::vector<SearchIterator::UP> data)
+ : _data(std::move(data)) {}
+ ChildrenIterators(ChildrenIterators && other) = default;
+
+ // convenience constructors for unit tests:
+ template <typename... Args>
+ ChildrenIterators(SearchIterator::UP a, Args&&... args) {
+ _data.reserve(1 + sizeof...(Args));
+ _data.push_back(std::move(a));
+ (_data.emplace_back(std::forward<Args>(args)), ...);
+ }
+ template <typename... Args>
+ ChildrenIterators(SearchIterator *a, Args&&... args) {
+ _data.reserve(1 + sizeof...(Args));
+ _data.emplace_back(a);
+ (_data.emplace_back(std::forward<Args>(args)), ...);
+ }
+ operator std::vector<SearchIterator::UP> () && {
+ return std::move(_data);
+ }
+};
+
+} // namespace