// // Copyright (c) 2003-2006 Greg Landrum and Rational Discovery LLC // // @@ All Rights Reserved @@ // #ifndef __RD_SETQUERY_H__ #define __RD_SETQUERY_H__ #include #include "Query.h" namespace Queries{ //! \brief a Query implementing a set: arguments must //! one of a set of values //! //! There is also an optional tolerance to be used in comparisons template class SetQuery : public Query { public: SetQuery() : Query() {}; //! insert an entry into our \c set void insert(const MatchFuncArgType what){ //std::cout << "SET QUERY INSERT: " << what << std::endl; if(d_set.find(what) == this->d_set.end()) this->d_set.insert(what); } //! clears our \c set void clear(){ //std::cout << "SET QUERY CLEAR " << std::endl; this->d_set.clear(); } bool Match(const DataFuncArgType what) const { MatchFuncArgType mfArg = TypeConvert(what,Int2Type()); //std::cerr << "SET QUERY SEARCH: " << mfArg << ": " << (d_set.find(mfArg)==d_set.end()) << std::endl; return ( this->d_set.find(mfArg) != this->d_set.end() ) ^ this->getNegation(); }; Query * copy( ) const { SetQuery *res = new SetQuery(); res->setDataFunc(this->d_dataFunc); typename std::set::const_iterator i; for(i=this->d_set.begin(); i!=this->d_set.end(); ++i){ res->insert(*i); } res->setNegation(this->getNegation()); res->d_description = this->d_description; return res; }; protected: std::set d_set; }; } #endif