diff options
author | Andrei Zmievski <andrei@php.net> | 2000-03-14 21:20:38 +0000 |
---|---|---|
committer | Andrei Zmievski <andrei@php.net> | 2000-03-14 21:20:38 +0000 |
commit | 26eaf668e78ffa60e1559f4097eeea0ee1a645a2 (patch) | |
tree | 298d74675483b800507fb5a0e646c2db9bf6c71e /Zend/zend_llist.c | |
parent | 29c41fe46dccc9fbd874ab74e4bfa7dc5720d6f0 (diff) | |
download | php-git-26eaf668e78ffa60e1559f4097eeea0ee1a645a2.tar.gz |
Implemented external list traversing.
Diffstat (limited to 'Zend/zend_llist.c')
-rw-r--r-- | Zend/zend_llist.c | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/Zend/zend_llist.c b/Zend/zend_llist.c index ffb535ab79..5ea65786c2 100644 --- a/Zend/zend_llist.c +++ b/Zend/zend_llist.c @@ -208,46 +208,54 @@ ZEND_API int zend_llist_count(zend_llist *l) } -ZEND_API void *zend_llist_get_first(zend_llist *l) +ZEND_API void *zend_llist_get_first_ex(zend_llist *l, zend_llist_position *pos) { - l->traverse_ptr = l->head; - if (l->traverse_ptr) { - return l->traverse_ptr->data; + zend_llist_position *current = pos ? pos : &l->traverse_ptr; + + *current = l->head; + if (*current) { + return (*current)->data; } else { return NULL; } } -ZEND_API void *zend_llist_get_last(zend_llist *l) +ZEND_API void *zend_llist_get_last_ex(zend_llist *l, zend_llist_position *pos) { - l->traverse_ptr = l->tail; - if (l->traverse_ptr) { - return l->traverse_ptr->data; + zend_llist_position *current = pos ? pos : &l->traverse_ptr; + + *current = l->tail; + if (*current) { + return (*current)->data; } else { return NULL; } } -ZEND_API void *zend_llist_get_next(zend_llist *l) +ZEND_API void *zend_llist_get_next_ex(zend_llist *l, zend_llist_position *pos) { - if (l->traverse_ptr) { - l->traverse_ptr = l->traverse_ptr->next; - if (l->traverse_ptr) { - return l->traverse_ptr->data; + zend_llist_position *current = pos ? pos : &l->traverse_ptr; + + if (*current) { + *current = (*current)->next; + if (*current) { + return (*current)->data; } } return NULL; } -ZEND_API void *zend_llist_get_prev(zend_llist *l) +ZEND_API void *zend_llist_get_prev_ex(zend_llist *l, zend_llist_position *pos) { - if (l->traverse_ptr) { - l->traverse_ptr = l->traverse_ptr->prev; - if (l->traverse_ptr) { - return l->traverse_ptr->data; + zend_llist_position *current = pos ? pos : &l->traverse_ptr; + + if (*current) { + *current = (*current)->prev; + if (*current) { + return (*current)->data; } } return NULL; |