Annotation of embedaddon/php/Zend/zend_llist.h, revision 1.1.1.2

1.1       misho       1: /*
                      2:    +----------------------------------------------------------------------+
                      3:    | Zend Engine                                                          |
                      4:    +----------------------------------------------------------------------+
                      5:    | Copyright (c) 1998-2012 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:    +----------------------------------------------------------------------+
                     18: */
                     19: 
1.1.1.2 ! misho      20: /* $Id$ */
1.1       misho      21: 
                     22: #ifndef ZEND_LLIST_H
                     23: #define ZEND_LLIST_H
                     24: 
                     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 */
                     29: } zend_llist_element;
                     30: 
                     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);
                     36: 
                     37: typedef struct _zend_llist {
                     38:        zend_llist_element *head;
                     39:        zend_llist_element *tail;
                     40:        size_t count;
                     41:        size_t size;
                     42:        llist_dtor_func_t dtor;
                     43:        unsigned char persistent;
                     44:        zend_llist_element *traverse_ptr;
                     45: } zend_llist;
                     46: 
                     47: typedef zend_llist_element* zend_llist_position;
                     48: 
                     49: BEGIN_EXTERN_C()
                     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);
                     64: 
                     65: /* traversal */
                     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);
                     70: 
                     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)
                     75: 
                     76: END_EXTERN_C()
                     77: 
                     78: #endif /* ZEND_LLIST_H */
                     79: 
                     80: /*
                     81:  * Local variables:
                     82:  * tab-width: 4
                     83:  * c-basic-offset: 4
                     84:  * indent-tabs-mode: t
                     85:  * End:
                     86:  */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>