mirror of
https://github.com/Hizenberg469/C1-Linux_SYS_Prog-AS-.git
synced 2026-04-19 18:32:24 +03:00
69 lines
1.8 KiB
C
69 lines
1.8 KiB
C
/*
|
|
* =====================================================================================
|
|
*
|
|
* Filename: dll.h
|
|
*
|
|
* Description:
|
|
*
|
|
* Version: 1.0
|
|
* Created: 05/02/24 08:03:38 PM IST
|
|
* Revision: none
|
|
* Compiler: gcc
|
|
*
|
|
* Author: YOUR NAME (),
|
|
* Organization:
|
|
*
|
|
* =====================================================================================
|
|
*/
|
|
|
|
/*Header file for Doubly Linked List*/
|
|
|
|
typedef struct dll_node_{
|
|
|
|
void *data;
|
|
struct dll_node_ *left;
|
|
struct dll_node_ *right;
|
|
} dll_node_t;
|
|
|
|
typedef struct dll_{
|
|
dll_node_t *head;
|
|
int (*key_match)(void *, void *);
|
|
int (*comparison_fn)(void *, void *);
|
|
} dll_t;
|
|
|
|
void
|
|
register_key_match_callback(dll_t *dll, int (*key_match)(void *, void *));
|
|
|
|
void
|
|
register_comparison_callback(dll_t *dll, int (*comparison_cb)(void *, void *));
|
|
|
|
/*Generic Search function*/
|
|
void *
|
|
dll_search_by_key (dll_t *dll, void *key);
|
|
|
|
int
|
|
dll_priority_insert_data (dll_t *dll, void *data);
|
|
|
|
/* Public Function declaration to create and return
|
|
* a new empty doubly linked list*/
|
|
dll_t *
|
|
get_new_dll();
|
|
|
|
/* Public Function declaration to add the appication
|
|
* data to DLL*/
|
|
int
|
|
add_data_to_dll(dll_t *dll, void *appn_data);
|
|
|
|
/*Macro to iterate over a DLL*/
|
|
|
|
#define ITERATE_LIST_BEGIN(list_ptr, node_ptr) \
|
|
{ \
|
|
dll_node_t *_node_ptr = NULL; \
|
|
node_ptr = list_ptr->head; \
|
|
for(; node_ptr!= NULL; node_ptr = _node_ptr){ \
|
|
if(!node_ptr) break; \
|
|
_node_ptr = node_ptr->right;
|
|
|
|
#define ITERATE_LIST_END }}
|
|
|