summaryrefslogtreecommitdiff
path: root/Zend/zend_llist.c
diff options
context:
space:
mode:
authorAndrei Zmievski <andrei@php.net>2000-03-14 21:20:38 +0000
committerAndrei Zmievski <andrei@php.net>2000-03-14 21:20:38 +0000
commit26eaf668e78ffa60e1559f4097eeea0ee1a645a2 (patch)
tree298d74675483b800507fb5a0e646c2db9bf6c71e /Zend/zend_llist.c
parent29c41fe46dccc9fbd874ab74e4bfa7dc5720d6f0 (diff)
downloadphp-git-26eaf668e78ffa60e1559f4097eeea0ee1a645a2.tar.gz
Implemented external list traversing.
Diffstat (limited to 'Zend/zend_llist.c')
-rw-r--r--Zend/zend_llist.c44
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;