RDKit
Open-source cheminformatics and machine learning.
Loading...
Searching...
No Matches
XOrQuery.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_XORQUERY_H
12#define RD_XORQUERY_H
13
14#include "Query.h"
15
16namespace Queries {
17
18//! a Query implementing XOR: requires exactly one child to be \c true
19template <class MatchFuncArgType, class DataFuncArgType = MatchFuncArgType,
20 bool needsConversion = false>
22 : public Query<MatchFuncArgType, DataFuncArgType, needsConversion> {
23 public:
25 XOrQuery() { this->df_negate = false; }
26
27 bool Match(const DataFuncArgType what) const override {
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()) {
42 res = !res;
43 }
44 return res;
45 }
46
48 const override {
51
52 typename BASE::CHILD_VECT_CI i;
53 for (i = this->beginChildren(); i != this->endChildren(); ++i) {
54 res->addChild(typename BASE::CHILD_TYPE(i->get()->copy()));
55 }
56 res->setNegation(this->getNegation());
57 res->d_description = this->d_description;
58 res->d_queryType = this->d_queryType;
59 return res;
60 }
61};
62} // namespace Queries
63#endif
Base class for all queries.
Definition Query.h:45
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::shared_ptr< Query< MatchFuncArgType, DataFuncArgType, needsConversion > > CHILD_TYPE
Definition Query.h:47
std::string d_description
Definition Query.h:152
a Query implementing XOR: requires exactly one child to be true
Definition XOrQuery.h:22
Query< MatchFuncArgType, DataFuncArgType, needsConversion > BASE
Definition XOrQuery.h:24
bool Match(const DataFuncArgType what) const override
returns whether or not we match the argument
Definition XOrQuery.h:27
Query< MatchFuncArgType, DataFuncArgType, needsConversion > * copy() const override
returns a copy of this Query
Definition XOrQuery.h:47
#define RDKIT_QUERY_EXPORT
Definition export.h:589