提交 d1055347 authored 作者: zhoush's avatar zhoush

代码格式化: Linux Kernel

上级 8c5b9efa
流水线 #3106 已失败 于阶段
...@@ -6,105 +6,129 @@ ...@@ -6,105 +6,129 @@
typedef enum { TRUE = 1, FALSE = 0 } BOOL; typedef enum { TRUE = 1, FALSE = 0 } BOOL;
// ================> SOURCE CODE BELOW <================ // ================> SOURCE CODE BELOW <================
AWList* AWList_init(AWList* list) { AWList *AWList_init(AWList *list)
if (list == NULL) { {
list = calloc(1, sizeof(AWList)); if (list == NULL) {
list = calloc(1, sizeof(AWList));
list->free_me = TRUE;
} else { list->free_me = TRUE;
list->free_me = FALSE; } else {
} list->free_me = FALSE;
}
list->head = calloc(1, sizeof(AWNode));
list->tail = list->head; list->head = calloc(1, sizeof(AWNode));
list->iter = list->head; list->tail = list->head;
list->cnt = 0; list->iter = list->head;
return list; list->cnt = 0;
return list;
} }
void AWList_destroy(AWList* list) { void AWList_destroy(AWList *list)
if (!list) { {
return ; if (!list) {
} return;
}
AWList_clear(list); AWList_clear(list);
free(list->head); free(list->head);
if (list->free_me) { free(list); } if (list->free_me) {
free(list);
}
} }
void AWList_clear(AWList* list) { void AWList_clear(AWList *list)
if (!list) { return; } {
for (; list->tail != list->head; AWList_delete_node(list, list->tail)) if (!list) {
; return;
}
for (; list->tail != list->head; AWList_delete_node(list, list->tail))
;
} }
AWNode* AWNode_init(void* data, void (*delete_func)(void*)) { AWNode *AWNode_init(void *data, void (*delete_func)(void *))
AWNode* node = malloc(sizeof(AWNode)); {
node->data = data; AWNode *node = malloc(sizeof(AWNode));
node->delete_func = delete_func; node->data = data;
node->delete_func = delete_func;
node->prev = NULL; node->prev = NULL;
node->next = NULL; node->next = NULL;
return node; return node;
} }
void AWNode_destroy(AWNode* node) { void AWNode_destroy(AWNode *node)
if (node->next) { node->next->prev = node->prev; } {
node->prev->next = node->next; if (node->next) {
node->next->prev = node->prev;
}
node->prev->next = node->next;
if (node && node->delete_func) { node->delete_func(node->data); } if (node && node->delete_func) {
free(node); node->delete_func(node->data);
}
free(node);
} }
void AWList_delete_node(AWList* list, AWNode* node) { void AWList_delete_node(AWList *list, AWNode *node)
if (!list || !list->head || !node) return; {
if (!list || !list->head || !node)
return;
if (list->tail == node) { list->tail = node->prev; } if (list->tail == node) {
if (list->iter == node) { list->iter = node->prev; } list->tail = node->prev;
}
if (list->iter == node) {
list->iter = node->prev;
}
AWNode_destroy(node); AWNode_destroy(node);
list->cnt -= 1; list->cnt -= 1;
} }
void AWList_add_head(AWList* list, void* data, void (*delete_func)(void*)) { void AWList_add_head(AWList *list, void *data, void (*delete_func)(void *))
if (!list || !list->head) return; {
if (!list || !list->head)
return;
AWNode* node = AWNode_init(data, delete_func); AWNode *node = AWNode_init(data, delete_func);
AWNode* dummy = list->head; AWNode *dummy = list->head;
node->prev = dummy; node->prev = dummy;
node->next = dummy->next; node->next = dummy->next;
dummy->next->prev = node; dummy->next->prev = node;
dummy->next = node; dummy->next = node;
list->iter = node; list->iter = node;
list->cnt += 1; list->cnt += 1;
} }
void AWList_add_tail(AWList* list, void* data, void (*delete_func)(void*)) { void AWList_add_tail(AWList *list, void *data, void (*delete_func)(void *))
AWNode* node = AWNode_init(data, delete_func); {
AWNode *node = AWNode_init(data, delete_func);
node->prev = list->tail; node->prev = list->tail;
node->next = NULL; node->next = NULL;
list->tail->next = node; list->tail->next = node;
list->tail = node; list->tail = node;
list->cnt += 1; list->cnt += 1;
} }
AWNode* AWList_find_node(AWList* list, AWNode *AWList_find_node(AWList *list, void *data,
void* data, int (*cmp_callback)(void *, void *))
int (*cmp_callback)(void*, void*)) { {
AWNode* node; AWNode *node;
AWList_for_each(node, list) { AWList_for_each(node, list)
if (cmp_callback(node->data, data) == 0) return node; {
} if (cmp_callback(node->data, data) == 0)
return node;
}
return NULL; return NULL;
} }
AWNode *AWList_iterator(AWList *list) AWNode *AWList_iterator(AWList *list)
......
...@@ -17,10 +17,10 @@ ...@@ -17,10 +17,10 @@
* @param delete_func function to free data * @param delete_func function to free data
*/ */
typedef struct _node { typedef struct _node {
struct _node* next; struct _node *next;
struct _node* prev; struct _node *prev;
void* data; void *data;
void (*delete_func)(void*); void (*delete_func)(void *);
} AWNode; } AWNode;
/** /**
...@@ -31,11 +31,11 @@ typedef struct _node { ...@@ -31,11 +31,11 @@ typedef struct _node {
* @param free_me need to free itself or not * @param free_me need to free itself or not
*/ */
typedef struct _linked_list { typedef struct _linked_list {
AWNode* head; /* dummy node */ AWNode *head; /* dummy node */
AWNode* tail; /* last node */ AWNode *tail; /* last node */
AWNode* iter; /* iterator */ AWNode *iter; /* iterator */
int free_me; int free_me;
int cnt; int cnt;
} AWList; } AWList;
/** /**
...@@ -44,8 +44,8 @@ typedef struct _linked_list { ...@@ -44,8 +44,8 @@ typedef struct _linked_list {
* @param pos AWNode *, Iterator variable * @param pos AWNode *, Iterator variable
* @param list List head * @param list List head
*/ */
#define AWList_for_each(pos, list) \ #define AWList_for_each(pos, list) \
for (pos = list->head; pos != NULL; pos = pos->next) for (pos = list->head; pos != NULL; pos = pos->next)
/** /**
* @brief allocate memory for list * @brief allocate memory for list
...@@ -54,7 +54,7 @@ typedef struct _linked_list { ...@@ -54,7 +54,7 @@ typedef struct _linked_list {
* *
* @return AWList * * @return AWList *
*/ */
AWList* AWList_init(AWList* list); AWList *AWList_init(AWList *list);
/** /**
* @brief delete the whole list * @brief delete the whole list
...@@ -62,12 +62,12 @@ AWList* AWList_init(AWList* list); ...@@ -62,12 +62,12 @@ AWList* AWList_init(AWList* list);
* @param list pointer of list * @param list pointer of list
* *
*/ */
void AWList_destroy(AWList* list); void AWList_destroy(AWList *list);
/** /**
* @brief free node, but retain list * @brief free node, but retain list
*/ */
void AWList_clear(AWList* list); void AWList_clear(AWList *list);
/** /**
* @brief delete node * @brief delete node
...@@ -76,7 +76,7 @@ void AWList_clear(AWList* list); ...@@ -76,7 +76,7 @@ void AWList_clear(AWList* list);
* @param node list node pointer * @param node list node pointer
* *
*/ */
void AWList_delete_node(AWList* list, AWNode* node); void AWList_delete_node(AWList *list, AWNode *node);
/** /**
* @brief insert node to the HEAD of list * @brief insert node to the HEAD of list
...@@ -86,7 +86,7 @@ void AWList_delete_node(AWList* list, AWNode* node); ...@@ -86,7 +86,7 @@ void AWList_delete_node(AWList* list, AWNode* node);
* @param delete_func function pointer to free data * @param delete_func function pointer to free data
* *
*/ */
void AWList_add_head(AWList* list, void* data, void (*delete_func)(void*)); void AWList_add_head(AWList *list, void *data, void (*delete_func)(void *));
/** /**
* @brief append node to tail of the list * @brief append node to tail of the list
...@@ -96,7 +96,7 @@ void AWList_add_head(AWList* list, void* data, void (*delete_func)(void*)); ...@@ -96,7 +96,7 @@ void AWList_add_head(AWList* list, void* data, void (*delete_func)(void*));
* @param delete_func function pointer to free data * @param delete_func function pointer to free data
* *
*/ */
void AWList_add_tail(AWList* list, void* data, void (*delete_func)(void*)); void AWList_add_tail(AWList *list, void *data, void (*delete_func)(void *));
/** /**
* @brief find assigned node via callback function * @brief find assigned node via callback function
...@@ -109,9 +109,8 @@ void AWList_add_tail(AWList* list, void* data, void (*delete_func)(void*)); ...@@ -109,9 +109,8 @@ void AWList_add_tail(AWList* list, void* data, void (*delete_func)(void*));
* *
* @return the pointer of the node if exists, NULL if not found * @return the pointer of the node if exists, NULL if not found
*/ */
AWNode* AWList_find_node(AWList* list, AWNode *AWList_find_node(AWList *list, void *data,
void* data, int (*cmp_callback)(void *, void *));
int (*cmp_callback)(void*, void*));
/** /**
* @brief list iterator * @brief list iterator
...@@ -122,6 +121,6 @@ AWNode* AWList_find_node(AWList* list, ...@@ -122,6 +121,6 @@ AWNode* AWList_find_node(AWList* list,
* *
* @return next node address or NULL * @return next node address or NULL
*/ */
AWNode* AWList_iterator(AWList* list); AWNode *AWList_iterator(AWList *list);
#endif /* AWLIST_H */ #endif /* AWLIST_H */
...@@ -8,27 +8,39 @@ static inline void mfree(void* arg) { ...@@ -8,27 +8,39 @@ static inline void mfree(void* arg) {
arg = NULL; arg = NULL;
} }
int main() { struct st {
AWList list = {0}; char *str;
AWList_init(&list); };
int* num[10] = {NULL}; int main()
for (int i = 0; i < 10; ++i) { {
num[i] = calloc(1, sizeof(int)); AWList *list = AWList_init(NULL);
*num[i] = i; AWNode *node = NULL;
AWList_add_tail(&list, num[i], mfree); int num[10] = { 0 };
} for (int i = 0; i < 10; ++i) {
/* num[i] = calloc(1, sizeof(int)); */
num[i] = i;
AWNode* node = NULL; AWList_add_tail(list, &num[i], 0);
for (node = list.head->next; node != list.tail->next; node = node->next) { }
printf("%d ", *(int*)node->data);
}
printf("\n");
AWList_clear(&list); while ((node = AWList_iterator(list))) {
/* while ((node = AWList_iterator(&list))) { printf("%d ", *(int*)node->data); } */ if (!node)
/* printf("\n"); */ break;
if (!node->data) break;
AWList_destroy(&list); int n = *(int *)node->data;
printf("%d ", n);
}
/* printf("\n"); */
/* AWList_clear(list); */
while ((node = AWList_iterator(list))) {
printf("%d ", *(int *)node->data);
}
printf("\n");
AWList_destroy(list);
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论