about summary refs log tree commit diff stats
path: root/tools/iso/kernel.soso/list.h
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2020-01-01 18:22:19 -0800
committerKartik Agaram <vc@akkartik.com>2020-01-01 18:42:48 -0800
commit65409d2312e702a48d3cf5b32479d25266bda3c3 (patch)
tree62a7262fce61f2302109246da4536ce6f8e9ef80 /tools/iso/kernel.soso/list.h
parenta6da50ad30d2e1825575ffef497ab450a8f26e94 (diff)
downloadmu-65409d2312e702a48d3cf5b32479d25266bda3c3.tar.gz
5858
Move script to create a Soso boot image into a sub-directory.

I'm trying to streamline newcomer attention to just a couple of use cases.
Diffstat (limited to 'tools/iso/kernel.soso/list.h')
-rw-r--r--tools/iso/kernel.soso/list.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/tools/iso/kernel.soso/list.h b/tools/iso/kernel.soso/list.h
new file mode 100644
index 00000000..4e7831b2
--- /dev/null
+++ b/tools/iso/kernel.soso/list.h
@@ -0,0 +1,58 @@
+#ifndef LIST_H
+#define LIST_H
+
+#include "common.h"
+
+#define List_Foreach(listNode, list) for (ListNode* listNode = list->head; NULL != listNode ; listNode = listNode->next)
+
+typedef struct ListNode {
+    struct ListNode* previous;
+    struct ListNode* next;
+    void* data;
+} ListNode;
+
+typedef struct List {
+    struct ListNode* head;
+    struct ListNode* tail;
+} List;
+
+List* List_Create();
+void List_Clear(List* list);
+void List_Destroy(List* list);
+List* List_CreateClone(List* list);
+BOOL List_IsEmpty(List* list);
+void List_Append(List* list, void* data);
+void List_Prepend(List* list, void* data);
+ListNode* List_GetFirstNode(List* list);
+ListNode* List_GetLastNode(List* list);
+ListNode* List_FindFirstOccurrence(List* list, void* data);
+int List_FindFirstOccurrenceIndex(List* list, void* data);
+int List_GetCount(List* list);
+void List_RemoveNode(List* list, ListNode* node);
+void List_RemoveFirstNode(List* list);
+void List_RemoveLastNode(List* list);
+void List_RemoveFirstOccurrence(List* list, void* data);
+
+typedef struct Stack {
+    List* list;
+} Stack;
+
+Stack* Stack_Create();
+void Stack_Clear(Stack* stack);
+void Stack_Destroy(Stack* stack);
+BOOL Stack_IsEmpty(Stack* stack);
+void Stack_Push(Stack* stack, void* data);
+void* Stack_Pop(Stack* stack);
+
+typedef struct Queue {
+    List* list;
+} Queue;
+
+Queue* Queue_Create();
+void Queue_Clear(Queue* queue);
+void Queue_Destroy(Queue* queue);
+BOOL Queue_IsEmpty(Queue* queue);
+void Queue_Enqueue(Queue* queue, void* data);
+void* Queue_Dequeue(Queue* stack);
+
+#endif // LIST_H