# | Line 1 | Line 1 | |
---|---|---|
1 | < | #ifndef _CONSTRAINT_ITERATOR_H_ |
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 |
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; |
13 | > | virtual bool isEnd() = 0; |
14 | ||
15 | < | virtual Item* currentItem() =0; |
15 | > | virtual Item* currentItem() =0; |
16 | ||
17 | protected: | |
18 | IteratorBase() {}; | |
# | Line 22 | Line 22 | 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 | < | } |
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 | < | Item* currentItem(){ |
33 | < | return listIter ==container.end() ? NULL : *vectorIter; |
34 | < | } |
32 | > | vectorIter = listIter->begin(); |
33 | > | } |
34 | > | |
35 | > | virtual void next(){ |
36 | > | ++vectorIter; |
37 | > | if (vectorIter == listIter->end()){ |
38 | ||
39 | < | private: |
40 | < | list<vector<Item*> >& container; |
41 | < | |
42 | < | list<vector<Item*> >::iterator listIter; |
43 | < | vector<Item*>::iterator vectorIter; |
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 | + | typename list<vector<Item*> >::iterator listIter; |
60 | + | typename vector<Item*>::iterator vectorIter; |
61 | }; | |
62 | ||
63 | typedef ConstraintIterator<ConstraintPair> ConstraintPairIterator; |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |