RDKit
Open-source cheminformatics and machine learning.
AndQuery.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2003-2020 Greg Landrum and Rational Discovery LLC
3 //
4 // @@ All Rights Reserved @@
5 // This file is part of the RDKit.
6 // The contents are covered by the terms of the BSD license
7 // which is included in the file license.txt, found at the root
8 // of the RDKit source tree.
9 //
10 #include <RDGeneral/export.h>
11 #ifndef RD_ANDQUERY_H
12 #define RD_ANDQUERY_H
13 
14 #include "Query.h"
15 
16 namespace Queries {
17 
18 //! a Query implementing AND: requires all children to be \c true
19 template <class MatchFuncArgType, class DataFuncArgType = MatchFuncArgType,
20  bool needsConversion = false>
22  : public Query<MatchFuncArgType, DataFuncArgType, needsConversion> {
23  public:
25  AndQuery() { this->df_negate = false; }
26 
27  bool Match(const DataFuncArgType what) const override {
28  bool res = true;
29  typename BASE::CHILD_VECT_CI it1;
30  for (it1 = this->beginChildren(); it1 != this->endChildren(); ++it1) {
31  bool tmp = (*it1)->Match(what);
32  if (!tmp) {
33  res = false;
34  break;
35  }
36  }
37  if (this->getNegation()) {
38  res = !res;
39  }
40  return res;
41  }
43  const override {
46  typename BASE::CHILD_VECT_CI i;
47  for (i = this->beginChildren(); i != this->endChildren(); ++i) {
48  res->addChild(typename BASE::CHILD_TYPE(i->get()->copy()));
49  }
50  res->setNegation(this->getNegation());
51  res->d_description = this->d_description;
52  res->d_queryType = this->d_queryType;
53  return res;
54  }
55 };
56 } // namespace Queries
57 #endif
a Query implementing AND: requires all children to be true
Definition: AndQuery.h:22
bool Match(const DataFuncArgType what) const override
Definition: AndQuery.h:27
Query< MatchFuncArgType, DataFuncArgType, needsConversion > BASE
Definition: AndQuery.h:24
Query< MatchFuncArgType, DataFuncArgType, needsConversion > * copy() const override
returns a copy of this Query
Definition: AndQuery.h:42
Base class for all queries.
Definition: Query.h:45
std::shared_ptr< Query< MatchFuncArgType, DataFuncArgType, needsConversion > > CHILD_TYPE
Definition: Query.h:48
void addChild(CHILD_TYPE child)
adds a child to our list of children
Definition: Query.h:103
std::string d_queryType
Definition: Query.h:153
void setNegation(bool what)
sets whether or not we are negated
Definition: Query.h:59
typename CHILD_VECT::const_iterator CHILD_VECT_CI
Definition: Query.h:51
std::string d_description
Definition: Query.h:152
#define RDKIT_QUERY_EXPORT
Definition: export.h:565