Chemical Data Processing Library C++ API - Version 1.4.0
MatchConstraintList.hpp
Go to the documentation of this file.
1 /*
2  * MatchConstraintList.hpp
3  *
4  * This file is part of the Chemical Data Processing Toolkit
5  *
6  * Copyright (C) 2003 Thomas Seidel <thomas.seidel@univie.ac.at>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with this library; see the file COPYING. If not, write to
20  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21  * Boston, MA 02111-1307, USA.
22  */
23 
29 #ifndef CDPL_CHEM_MATCHCONSTRAINTLIST_HPP
30 #define CDPL_CHEM_MATCHCONSTRAINTLIST_HPP
31 
32 #include <utility>
33 #include <memory>
34 
35 #include "CDPL/Chem/APIPrefix.hpp"
36 #include "CDPL/Base/Any.hpp"
37 #include "CDPL/Util/Array.hpp"
38 
39 
40 namespace CDPL
41 {
42 
43  namespace Chem
44  {
45 
57  {
58 
59  public:
64  enum Relation
65  {
66 
70  ANY,
71 
77 
83 
89 
95 
101 
106  NOT_EQUAL
107  };
108 
115  MatchConstraint(unsigned int id, Relation relation):
116  id(id), relation(relation) {}
117 
125  template <typename T>
126  MatchConstraint(unsigned int id, Relation rel, T&& val):
127  id(id), relation(rel), value(std::forward<T>(val))
128  {}
129 
134  unsigned int getID() const;
135 
140  void setID(unsigned int id);
141 
147 
153 
158  const Base::Any& getValue() const;
159 
166  template <typename T>
167  const T& getValue() const
168  {
169  return value.getData<T>();
170  }
171 
176  template <typename T>
177  void setValue(T&& val)
178  {
179  value = std::forward<T>(val);
180  }
181 
186  bool hasValue() const;
187 
188  private:
189  unsigned int id;
190  Relation relation;
191  Base::Any value;
192  };
193 
204  class CDPL_CHEM_API MatchConstraintList : public Util::Array<MatchConstraint>
205  {
206 
207  public:
211  typedef std::shared_ptr<MatchConstraintList> SharedPointer;
212 
216  enum Type
217  {
218 
223 
228 
233 
237  NOT_OR_LIST
238  };
239 
244  MatchConstraintList(Type type = AND_LIST):
245  type(type) {}
246 
251  Type getType() const;
252 
257  void setType(Type type);
258 
260 
267  void addElement(unsigned int id, MatchConstraint::Relation rel);
268 
276  template <typename T>
277  void addElement(unsigned int id, MatchConstraint::Relation rel, T&& val)
278  {
279  addElement(MatchConstraint(id, rel, std::forward<T>(val)));
280  }
281 
282  private:
283  const char* getClassName() const;
284 
285  Type type;
286  };
287  } // namespace Chem
288 } // namespace CDPL
289 
290 #endif // CDPL_CHEM_MATCHCONSTRAINTLIST_HPP
Definition of class CDPL::Base::Any.
Definition of class CDPL::Util::Array.
Definition of the preprocessor macro CDPL_CHEM_API.
#define CDPL_CHEM_API
Tells the compiler/linker which classes, functions and variables are part of the library API.
Safe, type checked container for arbitrary data of variable type.
Definition: Any.hpp:60
List of Chem::MatchConstraint instances combined with a logical Type (AND_LIST, NOT_AND_LIST,...
Definition: MatchConstraintList.hpp:205
void addElement(unsigned int id, MatchConstraint::Relation rel, T &&val)
Appends a new Chem::MatchConstraint element with the given identifier, relational constraint on the v...
Definition: MatchConstraintList.hpp:277
void addElement(unsigned int id, MatchConstraint::Relation rel)
Appends a new Chem::MatchConstraint element with the given identifier and relational constraint on th...
std::shared_ptr< MatchConstraintList > SharedPointer
A reference-counted smart pointer [SHPTR] for dynamically allocated MatchConstraintList instances.
Definition: MatchConstraintList.hpp:211
void setType(Type type)
Sets the logical type of the match constraint list.
Type getType() const
Returns the logical type of the match constraint list.
Type
Defines constants that describe the logical type of the match constraint list.
Definition: MatchConstraintList.hpp:217
@ NOT_AND_LIST
Specifies that at least one of the match constraints must not be fulfilled.
Definition: MatchConstraintList.hpp:227
@ AND_LIST
Specifies that all of the match constraints must be fulfilled.
Definition: MatchConstraintList.hpp:222
@ OR_LIST
Specifies that at least one of the match constraints must be fulfilled.
Definition: MatchConstraintList.hpp:232
MatchConstraintList(Type type=AND_LIST)
Constructs a MatchConstraintList object with the specified logical type.
Definition: MatchConstraintList.hpp:244
Describes a single attribute-comparison constraint between a query and a target object used by molecu...
Definition: MatchConstraintList.hpp:57
const Base::Any & getValue() const
Returns the value of the query attribute.
void setRelation(Relation rel)
Sets the relational constraint that must be fulfilled by the values of matching query/target attribut...
bool hasValue() const
Tells wether a query attribute value has been set.
void setValue(T &&val)
Sets the value of the query attribute.
Definition: MatchConstraintList.hpp:177
MatchConstraint(unsigned int id, Relation relation)
Constructs a MatchConstraint object with the given identifier and relational constraint on the values...
Definition: MatchConstraintList.hpp:115
void setID(unsigned int id)
Sets the match constraint identifier to id.
Relation getRelation() const
Returns the relational constraint that must be fulfilled by the values of matching query/target attri...
unsigned int getID() const
Returns the identifier of the match constraint.
MatchConstraint(unsigned int id, Relation rel, T &&val)
Constructs a MatchConstraint object with the given identifier, relational constraint on the values of...
Definition: MatchConstraintList.hpp:126
const T & getValue() const
Returns a const reference to the value of the query attribute of type T.
Definition: MatchConstraintList.hpp:167
Relation
Defines constants for the specification of relational constraints on the values of query/target attri...
Definition: MatchConstraintList.hpp:65
@ LESS_OR_EQUAL
Specifies that the value of the query attribute must be less than or equal to the corresponding value...
Definition: MatchConstraintList.hpp:94
@ EQUAL
Specifies that the value of the query attribute must be equal to the corresponding value of the targe...
Definition: MatchConstraintList.hpp:82
@ GREATER_OR_EQUAL
Specifies that the value of the query attribute must be greater than or equal to the corresponding va...
Definition: MatchConstraintList.hpp:100
@ LESS
Specifies that the value of the query attribute must be less than the corresponding value of the targ...
Definition: MatchConstraintList.hpp:76
@ GREATER
Specifies that the value of the query attribute must be greater than the corresponding value of the t...
Definition: MatchConstraintList.hpp:88
@ ANY
Specifies that the relation between the query and target attribute value is not constrained.
Definition: MatchConstraintList.hpp:70
Dynamic array class providing amortized constant time access to arbitrary elements.
Definition: Array.hpp:92
constexpr unsigned int T
Specifies Hydrogen (Tritium).
Definition: AtomType.hpp:67
The namespace of the Chemical Data Processing Library.