15#ifndef _NETSIM_LIST_H_
16#define _NETSIM_LIST_H_
26#pragma comment(lib,"list.lib")
29#define LIST_NEXT(ls) list_next(ls,ls->ele->offset)
30#define LIST_ADD_LAST(ls,mem) list_add_last(ls,mem->ele->offset,mem,__LINE__,__FILE__)
31#define LIST_ADD_TOP(ls,mem) list_add_top(ls,mem->ele->offset,mem)
32#define LIST_FREE(ls,mem) list_free(ls,mem->ele->offset,mem)
33#define LIST_ADD(ls,mem,checker) list_add(ls,mem,mem->ele->offset,checker)
34#define LIST_REMOVE(ls,mem) list_remove(ls,mem->ele->offset,mem)
35#define LIST_SORT(ls,check) list_sort(ls,(*ls)->ele->offset,check)
36#define list_alloc(size,offset) list_alloc_dbg(size,offset,__LINE__,__FILE__)
38#define BEGIN_LIST(LIST_NAME) typedef struct stru_##LIST_NAME
39#define END_LIST(LIST_NAME) LIST_NAME,*ptr_##LIST_NAME; \
40 static void* ##LIST_NAME##_ALLOC(){return list_alloc(sizeof(struct stru_##LIST_NAME),offsetof(struct stru_##LIST_NAME,ele));} \
41 static struct stru_##LIST_NAME##* ##LIST_NAME##_NEXT(ptr_##LIST_NAME ls){return (ptr_##LIST_NAME)LIST_NEXT(ls);}
55 void list_add(
void** list,
void* mem,
size_t offset,
int (*check)(
void* current,
void* mem));
56 void list_add_last(
void** ls,
size_t offset,
void* mem,
int line,
char* file);
58 void list_free(
void** list,
size_t offset,
void* mem);
59 void list_sort(
void** list,
size_t offset,
int (*check)(
void* current,
void* mem));
void list_add_top(void **list, size_t offset, void *mem)
void list_add(void **list, void *mem, size_t offset, int(*check)(void *current, void *mem))
void list_sort(void **list, size_t offset, int(*check)(void *current, void *mem))
void * list_alloc_dbg(size_t size, size_t offset, int line, char *file)
void list_free(void **list, size_t offset, void *mem)
__inline _ele * list_ele(void *list, size_t offset)
void list_add_last(void **ls, size_t offset, void *mem, int line, char *file)
void list_remove(void **list, size_t offset, void *mem)
__inline void * list_prev(void *list, size_t offset)
__inline void * list_next(void *list, size_t offset)
struct element * _ptr_ele