llist.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #ifndef __LLIST_H
  2. #define __LLIST_H
  3. /*****************************************************************************
  4. * _ _ ____ _
  5. * Project ___| | | | _ \| |
  6. * / __| | | | |_) | |
  7. * | (__| |_| | _ <| |___
  8. * \___|\___/|_| \_\_____|
  9. *
  10. * Copyright (C) 2001, Daniel Stenberg, <[email protected]>, et al
  11. *
  12. * In order to be useful for every potential user, curl and libcurl are
  13. * dual-licensed under the MPL and the MIT/X-derivate licenses.
  14. *
  15. * You may opt to use, copy, modify, merge, publish, distribute and/or sell
  16. * copies of the Software, and permit persons to whom the Software is
  17. * furnished to do so, under the terms of the MPL or the MIT/X-derivate
  18. * licenses. You may pick one of these licenses.
  19. *
  20. * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
  21. * KIND, either express or implied.
  22. *
  23. * $Id$
  24. *****************************************************************************/
  25. #include "setup.h"
  26. #include <stddef.h>
  27. typedef void (*curl_llist_dtor)(void *, void *);
  28. typedef struct _curl_llist_element {
  29. void *ptr;
  30. struct _curl_llist_element *prev;
  31. struct _curl_llist_element *next;
  32. } curl_llist_element;
  33. typedef struct _curl_llist {
  34. curl_llist_element *head;
  35. curl_llist_element *tail;
  36. curl_llist_dtor dtor;
  37. size_t size;
  38. } curl_llist;
  39. void curl_llist_init(curl_llist *, curl_llist_dtor);
  40. curl_llist *curl_llist_alloc(curl_llist_dtor);
  41. int curl_llist_insert_next(curl_llist *, curl_llist_element *, const void *);
  42. int curl_llist_insert_prev(curl_llist *, curl_llist_element *, const void *);
  43. int curl_llist_remove(curl_llist *, curl_llist_element *, void *);
  44. int curl_llist_remove_next(curl_llist *, curl_llist_element *, void *);
  45. size_t curl_llist_count(curl_llist *);
  46. void curl_llist_destroy(curl_llist *, void *);
  47. #define CURL_LLIST_HEAD(__l) ((__l)->head)
  48. #define CURL_LLIST_TAIL(__l) ((__l)->tail)
  49. #define CURL_LLIST_NEXT(__e) ((__e)->next)
  50. #define CURL_LLIST_PREV(__e) ((__e)->prev)
  51. #define CURL_LLIST_VALP(__e) ((__e)->ptr)
  52. #define CURL_LLIST_IS_TAIL(__e) ((__e)->next ? 0 : 1)
  53. #define CURL_LLIST_IS_HEAD(__e) ((__e)->prev ? 0 : 1)
  54. #endif