2
+----------------------------------------------------------------------+
4
+----------------------------------------------------------------------+
5
| Copyright (c) 1998-2004 Zend Technologies Ltd. (http://www.zend.com) |
6
+----------------------------------------------------------------------+
7
| This source file is subject to version 2.00 of the Zend license, |
8
| that is bundled with this package in the file LICENSE, and is |
9
| available through the world-wide-web at the following url: |
10
| http://www.zend.com/license/2_00.txt. |
11
| If you did not receive a copy of the Zend license and are unable to |
12
| obtain it through the world-wide-web, please send a note to |
13
| license@zend.com so we can mail you a copy immediately. |
14
+----------------------------------------------------------------------+
15
| Authors: Andi Gutmans <andi@zend.com> |
16
| Zeev Suraski <zeev@zend.com> |
17
+----------------------------------------------------------------------+
20
/* $Id: zend_llist.h,v 1.32 2004/01/08 17:31:47 sniper Exp $ */
25
typedef struct _zend_llist_element {
26
struct _zend_llist_element *next;
27
struct _zend_llist_element *prev;
28
char data[1]; /* Needs to always be last in the struct */
31
typedef void (*llist_dtor_func_t)(void *);
32
typedef int (*llist_compare_func_t)(const zend_llist_element **, const zend_llist_element ** TSRMLS_DC);
33
typedef void (*llist_apply_with_args_func_t)(void *data, int num_args, va_list args TSRMLS_DC);
34
typedef void (*llist_apply_with_arg_func_t)(void *data, void *arg TSRMLS_DC);
35
typedef void (*llist_apply_func_t)(void * TSRMLS_DC);
37
typedef struct _zend_llist {
38
zend_llist_element *head;
39
zend_llist_element *tail;
42
llist_dtor_func_t dtor;
43
unsigned char persistent;
44
zend_llist_element *traverse_ptr;
47
typedef zend_llist_element* zend_llist_position;
50
ZEND_API void zend_llist_init(zend_llist *l, size_t size, llist_dtor_func_t dtor, unsigned char persistent);
51
ZEND_API void zend_llist_add_element(zend_llist *l, void *element);
52
ZEND_API void zend_llist_prepend_element(zend_llist *l, void *element);
53
ZEND_API void zend_llist_del_element(zend_llist *l, void *element, int (*compare)(void *element1, void *element2));
54
ZEND_API void zend_llist_destroy(zend_llist *l);
55
ZEND_API void zend_llist_clean(zend_llist *l);
56
ZEND_API void *zend_llist_remove_tail(zend_llist *l);
57
ZEND_API void zend_llist_copy(zend_llist *dst, zend_llist *src);
58
ZEND_API void zend_llist_apply(zend_llist *l, llist_apply_func_t func TSRMLS_DC);
59
ZEND_API void zend_llist_apply_with_del(zend_llist *l, int (*func)(void *data));
60
ZEND_API void zend_llist_apply_with_argument(zend_llist *l, llist_apply_with_arg_func_t func, void *arg TSRMLS_DC);
61
ZEND_API void zend_llist_apply_with_arguments(zend_llist *l, llist_apply_with_args_func_t func TSRMLS_DC, int num_args, ...);
62
ZEND_API int zend_llist_count(zend_llist *l);
63
ZEND_API void zend_llist_sort(zend_llist *l, llist_compare_func_t comp_func TSRMLS_DC);
66
ZEND_API void *zend_llist_get_first_ex(zend_llist *l, zend_llist_position *pos);
67
ZEND_API void *zend_llist_get_last_ex(zend_llist *l, zend_llist_position *pos);
68
ZEND_API void *zend_llist_get_next_ex(zend_llist *l, zend_llist_position *pos);
69
ZEND_API void *zend_llist_get_prev_ex(zend_llist *l, zend_llist_position *pos);
71
#define zend_llist_get_first(l) zend_llist_get_first_ex(l, NULL)
72
#define zend_llist_get_last(l) zend_llist_get_last_ex(l, NULL)
73
#define zend_llist_get_next(l) zend_llist_get_next_ex(l, NULL)
74
#define zend_llist_get_prev(l) zend_llist_get_prev_ex(l, NULL)
78
#endif /* ZEND_LLIST_H */