Files
rdkit/Code/GraphMol/QueryAtom.cpp
Greg Landrum 75a79b6327 initial import
2006-05-06 22:20:08 +00:00

68 lines
1.6 KiB
C++
Executable File

// $Id: QueryAtom.cpp 4961 2006-02-18 00:14:47Z glandrum $
//
// Copyright (C) 2001-2006 Greg Landrum and Rational Discovery LLC
//
// @@ All Rights Reserved @@
//
#include <GraphMol/QueryAtom.h>
#include <GraphMol/QueryOps.h>
namespace RDKit{
QueryAtom::~QueryAtom(){
if( dp_query ){
delete dp_query;
dp_query=0;
}
};
Atom *QueryAtom::copy() const {
QueryAtom *res = new QueryAtom(*this);
return static_cast<Atom *>(res);
}
void QueryAtom::expandQuery(QUERYATOM_QUERY *what,
Queries::CompositeQueryType how,
bool maintainOrder) {
QUERYATOM_QUERY *origQ = dp_query;
std::string descrip;
switch(how) {
case Queries::COMPOSITE_AND:
dp_query = new ATOM_AND_QUERY;
descrip = "AtomAnd";
break;
case Queries::COMPOSITE_OR:
dp_query = new ATOM_OR_QUERY;
descrip = "AtomOr";
break;
case Queries::COMPOSITE_XOR:
dp_query = new ATOM_XOR_QUERY;
descrip = "AtomXor";
break;
default:
UNDER_CONSTRUCTION("unrecognized combination query");
}
dp_query->setDescription(descrip);
if(maintainOrder){
dp_query->addChild(QUERYATOM_QUERY::CHILD_TYPE(origQ));
dp_query->addChild(QUERYATOM_QUERY::CHILD_TYPE(what));
} else {
dp_query->addChild(QUERYATOM_QUERY::CHILD_TYPE(what));
dp_query->addChild(QUERYATOM_QUERY::CHILD_TYPE(origQ));
}
}
// FIX: the const crap here is all mucked up.
bool QueryAtom::Match(const Atom::ATOM_SPTR what) const {
return Match(what.get());
}
bool QueryAtom::Match(Atom const *what) const {
PRECONDITION(dp_query,"no query set");
return dp_query->Match(what);
}
}; // end o' namespace