aboutsummaryrefslogtreecommitdiffstats
path: root/l4bds/l4bds.h
diff options
context:
space:
mode:
Diffstat (limited to 'l4bds/l4bds.h')
-rw-r--r--l4bds/l4bds.h79
1 files changed, 39 insertions, 40 deletions
diff --git a/l4bds/l4bds.h b/l4bds/l4bds.h
index 31cd747..b0602da 100644
--- a/l4bds/l4bds.h
+++ b/l4bds/l4bds.h
@@ -3,63 +3,62 @@
/*********** list ***********/
-struct l4lib_list_node{ /* list 中每一個項目用的資料結構,會有很多個 */
+typedef struct l4lib_list_node{ /* list 中每一個項目用的資料結構,會有很多個 */
struct l4lib_list_node* node_prev;
struct l4lib_list_node* node_next;
void* node_data;
-};
+ int node_data_size;
+} L4LLNODE;
typedef struct l4lib_list{ /* 管理 list 用的,每個 list 只有一個 */
struct l4lib_list_node* list_first;
struct l4lib_list_node* list_last;
- struct l4lib_list_node* list_current;
- int list_prevcount;
- int list_nextcount;
int list_len;
} L4LL;
-/* 這兩個常數僅供 l4ll_remove 使用 */
-#define L4LL_PREV 1 /* 刪除後移至上一項 */
-#define L4LL_NEXT 2 /* 刪除後移至下一項 */
-
-/* 這兩個常數僅供 l4ll_goto 使用 */
-#define L4LL_FRONT 3
-#define L4LL_BACK 4
-
L4LL* l4ll_create(void);
void l4ll_free(L4LL*);
-void* l4ll_getcur(L4LL*);
-void* l4ll_getback(L4LL*);
-void* l4ll_getfront(L4LL*);
-int l4ll_pushback(L4LL*, void*);
-int l4ll_pushfront(L4LL*, void*);
-int l4ll_popback(L4LL*);
-int l4ll_popfront(L4LL*);
-int l4ll_remove(L4LL*, int);
-int l4ll_insprev(L4LL*);
-int l4ll_insnext(L4LL*);
-int l4ll_goto(L4LL*, int, int);
-#define l4ll_getlen(list)
-#define l4ll_getc(list)
-#define l4ll_getpc(list)
-#define l4ll_getnc(list)
+#define l4ll_prev(node) ((node)->node_prev)
+#define l4ll_next(node) ((node)->node_next)
+#define l4ll_len(list) ((list)->list_len)
+#define l4ll_node_back(list) ((list)->list_last)
+#define l4ll_node_front(list) ((list)->list_first)
+#define l4ll_data(node) ((node)->node_data)
+#define l4ll_datasize(node) ((node)->node_data_size)
+L4LLNODE* l4ll_insert_prev(L4LL*, L4LLNODE*, void*, int);
+L4LLNODE* l4ll_insert_next(L4LL*, L4LLNODE*, void*, int);
+void l4ll_remove(L4LL*, L4LLNODE*);
+#define l4ll_pushback(list,data,size) \
+ (l4ll_insert_next((list),(l4ll_node_back(list)),(data),(size)))
+#define l4ll_pushfront(list,data,size) \
+ (l4ll_insert_prev((list),(l4ll_node_front(list)),(data),(size)))
+#define l4ll_popback(list) \
+ (l4ll_remove((list),(l4ll_node_back((list)))))
+#define l4ll_popfront(list) \
+ (l4ll_remove((list),(l4ll_node_front((list)))))
/*********** stack ***********/
-#define l4stack_create()
-#define l4stack_push(list, value)
-#define l4stack_pop(list)
-#define l4stack_getlen(list)
-#define l4stack_value(list)
-#define l4stack_free(list)
+typedef L4LL L4STACK;
+#define l4stack_create() (l4ll_create())
+#define l4stack_free(list) (l4ll_free(list))
+#define l4stack_push(list,data,size) (l4ll_pushback((list),(data),(size)))
+#define l4stack_pop(list) (l4ll_popback(list))
+#define l4stack_len(list) (l4ll_len(list))
+#define l4stack_data(list) (l4ll_data(l4ll_node_back(list)))
+#define l4stack_datasize(list) (l4ll_datasize(l4ll_node_back(list)))
/*********** queue ***********/
-#define l4queue_create()
-#define l4queue_push(list, value)
-#define l4queue_pop(list)
-#define l4queue_getlen(list)
-#define l4queue_value(list)
-#define l4queue_free(list)
+typedef L4LL L4QUEUE;
+#define l4queue_create() (l4ll_create())
+#define l4queue_free(list) (l4ll_free(list))
+#define l4queue_push(list,data,size) (l4ll_pushback((list),(data),(size)))
+#define l4queue_pop(list) (l4ll_popfront(list))
+#define l4queue_len(list) (l4ll_len(list))
+#define l4queue_frontdata(list) (l4ll_data(l4ll_node_front(list)))
+#define l4queue_frontdatasize(list) (l4ll_datasize(l4ll_node_front(list)))
+#define l4queue_backdata(list) (l4ll_data(l4ll_node_back(list)))
+#define l4queue_backdatasize(list) (l4ll_datasize(l4ll_node_back(list)))
#endif