-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlist_iter.h
71 lines (59 loc) · 963 Bytes
/
list_iter.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#pragma once
#include "list_node.h"
#include <stdlib.h>
/*iterator wraps up a node pointer for outside use*/
/*declare friends*/
template <class D> class List;
template <class D>
class ListIter
{
friend class List<D>;
public:
/*construct empty*/
ListIter()
:
pnode(NULL)
{
}
/*construct*/
ListIter(ListNode<D>* pnod)
:
pnode(pnod)
{
}
/*better not call this with NULL iterator*/
D& operator *()
{
return *(pnode->pdata);
}
D* operator ->()
{
return pnode->pdata;
}
ListIter& operator ++()
{
if(pnode != NULL)
{
pnode = pnode->pnext;
}
return *this;
}
ListIter& operator --()
{
if(pnode != NULL)
{
pnode = pnode->pprev;
}
return *this;
}
friend bool operator ==(ListIter const& iter1, ListIter const& iter2)
{
return iter1.pnode == iter2.pnode;
}
friend bool operator !=(ListIter const& iter1, ListIter const& iter2)
{
return iter1.pnode != iter2.pnode;
}
private:
ListNode<D>* pnode;
};