70#define DEL_LLIST_ELEMENT(current, l) \
71 if ((current)->prev) {\
72 (current)->prev->next = (current)->next;\
74 (l)->head = (current)->next;\
76 if ((current)->next) {\
77 (current)->next->prev = (current)->prev;\
79 (l)->tail = (current)->prev;\
82 (l)->dtor((current)->data);\
84 pefree((current), (l)->persistent);\
93 if (compare(
current->data, element)) {
135 if (old_tail->
prev) {
183 for (element=l->
head; element; element=element->
next) {
211 for (element=l->
head; element; element=element->
next) {
218 l->
head = elements[0];
221 for (i = 1; i < l->
count; i++) {
222 elements[i]->prev = elements[i-1];
223 elements[i-1]->next = elements[i];
225 elements[i-1]->next =
NULL;
226 l->
tail = elements[i-1];
235 for (element=l->
head; element; element=element->
next) {
247 for (element=l->
head; element; element=element->
next) {
266 return (*current)->data;
279 return (*current)->data;
293 return (*current)->data;
307 return (*current)->data;
unsigned const char * pos
struct _zend_llist_element * prev
struct _zend_llist_element * next
zend_llist_element * traverse_ptr
zend_llist_element * head
zend_llist_element * tail
#define pefree(ptr, persistent)
#define pemalloc(size, persistent)
ZEND_API void zend_llist_destroy(zend_llist *l)
ZEND_API size_t zend_llist_count(zend_llist *l)
ZEND_API void zend_llist_prepend_element(zend_llist *l, const void *element)
#define DEL_LLIST_ELEMENT(current, l)
ZEND_API void zend_llist_copy(zend_llist *dst, zend_llist *src)
ZEND_API void zend_llist_del_element(zend_llist *l, void *element, int(*compare)(void *element1, void *element2))
ZEND_API void zend_llist_add_element(zend_llist *l, const void *element)
ZEND_API void zend_llist_init(zend_llist *l, size_t size, llist_dtor_func_t dtor, unsigned char persistent)
ZEND_API void zend_llist_clean(zend_llist *l)
ZEND_API void * zend_llist_get_prev_ex(zend_llist *l, zend_llist_position *pos)
ZEND_API void zend_llist_apply_with_del(zend_llist *l, int(*func)(void *data))
ZEND_API void * zend_llist_get_next_ex(zend_llist *l, zend_llist_position *pos)
ZEND_API void zend_llist_apply_with_arguments(zend_llist *l, llist_apply_with_args_func_t func, int num_args,...)
ZEND_API void zend_llist_remove_tail(zend_llist *l)
ZEND_API void zend_llist_sort(zend_llist *l, llist_compare_func_t comp_func)
ZEND_API void zend_llist_apply(zend_llist *l, llist_apply_func_t func)
ZEND_API void zend_llist_apply_with_argument(zend_llist *l, llist_apply_with_arg_func_t func, void *arg)
ZEND_API void * zend_llist_get_first_ex(zend_llist *l, zend_llist_position *pos)
ZEND_API void * zend_llist_get_last_ex(zend_llist *l, zend_llist_position *pos)
int(* llist_compare_func_t)(const zend_llist_element **, const zend_llist_element **)
struct _zend_llist_element zend_llist_element
zend_llist_element * zend_llist_position
void(* llist_apply_with_args_func_t)(void *data, int num_args, va_list args)
void(* llist_dtor_func_t)(void *)
void(* llist_apply_with_arg_func_t)(void *data, void *arg)
void(* llist_apply_func_t)(void *)
struct _zend_llist zend_llist
ZEND_API void zend_sort(void *base, size_t nmemb, size_t siz, compare_func_t cmp, swap_func_t swp)
int(* compare_func_t)(const void *, const void *)
void(* swap_func_t)(void *, void *)