#ifndef list_h__ #define list_h__ #include "stdint.h" #include "stdlib.h" struct _list_def; typedef struct _list_def list_def; typedef int (*sub_fun_def)(void *a,void *b); typedef int (*del_fun_def)(void *p); // 生成打印字符串指针,列表获取后会使用free释放 typedef char *(*str_fun_def)(void *p); #define INT_SUB _list_int_sub #define INT_DEL 0 #define INT_STR _list_int_str #define STR_SUB _list_str_sub #define STR_DEL _list_str_del #define STR_STR _list_str_str /*r{ 基本操作函数 }c*/ list_def *list_creat(int block_size,sub_fun_def sub,del_fun_def del,str_fun_def str); void *list_get(list_def *l,int index); void list_remove(list_def *l,int index); void *list_take(list_def *l,int index);/*temp_ptr*/ void list_clear(list_def *l); int list_length(list_def *l); int list_block_size4(list_def *l); void list_sort(list_def *l); int list_contains(list_def *l,void *d); void list_swap(list_def *l,int index_a,int index_b); char *list_string(list_def *l); void list_shift(list_def *l); /*r{ 宏函数 }c*/ #define list_creat_int() list_creat(sizeof(int),INT_SUB,INT_DEL,INT_STR) #define list_creat_str() list_creat(sizeof(char *),STR_SUB,STR_DEL,STR_STR) #define list_delete(l) _list_delete(&(l)) #define list_insert(l,data,index) _list_insert(&(l),data,index) #define list_append(l,data) list_insert(l,data,-1) #define list_insert_int(l,int_,index) list_insert(l,(uint32_t []){int_},index) #define list_append_int(l,int_) list_insert_int(l,int_,-1) #define list_append_str(l,str) list_insert_str(l,str,-1) #define list_get_int(l,index) (*(int *)list_get(l,index)) #define list_get_str(sl,index) (*(char **)list_get(sl,index)) #define list_take_str(sl,index) (*(char **)list_take(sl,index)) #define list_take_int(l,index) (*(int *)list_take(l,index)) #define list_insert_str(l,str,index)\ {\ char *c=malloc(strlen(str)+1);\ param_check(c);\ memcpy(c,str,strlen(str)+1);\ list_insert(l,(uint32_t []){(uint32_t)(c)},index);} // 要保证a,b的类型相同 #define list_append_from(a,b) \ for(int i=0;i