aboutsummaryrefslogtreecommitdiffstats
path: root/l4darr/l4darr.h
diff options
context:
space:
mode:
authorlantw44 <lantw44@gmail.com>2012-08-30 00:05:33 +0800
committerlantw44 <lantw44@gmail.com>2012-08-30 00:05:33 +0800
commit516f31006b9c1b47f85b31deef28b78276f2c4bb (patch)
tree78c1971b2ca1f48dea81c18c3f31561e93319aba /l4darr/l4darr.h
downloadl4basic-516f31006b9c1b47f85b31deef28b78276f2c4bb.tar
l4basic-516f31006b9c1b47f85b31deef28b78276f2c4bb.tar.gz
l4basic-516f31006b9c1b47f85b31deef28b78276f2c4bb.tar.bz2
l4basic-516f31006b9c1b47f85b31deef28b78276f2c4bb.tar.lz
l4basic-516f31006b9c1b47f85b31deef28b78276f2c4bb.tar.xz
l4basic-516f31006b9c1b47f85b31deef28b78276f2c4bb.tar.zst
l4basic-516f31006b9c1b47f85b31deef28b78276f2c4bb.zip
Initial commit - copy project files
Diffstat (limited to 'l4darr/l4darr.h')
-rw-r--r--l4darr/l4darr.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/l4darr/l4darr.h b/l4darr/l4darr.h
new file mode 100644
index 0000000..fd2d267
--- /dev/null
+++ b/l4darr/l4darr.h
@@ -0,0 +1,61 @@
+#ifndef L4LIB_DYNAMIC_ARRAY
+#define L4LIB_DYNAMIC_ARRAY
+
+#include <stdio.h> /* 取得 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);
+/* #define l4da_create(itemsize, len) \
+ (l4da_create_setmax((itemsize), (len), (len))) */
+L4DA* l4da_create(int, int);
+void l4da_free(L4DA*);
+int l4da_pushback(L4DA*, 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_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*);
+
+/*********** 二維陣列 (其實是用一維陣列來模擬,功能有限) ***********/
+
+typedef struct l4lib_dyn_2darr{
+ int arr_itemsize; /* 每個項目的大小 */
+ int arr_lenx; /* 陣列 x 方向長度 */
+ int arr_leny; /* 陣列 y 方向長度 */
+ void* arr_data; /* 資料區 */
+} L4DA2 ;
+
+L4DA2* l4da2_create(int, int, int);
+void l4da2_free(L4DA2*);
+#define l4da2_getlenx(arr) ((arr)->arr_lenx)
+#define l4da2_getleny(arr) ((arr)->arr_leny)
+#define l4da2_itemsize(arr) ((arr)->arr_itemsize)
+#define l4da2_v(arr, type, numx, numy) \
+ (*(((type*)((arr)->arr_data))+((numx)*(l4da2_getlenx(arr)))+(numy)))
+#define l4da2_vp(arr, numx, numy) \
+ ((void*)(((char*)((arr)->arr_data))+ \
+ ((arr)->arr_itemsize)*((numx)*(l4da2_getlenx(arr))+(numy))))
+
+#endif