list.h 969 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #pragma once
  2. #include <furi.h>
  3. struct ListItem;
  4. typedef struct ListItem {
  5. void* data;
  6. struct ListItem* next;
  7. struct ListItem* prev;
  8. } ListItem;
  9. typedef struct {
  10. ListItem* head;
  11. ListItem* tail;
  12. size_t count;
  13. } List;
  14. List* list_make();
  15. //frees everything
  16. void list_free(List* list);
  17. //clears the list, but not data
  18. void list_clear(List* list);
  19. //clears the list, and data
  20. void list_free_data(List* list);
  21. void list_push_back(void* data, List* list);
  22. void list_push_front(void* data, List* list);
  23. void* list_pop_back(List* list);
  24. void* list_pop_front(List* list);
  25. void* list_pop_at(size_t index, List* list);
  26. void list_remove_item(void* data, List* list);
  27. void list_remove_at(size_t index, List* list);
  28. List* list_splice(size_t index, size_t count, List* list);
  29. void* list_peek_front(List* list);
  30. void* list_peek_index(List* list, size_t index);
  31. ListItem* list_get_index(List* list, size_t index);
  32. void* list_peek_back(List* list);