diff options
Diffstat (limited to 'kernel.soso/list.c')
-rw-r--r-- | kernel.soso/list.c | 141 |
1 files changed, 47 insertions, 94 deletions
diff --git a/kernel.soso/list.c b/kernel.soso/list.c index 09883eba..5565df15 100644 --- a/kernel.soso/list.c +++ b/kernel.soso/list.c @@ -2,8 +2,7 @@ #include "common.h" #include "list.h" -List* List_Create() -{ +List* List_Create() { List* list = (List*)kmalloc(sizeof(List)); memset((uint8*)list, 0, sizeof(List)); @@ -11,12 +10,10 @@ List* List_Create() return list; } -void List_Clear(List* list) -{ +void List_Clear(List* list) { ListNode* listNode = list->head; - while (NULL != listNode) - { + while (NULL != listNode) { ListNode* next = listNode->next; kfree(listNode); @@ -28,41 +25,35 @@ void List_Clear(List* list) list->tail = NULL; } -void List_Destroy(List* list) -{ +void List_Destroy(List* list) { List_Clear(list); kfree(list); } -List* List_CreateClone(List* list) -{ +List* List_CreateClone(List* list) { List* newList = List_Create(); - List_Foreach(n, list) - { + List_Foreach(n, list) { List_Append(newList, n->data); } return newList; } -BOOL List_IsEmpty(List* list) -{ +BOOL List_IsEmpty(List* list) { //At empty state, both head and tail are null! return list->head == NULL; } -void List_Append(List* list, void* data) -{ +void List_Append(List* list, void* data) { ListNode* node = (ListNode*)kmalloc(sizeof(ListNode)); memset((uint8*)node, 0, sizeof(ListNode)); node->data = data; //At empty state, both head and tail are null! - if (NULL == list->tail) - { + if (NULL == list->tail) { list->head = node; list->tail = node; @@ -75,16 +66,14 @@ void List_Append(List* list, void* data) list->tail = node; } -void List_Prepend(List* list, void* data) -{ +void List_Prepend(List* list, void* data) { ListNode* node = (ListNode*)kmalloc(sizeof(ListNode)); memset((uint8*)node, 0, sizeof(ListNode)); node->data = data; //At empty state, both head and tail are null! - if (NULL == list->tail) - { + if (NULL == list->tail) { list->head = node; list->tail = node; @@ -97,22 +86,17 @@ void List_Prepend(List* list, void* data) list->head = node; } -ListNode* List_GetFirstNode(List* list) -{ +ListNode* List_GetFirstNode(List* list) { return list->head; } -ListNode* List_GetLastNode(List* list) -{ +ListNode* List_GetLastNode(List* list) { return list->tail; } -ListNode* List_FindFirstOccurrence(List* list, void* data) -{ - List_Foreach(n, list) - { - if (n->data == data) - { +ListNode* List_FindFirstOccurrence(List* list, void* data) { + List_Foreach(n, list) { + if (n->data == data) { return n; } } @@ -120,14 +104,11 @@ ListNode* List_FindFirstOccurrence(List* list, void* data) return NULL; } -int List_FindFirstOccurrenceIndex(List* list, void* data) -{ +int List_FindFirstOccurrenceIndex(List* list, void* data) { int result = 0; - List_Foreach(n, list) - { - if (n->data == data) - { + List_Foreach(n, list) { + if (n->data == data) { return result; } @@ -137,76 +118,61 @@ int List_FindFirstOccurrenceIndex(List* list, void* data) return -1; } -int List_GetCount(List* list) -{ +int List_GetCount(List* list) { int result = 0; - List_Foreach(n, list) - { + List_Foreach(n, list) { ++result; } return result; } -void List_RemoveNode(List* list, ListNode* node) -{ - if (NULL == node) - { +void List_RemoveNode(List* list, ListNode* node) { + if (NULL == node) { return; } - if (NULL != node->previous) - { + if (NULL != node->previous) { node->previous->next = node->next; } - if (NULL != node->next) - { + if (NULL != node->next) { node->next->previous = node->previous; } - if (node == list->head) - { + if (node == list->head) { list->head = node->next; } - if (node == list->tail) - { + if (node == list->tail) { list->tail = node->previous; } kfree(node); } -void List_RemoveFirstNode(List* list) -{ - if (NULL != list->head) - { +void List_RemoveFirstNode(List* list) { + if (NULL != list->head) { List_RemoveNode(list, list->head); } } -void List_RemoveLastNode(List* list) -{ - if (NULL != list->tail) - { +void List_RemoveLastNode(List* list) { + if (NULL != list->tail) { List_RemoveNode(list, list->tail); } } -void List_RemoveFirstOccurrence(List* list, void* data) -{ +void List_RemoveFirstOccurrence(List* list, void* data) { ListNode* node = List_FindFirstOccurrence(list, data); - if (NULL != node) - { + if (NULL != node) { List_RemoveNode(list, node); } } -Stack* Stack_Create() -{ +Stack* Stack_Create() { Stack* stack = (Stack*)kmalloc(sizeof(Stack)); memset((uint8*)stack, 0, sizeof(Stack)); @@ -216,36 +182,30 @@ Stack* Stack_Create() return stack; } -void Stack_Clear(Stack* stack) -{ +void Stack_Clear(Stack* stack) { List_Clear(stack->list); } -void Stack_Destroy(Stack* stack) -{ +void Stack_Destroy(Stack* stack) { List_Destroy(stack->list); kfree(stack); } -BOOL Stack_IsEmpty(Stack* stack) -{ +BOOL Stack_IsEmpty(Stack* stack) { return List_IsEmpty(stack->list); } -void Stack_Push(Stack* stack, void* data) -{ +void Stack_Push(Stack* stack, void* data) { List_Prepend(stack->list, data); } -void* Stack_Pop(Stack* stack) -{ +void* Stack_Pop(Stack* stack) { void* result = NULL; ListNode* node = List_GetFirstNode(stack->list); - if (NULL != node) - { + if (NULL != node) { result = node->data; List_RemoveNode(stack->list, node); @@ -254,8 +214,7 @@ void* Stack_Pop(Stack* stack) return result; } -Queue* Queue_Create() -{ +Queue* Queue_Create() { Queue* queue = (Queue*)kmalloc(sizeof(Queue)); memset((uint8*)queue, 0, sizeof(Queue)); @@ -265,36 +224,30 @@ Queue* Queue_Create() return queue; } -void Queue_Clear(Queue* queue) -{ +void Queue_Clear(Queue* queue) { List_Clear(queue->list); } -void Queue_Destroy(Queue* queue) -{ +void Queue_Destroy(Queue* queue) { List_Destroy(queue->list); kfree(queue); } -BOOL Queue_IsEmpty(Queue* queue) -{ +BOOL Queue_IsEmpty(Queue* queue) { return List_IsEmpty(queue->list); } -void Queue_Enqueue(Queue* queue, void* data) -{ +void Queue_Enqueue(Queue* queue, void* data) { List_Append(queue->list, data); } -void* Queue_Dequeue(Queue* stack) -{ +void* Queue_Dequeue(Queue* stack) { void* result = NULL; ListNode* node = List_GetFirstNode(stack->list); - if (NULL != node) - { + if (NULL != node) { result = node->data; List_RemoveNode(stack->list, node); |