diff --git a/alloc.d b/alloc.d index 0261fc0..ca50f2c 100644 --- a/alloc.d +++ b/alloc.d @@ -91,7 +91,7 @@ AddArenaPool(Arena* arena) assert(node.value.mem != null, "Unable to allocate memory for arena"); - PushFront(&arena.pools, node, null); + SLLPushFront(&arena.pools, node, null); } T[] diff --git a/platform.d b/platform.d index 8a99aa3..d496a15 100644 --- a/platform.d +++ b/platform.d @@ -94,7 +94,7 @@ Push(Inputs* inputs, Input input, bool pressed) node.value.key = input; node.value.pressed = pressed; - PushFront(&inputs.list, node, null); + DLLPushFront(&inputs.list, node, null); } void @@ -107,7 +107,7 @@ Push(Inputs* inputs, i32 rel_x, i32 rel_y, u16 x, u16 y) node.value.x = x; node.value.y = y; - PushFront(&inputs.list, node, null); + DLLPushFront(&inputs.list, node, null); } struct PlatformWindow diff --git a/util.d b/util.d index 7defc92..fc02847 100644 --- a/util.d +++ b/util.d @@ -98,14 +98,8 @@ struct DLList(T) DNode!(T)* last; } -pragma(inline) bool -CheckNil(T)(DNode!(T)* nil, DNode!(T)* node) -{ - return node == null || node == nil; -} - void -ConcatInPlace(T)(DLList!(T)* list, DLList!(T)* to_concat) +ConcatInPlace(T)(T* list, T* to_concat) { if (to_concat.first) { @@ -120,18 +114,18 @@ ConcatInPlace(T)(DLList!(T)* list, DLList!(T)* to_concat) list.last = to_concat.last; } - memset(to_concat, 0, DLList!(T).sizeof); + memset(to_concat, 0, T.sizeof); } } -DNode!(T)* -Pop(T)(DLList!(T)* list, DNode!(T)* nil) +U* +SLLPop(T, U)(T* list, T* nil) { - DNode!(T)* node = list.first; + U* node = list.first; if (list.first == list.last) { - list.first = list.last = nil; + list.first = list.last = list.nil; } else { @@ -143,7 +137,7 @@ Pop(T)(DLList!(T)* list, DNode!(T)* nil) } void -Remove(T)(DLList!(T)* list, DNode!(T)* node, DNode!(T)* nil) +DLLRemove(T, U)(T* list, U* node, U* nil) { if (list.first == list.last) { @@ -169,7 +163,7 @@ Remove(T)(DLList!(T)* list, DNode!(T)* node, DNode!(T)* nil) } void -PushFront(T)(DLList!(T)* list, DNode!(T)* node, DNode!(T)* nil) +DLLPushFront(T, U)(T* list, U* node, U* nil) { if (CheckNil(nil, list.first)) { @@ -186,7 +180,7 @@ PushFront(T)(DLList!(T)* list, DNode!(T)* node, DNode!(T)* nil) } void -Push(T)(DLList!(T)* list, DNode!(T)* node, DNode!(T)* nil) +DLLPush(T, U)(T* list, U* node, U* nil) { if (CheckNil(nil, list.first)) { @@ -215,35 +209,15 @@ struct SLList(T) } pragma(inline) bool -CheckNil(T)(Node!(T)* nil, Node!(T)* node) +CheckNil(T)(T* nil, T* node) { return node == null || node == nil; } -void -ConcatInPlace(T)(SLList!(T)* list, SLList!(T)* to_concat) +pragma(inline) U* +SLLPop(T, U)(T* list, U* nil) { - if (to_concat.first) - { - if (list.first) - { - list.last.next = to_concat.first; - list.last = to_concat.last; - } - else - { - list.first = to_concat.first; - list.last = to_concat.last; - } - - memset(to_concat, 0, SLList!(T).sizeof); - } -} - -pragma(inline) Node!(T)* -Pop(T)(SLList!(T)*list, Node!(T)* nil) -{ - Node!(T)* node = list.first; + U* node = list.first; if (list.first == list.last) { @@ -258,7 +232,7 @@ Pop(T)(SLList!(T)*list, Node!(T)* nil) } pragma(inline) void -Remove(T)(SLList!(T)* list, Node!(T)* node, Node!(T)* prev, Node!(T)* nil) +SLLRemove(T, U)(T* list, U* node, U* prev, U* nil) { if (list.first == list.last) { @@ -282,7 +256,7 @@ Remove(T)(SLList!(T)* list, Node!(T)* node, Node!(T)* prev, Node!(T)* nil) } pragma(inline) void -PushFront(T)(SLList!(T)* list, Node!(T)* node, Node!(T)* nil) +SLLPushFront(T, U)(T* list, U* node, U* nil) { if (CheckNil(nil, list.first)) { @@ -297,7 +271,7 @@ PushFront(T)(SLList!(T)* list, Node!(T)* node, Node!(T)* nil) } pragma(inline) void -Push(T)(SLList!(T)* list, Node!(T)* node, Node!(T)* nil) +SLLPush(T, U)(T* list, U* node, U* nil) { if (CheckNil(nil, list.first)) { @@ -760,14 +734,14 @@ unittest foreach(u32 i, n; nodes) { nodes[i].value = i; - Push(&list, &nodes[i], null); + SLLPush(&list, &nodes[i], null); } u32 count = 0; u32[3] res1 = [0, 2, 4]; - Remove(&list, &nodes[1], &nodes[0], null); - Remove(&list, &nodes[3], &nodes[2], null); + SLLRemove(&list, &nodes[1], &nodes[0], null); + SLLRemove(&list, &nodes[3], &nodes[2], null); Node!(u32)* n = list.first; @@ -798,15 +772,15 @@ unittest count = 0; u32[5] res2 = [3, 0, 2, 4, 1]; - PushFront(&list, &nodes[3], null); - Push(&list, &nodes[1], null); + SLLPushFront(&list, &nodes[3], null); + SLLPush(&list, &nodes[1], null); TestSLList(&list, res2); count = 0; - Remove(&list, &nodes[3], null, null); - Remove(&list, &nodes[1], &nodes[4], null); + SLLRemove(&list, &nodes[3], null, null); + SLLRemove(&list, &nodes[1], &nodes[4], null); TestSLList(&list, res1); } @@ -860,7 +834,7 @@ unittest foreach(u32 i, n; nodes) { nodes[i].value = i; - Push(&list, &nodes[i], null); + DLLPush(&list, &nodes[i], null); } assert(list.first != null && list.last != null); @@ -870,21 +844,21 @@ unittest u32 count = 0; u32[3] res1 = [0, 2, 4]; - Remove(&list, &nodes[1], null); - Remove(&list, &nodes[3], null); + DLLRemove(&list, &nodes[1], null); + DLLRemove(&list, &nodes[3], null); TestDLList(&list, res1); count = 0; u32[5] res2 = [3, 0, 2, 4, 1]; - PushFront(&list, &nodes[3], null); - Push(&list, &nodes[1], null); + DLLPushFront(&list, &nodes[3], null); + DLLPush(&list, &nodes[1], null); TestDLList(&list, res2); - Remove(&list, &nodes[3], null); - Remove(&list, &nodes[1], null); + DLLRemove(&list, &nodes[3], null); + DLLRemove(&list, &nodes[1], null); TestDLList(&list, res1); }