39 |
struct iterator *next; |
struct iterator *next; |
40 |
LIST *list; |
LIST *list; |
41 |
struct list_entry *cur; |
struct list_entry *cur; |
42 |
|
int advanced; |
43 |
}; |
}; |
44 |
|
|
45 |
struct list * |
struct list * |
90 |
itr->list = list; |
itr->list = list; |
91 |
itr->cur = NULL; |
itr->cur = NULL; |
92 |
itr->next = list->itr; |
itr->next = list->itr; |
93 |
|
itr->advanced = 0; |
94 |
list->itr = itr; |
list->itr = itr; |
95 |
return itr; |
return itr; |
96 |
} |
} |
124 |
if (!ip) |
if (!ip) |
125 |
return NULL; |
return NULL; |
126 |
ip->cur = ip->list->head; |
ip->cur = ip->list->head; |
127 |
|
ip->advanced = 0; |
128 |
return iterator_current(ip); |
return iterator_current(ip); |
129 |
} |
} |
130 |
|
|
133 |
{ |
{ |
134 |
if (!ip || !ip->cur) |
if (!ip || !ip->cur) |
135 |
return NULL; |
return NULL; |
136 |
ip->cur = ip->cur->next; |
if (!ip->advanced) |
137 |
|
ip->cur = ip->cur->next; |
138 |
|
ip->advanced = 0; |
139 |
return iterator_current(ip); |
return iterator_current(ip); |
140 |
} |
} |
141 |
|
|
142 |
static void |
static void |
143 |
_iterator_advance(ITERATOR *ip, struct list_entry *e) |
_iterator_advance(ITERATOR *ip, struct list_entry *e) |
144 |
{ |
{ |
145 |
for (; ip; ip = ip->next) |
for (; ip; ip = ip->next) { |
146 |
if (ip->cur == e) |
if (ip->cur == e) { |
147 |
ip->cur = e->next; |
ip->cur = e->next; |
148 |
|
ip->advanced++; |
149 |
|
} |
150 |
|
} |
151 |
} |
} |
152 |
|
|
153 |
void * |
void * |