diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-03-30 08:48:44 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2017-03-30 08:48:44 +0200 |
commit | 461775d1a94d6da99a0cf8f921c2d997a00c13ee (patch) | |
tree | fc1fb764f90fe7e920549d3a3ee619855c518fd7 /searchlib | |
parent | 0d6e8390e09b0b0a6109bd72d3f9d26759eda380 (diff) |
Ensure me list all members in initializerlist.
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/src/vespa/searchlib/expression/expressiontree.cpp | 47 |
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); |