1 |
tim |
1232 |
#ifndef _CONSTRAINTMANAGER_H_ |
2 |
|
|
#define _CONSTRAINTMANAGER_H_ |
3 |
|
|
|
4 |
|
|
#include <list> |
5 |
|
|
#include <vector> |
6 |
|
|
|
7 |
|
|
#include "Molecule.hpp" |
8 |
|
|
|
9 |
|
|
#include "ConstraintIterator.hpp" |
10 |
|
|
|
11 |
|
|
using namespace std; |
12 |
|
|
|
13 |
|
|
class ConstraintAlgorithm; |
14 |
|
|
class SimInfo; |
15 |
|
|
|
16 |
|
|
struct ListIteratorInfo{ |
17 |
|
|
list<vector<ConstraintElement*> >::iterator firstElement; |
18 |
|
|
list<vector<ConstraintPair*> >::iterator firstPair; |
19 |
|
|
}; |
20 |
|
|
|
21 |
|
|
typedef map<Molecule*, ListIteratorInfo> MolIterInfoMap; |
22 |
|
|
|
23 |
|
|
//Constraint Manager |
24 |
|
|
class ConstraintManager{ |
25 |
|
|
public: |
26 |
|
|
//constructor |
27 |
|
|
ConstraintManager(SimInfo* info); |
28 |
|
|
|
29 |
|
|
//virtual destructor |
30 |
gezelter |
1252 |
virtual ~ConstraintManager(); |
31 |
tim |
1232 |
|
32 |
|
|
//add all constraints of the molecule into constraint manager |
33 |
|
|
void addConstraints(Molecule* mol); |
34 |
|
|
|
35 |
|
|
//remove all constraints of the molecule from constraint manager |
36 |
|
|
void removeConstraints(Molecule* mol); |
37 |
|
|
|
38 |
|
|
//creat an iterator of constraint element |
39 |
tim |
1452 |
virtual ConstraintElementIterator* createElementIterator(); |
40 |
tim |
1232 |
|
41 |
|
|
//creat an iterator of constraint pair |
42 |
tim |
1452 |
virtual ConstraintPairIterator* createPairIterator(); |
43 |
tim |
1232 |
|
44 |
|
|
protected: |
45 |
|
|
|
46 |
|
|
//since we don't need to provide random access for constraint pair and constraint object |
47 |
|
|
//we can use list<vector> which will make addConstraints() and removeConstraints fast |
48 |
|
|
//Using Iterator Pattern, the data structure is encapsulated inside the iterator. |
49 |
|
|
//Therefore,the navigation is still easy |
50 |
|
|
|
51 |
|
|
list<vector<ConstraintElement*> > consElements; |
52 |
|
|
list<vector<ConstraintPair*> > consPairs; |
53 |
|
|
MolIterInfoMap iterInfoMap; |
54 |
|
|
}; |
55 |
|
|
|
56 |
|
|
#endif //endif _CONSTRAINTMANAGER_H_ |