Add single/double linked list macros
This commit is contained in:
+113
@@ -515,6 +515,8 @@ void print_runes(Str str)
|
||||
|
||||
void string_test_utf8(void)
|
||||
{
|
||||
TRACEF("\n");
|
||||
|
||||
Str str1 = S("Test 1ø2 ☺");
|
||||
|
||||
TRACEF("str1:\n");
|
||||
@@ -537,6 +539,8 @@ void string_test_utf8(void)
|
||||
|
||||
void string_test_hex(void)
|
||||
{
|
||||
TRACEF("\n");
|
||||
|
||||
MArena arena;
|
||||
U8 data[4096];
|
||||
marena_init(&arena, data, sizeof data);
|
||||
@@ -557,8 +561,115 @@ void string_test_hex(void)
|
||||
|
||||
Str str2_decoded = str_hex_decode_alloc(&allocator, str2_encoded);
|
||||
printf("str2_decoded: '%.*s'\n", str2_decoded.len, str2_decoded.str);
|
||||
}
|
||||
|
||||
typedef struct StrSLNode StrSLNode;
|
||||
struct StrSLNode {
|
||||
Str str;
|
||||
StrSLNode *next;
|
||||
};
|
||||
|
||||
typedef struct StrSList StrSList;
|
||||
struct StrSList {
|
||||
StrSLNode *first;
|
||||
StrSLNode **last;
|
||||
};
|
||||
|
||||
void string_test_slist(void)
|
||||
{
|
||||
TRACEF("\n");
|
||||
|
||||
Str str1 = S("one");
|
||||
Str str2 = S("two");
|
||||
Str str3 = S("three");
|
||||
StrSList strlist = {};
|
||||
StrSLNode n1 = {str1, NULL};
|
||||
StrSLNode n2 = {str2, NULL};
|
||||
StrSLNode n3 = {str3, NULL};
|
||||
|
||||
SListInit(&strlist);
|
||||
SListAddFirst(&strlist, &n1);
|
||||
SListAddFirst(&strlist, &n2);
|
||||
SListAddFirst(&strlist, &n3);
|
||||
TRACEF("List test first\n");
|
||||
|
||||
for (StrSLNode *n = strlist.first; n != NULL; n = n->next) {
|
||||
printf("Node: %.*s\n", n->str.len, n->str.str);
|
||||
}
|
||||
TRACEF("List test first done\n");
|
||||
SListInit(&strlist);
|
||||
SListAddLast(&strlist, &n1);
|
||||
SListAddLast(&strlist, &n2);
|
||||
SListAddLast(&strlist, &n3);
|
||||
SListRemoveFirst(&strlist);
|
||||
TRACEF("List test last\n");
|
||||
|
||||
for (StrSLNode *n = strlist.first; n != NULL; n = n->next) {
|
||||
printf("Node: %.*s\n", n->str.len, n->str.str);
|
||||
}
|
||||
TRACEF("List test last done\n");
|
||||
|
||||
}
|
||||
typedef struct StrDLNode StrDLNode;
|
||||
struct StrDLNode {
|
||||
Str str;
|
||||
StrDLNode *next;
|
||||
StrDLNode *prev;
|
||||
};
|
||||
|
||||
typedef struct StrDList StrDList;
|
||||
struct StrDList {
|
||||
StrDLNode *first;
|
||||
StrDLNode *last;
|
||||
};
|
||||
|
||||
void string_test_dlist(void)
|
||||
{
|
||||
TRACEF("\n");
|
||||
|
||||
Str str1 = S("one");
|
||||
Str str2 = S("two");
|
||||
Str str3 = S("three");
|
||||
Str str4 = S("four");
|
||||
StrDList strlist = {};
|
||||
StrDLNode n1 = {str1, NULL, NULL};
|
||||
StrDLNode n2 = {str2, NULL, NULL};
|
||||
StrDLNode n3 = {str3, NULL, NULL};
|
||||
StrDLNode n4 = {str4, NULL, NULL};
|
||||
|
||||
DListInit(&strlist);
|
||||
DListAddFirst(&strlist, &n1);
|
||||
DListAddFirst(&strlist, &n2);
|
||||
DListAddFirst(&strlist, &n3);
|
||||
TRACEF("List test first\n");
|
||||
|
||||
for (StrDLNode *n = strlist.first; n != NULL; n = n->next) {
|
||||
printf("Node: %.*s\n", n->str.len, n->str.str);
|
||||
}
|
||||
TRACEF("List test first done\n");
|
||||
|
||||
DListInit(&strlist);
|
||||
DListAddLast(&strlist, &n2);
|
||||
DListAddLast(&strlist, &n3);
|
||||
DListAddLast(&strlist, &n4);
|
||||
DListAddFirst(&strlist, &n1);
|
||||
|
||||
TRACEF("List test full\n");
|
||||
|
||||
for (StrDLNode *n = strlist.first; n != NULL; n = n->next) {
|
||||
printf("Node: %.*s\n", n->str.len, n->str.str);
|
||||
}
|
||||
TRACEF("List test full done\n");
|
||||
|
||||
DListRemove(&strlist, &n1);
|
||||
DListRemoveFirst(&strlist);
|
||||
DListRemoveLast(&strlist);
|
||||
TRACEF("List test tail removed\n");
|
||||
|
||||
for (StrDLNode *n = strlist.first; n != NULL; n = n->next) {
|
||||
printf("Node: %.*s\n", n->str.len, n->str.str);
|
||||
}
|
||||
TRACEF("List test tail removed done\n");
|
||||
|
||||
}
|
||||
|
||||
@@ -580,6 +691,8 @@ int main(int argc, char *argv[])
|
||||
string_test_join();
|
||||
string_test_utf8();
|
||||
string_test_hex();
|
||||
string_test_slist();
|
||||
string_test_dlist();
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user