#ifndef __XYSDK_LIST_H__
#define __XYSDK_LIST_H__



// 定义双向链表节点结构体
typedef struct xy_node {
    void* data;           		// 数据指针，可以是任意类型（音频列表是track_list_info_t）
    struct xy_node* next;    // 指向下一个节点的指针
    struct xy_node* prev;    // 指向前一个节点的指针
} xy_node_t;

// 定义双向链表结构体
typedef struct {
    xy_node_t* head;         // 指向链表头节点的指针
    xy_node_t* tail;         // 指向链表尾节点的指针
    size_t size;          		// 链表的大小
} xy_list_t;

xy_list_t* xy_init_list(); 
xy_node_t* xy_create_node(void* data);
void xy_insert_at_end(xy_list_t* list, void* data);
void xy_delete_node(xy_list_t* list, xy_node_t* node, void (*free_func)(void*));
xy_node_t* xy_find_list_by_data(xy_list_t *list, void *data, int (*cmp_func)(void*, void*));
xy_node_t* xy_find_list_by_index(xy_list_t *list, int index) ;
void xy_print_list(xy_list_t* list, void (*print_func)(void*));
void xy_free_list(xy_list_t* list, void (*free_func)(void*));
size_t xy_get_list_size(xy_list_t* list) ;
xy_node_t* xy_list_skip_by_node(xy_node_t* node, uint8_t dir, uint16_t step); 
#endif