aboutsummaryrefslogtreecommitdiff
path: root/src/lib/ll.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/ll.c')
-rw-r--r--src/lib/ll.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/lib/ll.c b/src/lib/ll.c
new file mode 100644
index 0000000..6d96f45
--- /dev/null
+++ b/src/lib/ll.c
@@ -0,0 +1,32 @@
+#include "../lib/ll.h"
+#include "../lib/mem.h"
+
+struct LL* new(void* val)
+{
+ struct LL* ll = (struct LL*)malloc(sizeof(struct LL));
+ ll->prev = ll;
+ ll->next = ll;
+ ll->data = val;
+ return ll;
+}
+
+void push(struct LL* l, void* val)
+{
+ struct LL* ll = (struct LL*)malloc(sizeof(struct LL));
+ ll->prev = l->prev;
+ ll->next = l;
+ ll->prev->next = ll;
+ l->prev = ll;
+ ll->data = val;
+}
+
+void remove(struct LL* l, unsigned long idx)
+{
+ struct LL* t = l;
+ for(unsigned long i = 0; i < idx; i++) {
+ t = t->next;
+ }
+ t->prev->next = t->next;
+ t->next->prev = t->prev;
+ free(t);
+}