mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-09 13:05:01 +00:00
12350155a4
* merged Alexander Lazic's and Klaus Wagner's work on application cookie-based persistence. Since this is the first merge, this version is not intended for general use and reports are more than welcome. Some documentation is really needed though.
79 lines
2.7 KiB
C
79 lines
2.7 KiB
C
/*
|
|
This File is copied from
|
|
|
|
http://www.oreilly.com/catalog/masteralgoc/index.html
|
|
Mastering Algorithms with C
|
|
By Kyle Loudon
|
|
ISBN: 1-56592-453-3
|
|
Publishd by O'Reilly
|
|
|
|
*/
|
|
|
|
/*****************************************************************************
|
|
* *
|
|
* -------------------------------- list.h -------------------------------- *
|
|
* *
|
|
*****************************************************************************/
|
|
|
|
#ifndef LIST_H
|
|
#define LIST_H
|
|
|
|
#include <stdlib.h>
|
|
|
|
/*****************************************************************************
|
|
* *
|
|
* Define a structure for linked list elements. *
|
|
* *
|
|
*****************************************************************************/
|
|
|
|
typedef struct ListElmt_ {
|
|
|
|
void *data;
|
|
struct ListElmt_ *next;
|
|
} ListElmt;
|
|
|
|
/*****************************************************************************
|
|
* *
|
|
* Define a structure for linked lists. *
|
|
* *
|
|
*****************************************************************************/
|
|
|
|
typedef struct List_ {
|
|
int size;
|
|
int (*match)(const void *key1, const void *key2);
|
|
void (*destroy)(void *data);
|
|
|
|
ListElmt *head;
|
|
ListElmt *tail;
|
|
} List;
|
|
|
|
/*****************************************************************************
|
|
* *
|
|
* --------------------------- Public Interface --------------------------- *
|
|
* *
|
|
*****************************************************************************/
|
|
|
|
void list_init(List *list, void (*destroy)(void *data));
|
|
|
|
void list_destroy(List *list);
|
|
|
|
int list_ins_next(List *list, ListElmt *element, const void *data);
|
|
|
|
int list_rem_next(List *list, ListElmt *element, void **data);
|
|
|
|
#define list_size(list) ((list)->size)
|
|
|
|
#define list_head(list) ((list)->head)
|
|
|
|
#define list_tail(list) ((list)->tail)
|
|
|
|
#define list_is_head(list, element) ((element) == (list)->head ? 1 : 0)
|
|
|
|
#define list_is_tail(element) ((element)->next == NULL ? 1 : 0)
|
|
|
|
#define list_data(element) ((element)->data)
|
|
|
|
#define list_next(element) ((element)->next)
|
|
|
|
#endif
|