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 #ifndef __RD_XORQUERY_H__
11 #define __RD_XORQUERY_H__
12 
13 #include "Query.h"
14 
15 namespace Queries{
16 
17  //! a Query implementing XOR: requires exactly one child to be \c true
18  template <class MatchFuncArgType, class DataFuncArgType=MatchFuncArgType,
19  bool needsConversion=false>
20  class XOrQuery : public Query<MatchFuncArgType, DataFuncArgType,needsConversion> {
21 
22  public:
25  this->df_negate = false;
26  };
27 
28  bool Match(const DataFuncArgType what) const {
29  bool res = false;
30  typename BASE::CHILD_VECT_CI it1;
31  for(it1=this->beginChildren();
32  it1!=this->endChildren();
33  ++it1){
34  bool tmp = (*it1)->Match(what);
35  if( tmp ){
36  if( res ){
37  res = false;
38  break;
39  } else{
40  res = true;
41  }
42  }
43  }
44  if( this->getNegation() ) res = !res;
45  return res;
46  };
47 
49  copy( ) const {
52 
53  typename BASE::CHILD_VECT_CI i;
54  for(i=this->beginChildren();
55  i!=this->endChildren();
56  ++i){
57  res->addChild(typename BASE::CHILD_TYPE(i->get()->copy()));
58  }
59  res->setNegation(this->getNegation());
60  res->d_description = this->d_description;
61  return res;
62  };
63  };
64 
65 }
66 #endif
bool getNegation() const
returns whether or not we are negated
Definition: Query.h:60
CHILD_VECT_CI beginChildren() const
returns an iterator for the beginning of our child vector
Definition: Query.h:88
void setNegation(bool what)
sets whether or not we are negated
Definition: Query.h:58
CHILD_VECT_CI endChildren() const
returns an iterator for the end of our child vector
Definition: Query.h:90
boost::shared_ptr< Query< MatchFuncArgType, DataFuncArgType, needsConversion > > CHILD_TYPE
Definition: Query.h:48
Query< MatchFuncArgType, DataFuncArgType, needsConversion > BASE
Definition: XOrQuery.h:23
void addChild(CHILD_TYPE child)
adds a child to our list of children
Definition: Query.h:86
bool df_negate
Definition: Query.h:128
CHILD_VECT::const_iterator CHILD_VECT_CI
Definition: Query.h:51
std::string d_description
Definition: Query.h:123
Base class for all queries.
Definition: Query.h:46
a Query implementing XOR: requires exactly one child to be true
Definition: XOrQuery.h:20
Query< MatchFuncArgType, DataFuncArgType, needsConversion > * copy() const
returns a copy of this Query
Definition: XOrQuery.h:49
bool Match(const DataFuncArgType what) const
returns whether or not we match the argument
Definition: XOrQuery.h:28