RDKit
Open-source cheminformatics and machine learning.
LessEqualQuery.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_LESSEQUALQUERY_H
12 #define RD_LESSEQUALQUERY_H
13 #include "Query.h"
14 #include "EqualityQuery.h"
15 
16 namespace Queries {
17 //! \brief a Query implementing <= using a particular
18 //! value (and an optional tolerance)
19 template <class MatchFuncArgType, class DataFuncArgType = MatchFuncArgType,
20  bool needsConversion = false>
22  : public EqualityQuery<MatchFuncArgType, DataFuncArgType, needsConversion> {
23  public:
24  LessEqualQuery() { this->d_tol = 0; }
25  //! constructs with our target value
26  explicit LessEqualQuery(DataFuncArgType what) {
27  this->d_val = what;
28  this->d_tol = 0;
29  this->df_negate = false;
30  }
31  //! constructs with our target value and a tolerance
32  LessEqualQuery(DataFuncArgType v, DataFuncArgType t) {
33  this->d_val = v;
34  this->d_tol = t;
35  this->df_negate = false;
36  }
37 
38  bool Match(const DataFuncArgType what) const override {
39  MatchFuncArgType mfArg =
40  this->TypeConvert(what, Int2Type<needsConversion>());
41  if (queryCmp(this->d_val, mfArg, this->d_tol) <= 0) {
42  if (this->getNegation())
43  return false;
44  else
45  return true;
46  } else {
47  if (this->getNegation())
48  return true;
49  else
50  return false;
51  }
52  }
53 
55  const override {
57  new LessEqualQuery<MatchFuncArgType, DataFuncArgType,
58  needsConversion>();
59  res->setNegation(this->getNegation());
60  res->setVal(this->d_val);
61  res->setTol(this->d_tol);
62  res->setDataFunc(this->d_dataFunc);
63  res->d_description = this->d_description;
64  res->d_queryType = this->d_queryType;
65  return res;
66  }
67 
68  std::string getFullDescription() const override {
69  std::ostringstream res;
70  res << this->getDescription();
71  res << " " << this->d_val;
72  if (this->getNegation())
73  res << " ! <= ";
74  else
75  res << " <= ";
76  return res.str();
77  }
78 };
79 } // namespace Queries
80 #endif
a Query implementing ==: arguments must match a particular value (within an optional tolerance)
Definition: EqualityQuery.h:24
void setTol(MatchFuncArgType what)
sets our tolerance
Definition: EqualityQuery.h:47
void setVal(MatchFuncArgType what)
sets our target value
Definition: EqualityQuery.h:42
class to allow integer values to pick templates
Definition: Query.h:26
a Query implementing <= using a particular value (and an optional tolerance)
std::string getFullDescription() const override
returns a fuller text description
bool Match(const DataFuncArgType what) const override
returns whether or not we match the argument
LessEqualQuery(DataFuncArgType what)
constructs with our target value
LessEqualQuery(DataFuncArgType v, DataFuncArgType t)
constructs with our target value and a tolerance
Query< MatchFuncArgType, DataFuncArgType, needsConversion > * copy() const override
returns a copy of this Query
Base class for all queries.
Definition: Query.h:45
std::string d_queryType
Definition: Query.h:150
void setDataFunc(MatchFuncArgType(*what)(DataFuncArgType))
sets our data function
Definition: Query.h:93
void setNegation(bool what)
sets whether or not we are negated
Definition: Query.h:59
std::string d_description
Definition: Query.h:149
#define RDKIT_QUERY_EXPORT
Definition: export.h:549
int queryCmp(const T1 v1, const T2 v2, const T1 tol)
Definition: Query.h:194