#ifndef L4LIB_DYNAMIC_ARRAY #define L4LIB_DYNAMIC_ARRAY #include /* 取得 FILE */ /*********** 一維陣列 ***********/ typedef struct l4lib_dyn_arr{ int arr_itemsize; /* 每個項目的大小 */ int arr_curlen; /* 陣列總長度 */ int arr_maxlen; /* 陣列最大長度 */ void* arr_data; /* 資料區 */ } L4DA ; L4DA* l4da_create_setmax(int, int, int); L4DA* l4da_create(int, int); void l4da_free(L4DA*); int l4da_pushback(L4DA*, const void*); #define l4da_popback(arr) (((arr)->arr_curlen)--) #define l4da_getlen(arr) ((arr)->arr_curlen) int l4da_setlen(L4DA*, int); #define l4da_getmax(arr) ((arr)->arr_maxlen) int l4da_setmax(L4DA*, int); int l4da_strip(L4DA*); #define l4da_itemsize(arr) ((arr)->arr_itemsize) #define l4da_data(arr) ((arr)->arr_data) #define l4da_v(arr, type, num) \ (*(((type*)((arr)->arr_data))+(num))) #define l4da_vp(arr, num) \ ((void*)(((char*)((arr)->arr_data))+(((arr)->arr_itemsize)*(num)))) #define l4da_readline() (l4da_filereadline_delim(stdin, '\n')) #define l4da_readline_delim(delim) (l4da_filereadline_delim(stdin, (delim))) #define l4da_filereadline(infile) (l4da_filereadline_delim((infile), '\n')) L4DA* l4da_filereadline_delim(FILE*, int); L4DA* l4da_dup(const L4DA*); int l4da_combine(L4DA*, const L4DA*); void* l4da_drop_struct(L4DA*); L4DA* l4da_make_struct(void*, int, int, int); #endif