/** The descriptor name can be s or smarts and is case independent The operator to return true for a match can be: one or more spaces, =, ==, or nothing if the SMARTS string starts with a letter. To return true for a mismatch the operator is != A space or tab should follow the SMARTS string. **/ bool SmartsFilter::Compare(OBBase* pOb, istream& optionText, bool noEval) { OBMol* pmol = dynamic_cast<OBMol*> (pOb); if(!pmol) return false; string smarts; bool matchornegate = ReadStringFromFilter(optionText, smarts); if(noEval) return false; OBSmartsPattern sp; sp.Init(smarts); bool ret = sp.Match(*pmol,true);//single match if(!matchornegate) ret = !ret; return ret; }
/** The descriptor name can be s or smarts and is case independent The operator to return true for a match can be: one or more spaces, =, ==, or nothing if the SMARTS string starts with a letter. To return true for a mismatch the operator is != A space or tab should follow the SMARTS string. **/ bool SmartsFilter::Compare(OBBase *pOb, istream &optionText, bool noEval, std::string *) { OBMol *pmol = dynamic_cast<OBMol *>(pOb); if (!pmol) return false; string smarts; bool matchornegate = ReadStringFromFilter(optionText, smarts); if (noEval) return false; OBSmartsPattern sp; if (!sp.Init(smarts)) return false; // can't initialize the SMARTS, so fail gracefully bool ret = sp.Match(*pmol, true); // single match if (!matchornegate) ret = !ret; return ret; }