ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/ConstraintIterator.hpp
Revision: 1232
Committed: Thu Jun 3 21:51:55 2004 UTC (20 years, 1 month ago) by tim
File size: 1699 byte(s)
Log Message:
new implementation of constraint

File Contents

# Content
1 #ifndef _CONSTRAINT_ITERATOR_H_
2 #define _CONSTRAINT_ITERATOR_H_
3 #include <list>
4 #include <vector>
5
6 using namespace std;
7 //abstract iterator class
8 template<class Item> class IteratorBase{
9 public:
10 virtual ~IteratorBase(){}
11 virtual void first() = 0;
12 virtual void next() = 0;
13 virtual bool isEnd() = 0;
14
15 virtual Item* currentItem() =0;
16
17 protected:
18 IteratorBase() {};
19 };
20
21 template <class Item> class ConstraintIterator{
22 public:
23 ConstraintIterator(list<vector<Item*> >& aContainer) : container(aContainer){}
24
25 virtual void first(){
26 listIter = container.begin();
27 //the construction of the container will guarantee every vector in list will contain at least one element
28 //so we don't need to worry about the empty vector problem
29 //while (listIter->empty())
30 // ++listIter;
31
32 vectorIter = listIter->begin();
33 }
34
35 virtual void next(){
36 ++vectorIter;
37 if (vectorIter == listIter->end()){
38
39 //do{
40 //++listIter;
41 //}while(listIter->empty())
42 ++listIter;
43 if (listIter != container.end())
44 vectorIter = listIter->begin();
45 }
46 }
47
48 virtual bool isEnd(){
49 return listIter == container.end();
50 }
51
52 Item* currentItem(){
53 return listIter ==container.end() ? NULL : *vectorIter;
54 }
55
56 private:
57 list<vector<Item*> >& container;
58
59 list<vector<Item*> >::iterator listIter;
60 vector<Item*>::iterator vectorIter;
61
62 };
63
64 typedef ConstraintIterator<ConstraintPair> ConstraintPairIterator;
65 typedef ConstraintIterator<ConstraintElement> ConstraintElementIterator;
66
67
68 #endif //end ifndef _CONSTRAINT_ITERATOR_H_

Properties

Name Value
svn:executable *