list.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #ifndef _lub_list_h
  2. #define _lub_list_h
  3. #include <stddef.h>
  4. #include "lub/c_decl.h"
  5. /****************************************************************
  6. * TYPE DEFINITIONS
  7. **************************************************************** */
  8. typedef struct lub_list_node_s lub_list_node_t;
  9. /**
  10. * This type defines a callback function which will compare two nodes
  11. * with each other
  12. *
  13. * \param clientnode the client node to compare
  14. * \param clientkey the key to compare with a node
  15. *
  16. * \return
  17. * <0 if clientnode < clientkey;
  18. * 0 if clientnode == clientkey;
  19. * >0 if clientnode > clientkey
  20. */
  21. typedef int lub_list_compare_fn(const void *first, const void *second);
  22. /**
  23. * This type represents a list instance
  24. */
  25. typedef struct lub_list_s lub_list_t;
  26. /**
  27. * This is used to perform iterations of a list
  28. */
  29. typedef struct lub_list_node_s lub_list_iterator_t;
  30. _BEGIN_C_DECL
  31. /****************************************************************
  32. * LIST OPERATIONS
  33. **************************************************************** */
  34. /**
  35. * This operation initialises an instance of a list.
  36. */
  37. lub_list_t *lub_list_new(lub_list_compare_fn compareFn);
  38. lub_list_node_t *lub_list_node_new(void *data);
  39. void lub_list_free(lub_list_t *list);
  40. void lub_list_node_free(lub_list_node_t *node);
  41. lub_list_node_t *lub_list__get_head(lub_list_t *list);
  42. lub_list_node_t *lub_list__get_tail(lub_list_t *list);
  43. lub_list_node_t *lub_list_node__get_prev(lub_list_node_t *node);
  44. lub_list_node_t *lub_list_node__get_next(lub_list_node_t *node);
  45. void *lub_list_node__get_data(lub_list_node_t *node);
  46. lub_list_node_t *lub_list_iterator_init(lub_list_t *list);
  47. lub_list_node_t *lub_list_iterator_next(lub_list_node_t *node);
  48. lub_list_node_t *lub_list_iterator_prev(lub_list_node_t *node);
  49. lub_list_node_t *lub_list_add(lub_list_t *list, void *data);
  50. void lub_list_del(lub_list_t *list, lub_list_node_t *node);
  51. void lub_list_node_copy(lub_list_node_t *dst, lub_list_node_t *src);
  52. _END_C_DECL
  53. #endif /* _lub_list_h */