summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-03-30 08:48:44 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2017-03-30 08:48:44 +0200
commit461775d1a94d6da99a0cf8f921c2d997a00c13ee (patch)
treefc1fb764f90fe7e920549d3a3ee619855c518fd7 /searchlib
parent0d6e8390e09b0b0a6109bd72d3f9d26759eda380 (diff)
Ensure me list all members in initializerlist.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/expression/expressiontree.cpp47
1 files changed, 30 insertions, 17 deletions
diff --git a/searchlib/src/vespa/searchlib/expression/expressiontree.cpp b/searchlib/src/vespa/searchlib/expression/expressiontree.cpp
index 4b0c31c267e..e91a597bc29 100644
--- a/searchlib/src/vespa/searchlib/expression/expressiontree.cpp
+++ b/searchlib/src/vespa/searchlib/expression/expressiontree.cpp
@@ -15,9 +15,9 @@ using vespalib::Deserializer;
IMPLEMENT_EXPRESSIONNODE(ExpressionTree, ExpressionNode);
-void ExpressionTree::Configure::execute(vespalib::Identifiable &obj)
-{
- ExpressionTree & e(static_cast<ExpressionTree &>(obj));
+void
+ExpressionTree::Configure::execute(vespalib::Identifiable &obj) {
+ ExpressionTree &e(static_cast<ExpressionTree &>(obj));
if (e.getRoot()) {
e.getRoot()->prepare(false);
}
@@ -35,7 +35,7 @@ ExpressionTree::ExpressionTree() :
prepare(false);
}
-ExpressionTree::ExpressionTree(const ExpressionNode & root) :
+ExpressionTree::ExpressionTree(const ExpressionNode &root) :
_root(root.clone()),
_attributeNodes(),
_documentAccessorNodes(),
@@ -46,21 +46,24 @@ ExpressionTree::ExpressionTree(const ExpressionNode & root) :
prepare(false);
}
+namespace {
+
template<typename NODE>
-class Gather : public vespalib::ObjectOperation, public vespalib::ObjectPredicate
-{
+class Gather : public vespalib::ObjectOperation, public vespalib::ObjectPredicate {
std::vector<NODE *> &_list;
public:
Gather(std::vector<NODE *> &list) : _list(list) { _list.clear(); }
- void from(ExpressionNode & root) {
+ void from(ExpressionNode &root) {
root.select(*this, *this);
}
+
private:
- virtual void execute(vespalib::Identifiable &obj) {
+ void execute(vespalib::Identifiable &obj) override {
_list.push_back(&static_cast<NODE &>(obj));
}
- virtual bool check(const vespalib::Identifiable &obj) const {
+
+ bool check(const vespalib::Identifiable &obj) const override {
return obj.inherits(NODE::classId);
}
};
@@ -71,8 +74,10 @@ gather(std::vector<NODE *> &list) {
return Gather<NODE>(list);
}
+}
-void ExpressionTree::onPrepare(bool preserveAccurateTypes)
+void
+ExpressionTree::onPrepare(bool preserveAccurateTypes)
{
(void) preserveAccurateTypes;
if (_root.get() != NULL) {
@@ -85,6 +90,7 @@ void ExpressionTree::onPrepare(bool preserveAccurateTypes)
}
ExpressionTree::ExpressionTree(ExpressionNode::UP root) :
+ ExpressionTree(),
_root(root.release()),
_attributeNodes(),
_documentAccessorNodes(),
@@ -101,7 +107,8 @@ ExpressionTree::ExpressionTree(const ExpressionTree & rhs) :
_attributeNodes(),
_documentAccessorNodes(),
_relevanceNodes(),
- _interpolatedLookupNodes()
+ _interpolatedLookupNodes(),
+ _arrayAtLookupNodes()
{
prepare(false);
}
@@ -124,7 +131,8 @@ ExpressionTree::operator = (ExpressionNode::UP rhs)
return *this;
}
-void ExpressionTree::swap(ExpressionTree & e)
+void
+ExpressionTree::swap(ExpressionTree & e)
{
std::swap(_root, e._root);
_attributeNodes.swap(e._attributeNodes);
@@ -138,7 +146,8 @@ ExpressionTree::~ExpressionTree()
{
}
-bool ExpressionTree::execute(const document::Document & doc, HitRank rank) const
+bool
+ExpressionTree::execute(const document::Document & doc, HitRank rank) const
{
for(DocumentAccessorNodeList::const_iterator it(_documentAccessorNodes.begin()), mt(_documentAccessorNodes.end()); it != mt; it++) {
(*it)->setDoc(doc);
@@ -172,7 +181,8 @@ struct RankSetter {
};
-bool ExpressionTree::execute(DocId docId, HitRank rank) const
+bool
+ExpressionTree::execute(DocId docId, HitRank rank) const
{
DocIdSetter setDocId(docId);
RankSetter setHitRank(rank);
@@ -190,7 +200,8 @@ ExpressionTree::visitMembers(vespalib::ObjectVisitor &visitor) const
visit(visitor, "root", _root.get());
}
-void ExpressionTree::selectMembers(const vespalib::ObjectPredicate & predicate, vespalib::ObjectOperation & operation)
+void
+ExpressionTree::selectMembers(const vespalib::ObjectPredicate & predicate, vespalib::ObjectOperation & operation)
{
if (_root.get()) {
_root->select(predicate, operation);
@@ -198,12 +209,14 @@ void ExpressionTree::selectMembers(const vespalib::ObjectPredicate & predicate,
}
-Serializer & operator << (Serializer & os, const ExpressionTree & et)
+Serializer &
+operator << (Serializer & os, const ExpressionTree & et)
{
return os << et._root;
}
-Deserializer & operator >> (Deserializer & is, ExpressionTree & et)
+Deserializer &
+operator >> (Deserializer & is, ExpressionTree & et)
{
is >> et._root;
et.prepare(false);