You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
2.7 KiB

27 years ago
27 years ago
27 years ago
27 years ago
27 years ago
27 years ago
27 years ago
27 years ago
27 years ago
27 years ago
27 years ago
27 years ago
27 years ago
  1. /*
  2. +----------------------------------------------------------------------+
  3. | Zend Engine |
  4. +----------------------------------------------------------------------+
  5. | Copyright (c) 1998, 1999 Andi Gutmans, Zeev Suraski |
  6. +----------------------------------------------------------------------+
  7. | This source file is subject to version 0.91 of the Zend license, |
  8. | that is bundled with this package in the file LICENSE, and is |
  9. | available at through the world-wide-web at |
  10. | http://www.zend.com/license/0_91.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. #ifndef _ZEND_LLIST_H
  20. #define _ZEND_LLIST_H
  21. #include <stdlib.h>
  22. typedef struct _zend_llist_element {
  23. struct _zend_llist_element *next;
  24. struct _zend_llist_element *prev;
  25. char data[1]; /* Needs to always be last in the struct */
  26. } zend_llist_element;
  27. typedef struct _zend_llist {
  28. zend_llist_element *head;
  29. zend_llist_element *tail;
  30. size_t size;
  31. void (*dtor)(void *data);
  32. unsigned char persistent;
  33. zend_llist_element *traverse_ptr;
  34. } zend_llist;
  35. BEGIN_EXTERN_C()
  36. ZEND_API void zend_llist_init(zend_llist *l, size_t size, void (*dtor)(void *data), unsigned char persistent);
  37. ZEND_API void zend_llist_add_element(zend_llist *l, void *element);
  38. ZEND_API void zend_llist_prepend_element(zend_llist *l, void *element);
  39. ZEND_API void zend_llist_del_element(zend_llist *l, void *element, int (*compare)(void *element1, void *element2));
  40. ZEND_API void zend_llist_destroy(zend_llist *l);
  41. ZEND_API void zend_llist_clean(zend_llist *l);
  42. ZEND_API void zend_llist_remove_tail(zend_llist *l);
  43. ZEND_API void zend_llist_copy(zend_llist *dst, zend_llist *src);
  44. ZEND_API void zend_llist_apply(zend_llist *l, void (*func)(void *data));
  45. ZEND_API void zend_llist_apply_with_argument(zend_llist *l, void (*func)(void *data, void *arg), void *arg);
  46. ZEND_API int zend_llist_count(zend_llist *l);
  47. /* traversal */
  48. ZEND_API void *zend_llist_get_first(zend_llist *l);
  49. ZEND_API void *zend_llist_get_last(zend_llist *l);
  50. ZEND_API void *zend_llist_get_next(zend_llist *l);
  51. ZEND_API void *zend_llist_get_prev(zend_llist *l);
  52. END_EXTERN_C()
  53. #endif /* _ZEND_LLIST_H */