57 lines
1.3 KiB
C
57 lines
1.3 KiB
C
//
|
|
// Created by william on 1/16/24.
|
|
//
|
|
|
|
#include <stdbool.h>
|
|
|
|
#ifndef NESEMULATOR_LINKED_LIST_H
|
|
#define NESEMULATOR_LINKED_LIST_H
|
|
|
|
typedef struct linked_list_node {
|
|
struct linked_list_node *previous;
|
|
struct linked_list_node *next;
|
|
void *data;
|
|
} LinkedListNode;
|
|
|
|
typedef struct linked_list {
|
|
LinkedListNode *head;
|
|
LinkedListNode *end;
|
|
} LinkedList;
|
|
|
|
/**
|
|
* Initializes a new linked list.
|
|
*
|
|
* @return The linked list instance
|
|
*/
|
|
LinkedList linked_list_init();
|
|
|
|
/**
|
|
* Adds data to a linked list.
|
|
*
|
|
* @param list The linked list
|
|
* @param data The data to add
|
|
*/
|
|
void linked_list_add(LinkedList *list, void *data);
|
|
|
|
/**
|
|
* Searches for data corresponding to a predicate.
|
|
* The search will stop after reaching the first node matching the given predicate.
|
|
*
|
|
* @param list The list to search in
|
|
* @param predicate The predicate to match the data
|
|
* @param userdata Parameter to pass to the predicate
|
|
* @return The first node in the list matching the predicate
|
|
*/
|
|
LinkedListNode *linked_list_get_if(LinkedList *list, bool(*predicate)(void *, void *), void *userdata);
|
|
|
|
LinkedListNode *linked_list_get_near(LinkedList *list, int(*predicate)(void *, void *), void *userdata);
|
|
|
|
/**
|
|
* Deinitializes a linked list.
|
|
*
|
|
* @param list The list to deinitialize
|
|
*/
|
|
void linked_list_uninit(LinkedList *list);
|
|
|
|
#endif //NESEMULATOR_LINKED_LIST_H
|