RDKit
Open-source cheminformatics and machine learning.
XOrQuery.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2003-2006 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_XORQUERY_H__
12 #define __RD_XORQUERY_H__
13 
14 #include "Query.h"
15 
16 namespace Queries {
17 
18 //! a Query implementing XOR: requires exactly one child to be \c true
19 template <class MatchFuncArgType, class DataFuncArgType = MatchFuncArgType,
20  bool needsConversion = false>
21 class XOrQuery
22  : public Query<MatchFuncArgType, DataFuncArgType, needsConversion> {
23  public:
25  XOrQuery() { this->df_negate = false; };
26 
27  bool Match(const DataFuncArgType what) const {
28  bool res = false;
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  if (res) {
34  res = false;
35  break;
36  } else {
37  res = true;
38  }
39  }
40  }
41  if (this->getNegation()) res = !res;
42  return res;
43  };
44 
48 
49  typename BASE::CHILD_VECT_CI i;
50  for (i = this->beginChildren(); i != this->endChildren(); ++i) {
51  res->addChild(typename BASE::CHILD_TYPE(i->get()->copy()));
52  }
53  res->setNegation(this->getNegation());
54  res->d_description = this->d_description;
55  return res;
56  };
57 };
58 } // namespace Queries
59 #endif
Queries::Query::CHILD_VECT_CI
CHILD_VECT::const_iterator CHILD_VECT_CI
Definition: Query.h:53
Queries::Query< MatchFuncArgType, MatchFuncArgType, false >::df_negate
bool df_negate
Definition: Query.h:149
Queries::Query< MatchFuncArgType, MatchFuncArgType, false >::setNegation
void setNegation(bool what)
sets whether or not we are negated
Definition: Query.h:63
Queries::Query::CHILD_TYPE
boost::shared_ptr< Query< MatchFuncArgType, DataFuncArgType, needsConversion > > CHILD_TYPE
Definition: Query.h:50
Query.h
Queries
Definition: AndQuery.h:16
Queries::XOrQuery
a Query implementing XOR: requires exactly one child to be true
Definition: XOrQuery.h:21
Queries::XOrQuery::Match
bool Match(const DataFuncArgType what) const
Definition: XOrQuery.h:27
Queries::XOrQuery::XOrQuery
XOrQuery()
Definition: XOrQuery.h:25
Queries::XOrQuery::BASE
Query< MatchFuncArgType, DataFuncArgType, needsConversion > BASE
Definition: XOrQuery.h:24
Queries::Query< MatchFuncArgType, MatchFuncArgType, false >::d_description
std::string d_description
Definition: Query.h:147
Queries::Query< MatchFuncArgType, MatchFuncArgType, false >::addChild
void addChild(CHILD_TYPE child)
adds a child to our list of children
Definition: Query.h:101
Queries::Query< MatchFuncArgType, MatchFuncArgType, false >::getNegation
bool getNegation() const
returns whether or not we are negated
Definition: Query.h:65
Queries::Query< MatchFuncArgType, MatchFuncArgType, false >::endChildren
CHILD_VECT_CI endChildren() const
returns an iterator for the end of our child vector
Definition: Query.h:105
Queries::Query< MatchFuncArgType, MatchFuncArgType, false >::beginChildren
CHILD_VECT_CI beginChildren() const
returns an iterator for the beginning of our child vector
Definition: Query.h:103
Queries::Query
Base class for all queries.
Definition: Query.h:46
Queries::XOrQuery::copy
Query< MatchFuncArgType, DataFuncArgType, needsConversion > * copy() const
Definition: XOrQuery.h:45
export.h