Loading...
Searching...
No Matches
XOrQuery.h
Go to the documentation of this file.
//
// Copyright (c) 2003-2020 Greg Landrum and Rational Discovery LLC
//
// @@ All Rights Reserved @@
// This file is part of the RDKit.
// The contents are covered by the terms of the BSD license
// which is included in the file license.txt, found at the root
// of the RDKit source tree.
//
#include <RDGeneral/export.h>
#ifndef RD_XORQUERY_H
#define RD_XORQUERY_H
#include "Query.h"
namespace Queries {
//! a Query implementing XOR: requires exactly one child to be \c true
template <class MatchFuncArgType, class DataFuncArgType = MatchFuncArgType,
bool needsConversion = false>
class RDKIT_QUERY_EXPORT XOrQuery
: public Query<MatchFuncArgType, DataFuncArgType, needsConversion> {
public:
typedef Query<MatchFuncArgType, DataFuncArgType, needsConversion> BASE;
XOrQuery() { this->df_negate = false; }
bool Match(const DataFuncArgType what) const override {
bool res = false;
typename BASE::CHILD_VECT_CI it1;
for (it1 = this->beginChildren(); it1 != this->endChildren(); ++it1) {
bool tmp = (*it1)->Match(what);
if (tmp) {
if (res) {
res = false;
break;
} else {
res = true;
}
}
}
if (this->getNegation()) {
res = !res;
}
return res;
}
Query<MatchFuncArgType, DataFuncArgType, needsConversion> *copy()
const override {
XOrQuery<MatchFuncArgType, DataFuncArgType, needsConversion> *res =
new XOrQuery<MatchFuncArgType, DataFuncArgType, needsConversion>();
typename BASE::CHILD_VECT_CI i;
for (i = this->beginChildren(); i != this->endChildren(); ++i) {
res->addChild(typename BASE::CHILD_TYPE(i->get()->copy()));
}
res->setNegation(this->getNegation());
res->d_description = this->d_description;
res->d_queryType = this->d_queryType;
return res;
}
};
} // namespace Queries
#endif
Query.h
Queries::Query::addChild
void addChild(CHILD_TYPE child)
adds a child to our list of children
Definition Query.h:108
Queries::Query::d_queryType
std::string d_queryType
Definition Query.h:158
Queries::Query::endChildren
CHILD_VECT_CI endChildren() const
returns an iterator for the end of our child vector
Definition Query.h:112
Queries::Query::beginChildren
CHILD_VECT_CI beginChildren() const
returns an iterator for the beginning of our child vector
Definition Query.h:110
Queries::Query::getNegation
bool getNegation() const
returns whether or not we are negated
Definition Query.h:64
Queries::Query::setNegation
void setNegation(bool what)
sets whether or not we are negated
Definition Query.h:62
Queries::Query::CHILD_VECT_CI
typename CHILD_VECT::const_iterator CHILD_VECT_CI
Definition Query.h:54
Queries::Query< MatchFuncArgType, MatchFuncArgType, false >::Query
Query()
Definition Query.h:58
Queries::Query::df_negate
bool df_negate
Definition Query.h:160
Queries::Query::CHILD_TYPE
std::shared_ptr< Query< MatchFuncArgType, DataFuncArgType, needsConversion > > CHILD_TYPE
Definition Query.h:50
Queries::Query::d_description
std::string d_description
Definition Query.h:157
Queries::XOrQuery< int, const ROMol &, true >::BASE
Query< int, const ROMol &, needsConversion > BASE
Definition XOrQuery.h:24
Queries::XOrQuery::XOrQuery
XOrQuery()
Definition XOrQuery.h:25
Queries::XOrQuery::Match
bool Match(const DataFuncArgType what) const override
Definition XOrQuery.h:27
Queries::XOrQuery::copy
Query< MatchFuncArgType, DataFuncArgType, needsConversion > * copy() const override
returns a copy of this Query
Definition XOrQuery.h:47
export.h
RDKIT_QUERY_EXPORT
#define RDKIT_QUERY_EXPORT
Definition export.h:669
Queries
Definition AndQuery.h:16