From 3a0bd826dad37adf24a03f1f86de5c654f3f5111 Mon Sep 17 00:00:00 2001
From: Alec <alec.schmidt@hesge.ch>
Date: Tue, 22 Feb 2022 16:02:10 +0100
Subject: [PATCH] kek

---
 TP6      | Bin 0 -> 38280 bytes
 main.c   |   6 ++
 makefile |  19 +++++++
 vector.c | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 vector.h |  21 +++++++
 5 files changed, 211 insertions(+)
 create mode 100755 TP6
 create mode 100644 main.c
 create mode 100644 makefile
 create mode 100644 vector.c
 create mode 100644 vector.h

diff --git a/TP6 b/TP6
new file mode 100755
index 0000000000000000000000000000000000000000..2f98da30d9fba3114c6af65c833191964d6ad880
GIT binary patch
literal 38280
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
P?{q;FWTI(6<1zpMh$#oH

literal 0
HcmV?d00001

diff --git a/main.c b/main.c
new file mode 100644
index 0000000..fcbacee
--- /dev/null
+++ b/main.c
@@ -0,0 +1,6 @@
+#include "vector.h"
+
+int main()
+{
+    return 0;
+}
\ No newline at end of file
diff --git a/makefile b/makefile
new file mode 100644
index 0000000..f10629e
--- /dev/null
+++ b/makefile
@@ -0,0 +1,19 @@
+CC=gcc
+FLAGS= -Wall -Werror
+CFLAGS= -g -std=c99
+LDFLAGS= -fsanitize=address -fsanitize=leak
+
+
+main: main.o vector.o
+	$(CC) main.o vector.o -o TP6 $(CFLAGS) $(LDFLAGS)
+
+main.o: main.c
+	$(CC) $(FLAGS) $(CFLAGS) $(LDFLAGS) -c $^
+
+vector.o: vector.c vector.h
+	$(CC) $(FLAGS) $(CFLAGS) $(LDFLAGS) -c $<
+
+clean:
+	rm -f *.o main
+
+rebuild: clean TP6
\ No newline at end of file
diff --git a/vector.c b/vector.c
new file mode 100644
index 0000000..34e3cab
--- /dev/null
+++ b/vector.c
@@ -0,0 +1,165 @@
+/*
+ * Author : Alec Schmidt
+ * Date : 22.02.2022
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <stdbool.h>
+#include "vector.h"
+
+#define VECTOR_INIT_CAPACITY 4
+
+typedef struct _vector {
+    type *data; // actual content of the vector
+    int capacity; // capacity allocated
+    int length; // actual length
+} vector;
+
+
+vector vector_create()
+{
+    vector v;
+    v.capacity = VECTOR_INIT_CAPACITY;
+    v.length = 0;
+    v.data = malloc(VECTOR_INIT_CAPACITY * sizeof(type));
+
+    return v;
+}
+
+int vector_lenght(vector *v)
+{
+    return v->length;
+}
+
+void vector_push(vector *v, type item)
+{
+    if (v->length == v->capacity)
+    {
+        v->capacity *=2;
+        v->data = realloc(v->data, v->capacity * sizeof(type));
+        assert(v->data!=NULL);
+    }
+
+    v->data[v->length] = item;
+    v->length++;
+}
+
+void vector_pop(vector *v, type item)
+{
+    assert(v->length>0);
+    if (v->length-1 == v->capacity/2)
+    {
+        v->capacity /=2;
+        v->data = realloc(v->data, v->capacity * sizeof(type));
+        assert(v->data!=NULL);
+    }
+
+    v->length--;
+}
+
+void vector_set(vector *v, int index, type element)
+{
+    assert(index <= v->length && index > 0);
+
+    v->data[index] = element;
+}
+
+type vector_get(vector *v, int index)
+{
+    assert(index <= v->length && index > 0);
+    return v->data[index];
+}
+
+void vector_remove(vector *v, int index)
+{
+    assert(index <= v->length && index > 0);
+
+    for (int i = index; i < v->length; i++)
+    {
+        v->data[i] = v->data[i+1];
+    }
+    v->length--;
+}
+
+void vector_insert(vector *v, type element, int index)
+{
+    assert(index <= v->length && index > 0);
+
+    if (v->capacity == v->length)
+    {
+        v->capacity *=2;
+        v->data = realloc(v->data, v->capacity * sizeof(type));
+        assert(v->data!=NULL);
+    }
+
+    v->length++;
+    for (size_t i = v->length-1; i > index; i--)
+    {
+        v->data[i] = v->data[i-1];
+    }
+
+    v->data[index] = element;
+}
+
+void vector_empty(vector *v)
+{
+    free(v->data);
+    vector v2 = vector_create();
+    v = &v2;
+}
+
+void vector_free(vector *v)
+{
+    free(v->data);
+    free(v);
+}
+
+void vector_print(vector *v, void (*print)(type))
+{
+    printf("[");
+    for (int i = 0; i < v->length; i++)
+    {
+        print(v->data[i]);
+        printf(",");
+    }
+    printf("]"); 
+}
+
+vector vector_map(vector *v, type (*f)(type))
+{
+    vector v2 = vector_create();
+
+    for (int i = 0; i < v->length; i++)
+    {
+        vector_push(&v2, f(v->data[i]));
+    }
+    
+    return v2;
+}
+
+vector vector_filter(vector *v, bool (*f)(type))
+{
+    vector v2 = vector_create();
+
+    for (int i = 0; i < v->length; i++)
+    {
+        if (f(v->data[i]))
+        {
+            vector_push(&v2, v->data[i]);
+        }
+        
+    }
+    return v2;
+}
+
+type vector_reduce(vector *v, type neutral, type (*f)(type, type))
+{
+    type result = neutral;
+    
+    for (int i = 0; i < v->length; i++)
+    {
+        f(neutral, v->data[i]);
+    }
+    return result;
+}
\ No newline at end of file
diff --git a/vector.h b/vector.h
new file mode 100644
index 0000000..80236af
--- /dev/null
+++ b/vector.h
@@ -0,0 +1,21 @@
+#ifndef _VECTOR_H_
+#define _VECTOR_H_
+
+typedef int type;
+typedef struct _vector vector;
+vector vector_create();
+int vector_lenght(vector *v);
+void vector_push(vector *v, type item);
+void vector_pop(vector *v, type item);
+void vector_set(vector *v, int index, type element);
+type vector_get(vector *v, int index);
+void vector_remove(vector *v, int index);
+void vector_insert(vector *v, type element, int index);
+void vector_empty(vector *v);
+void vector_free(vector *v);
+void vector_print(vector *v, void (*print)(type));
+vector vector_map(vector *v, type (*f)(type));
+vector vector_filter(vector *v, bool (*f)(type));
+type vector_reduce(vector *v, type neutral, type (*f)(type, type));
+
+#endif
\ No newline at end of file
-- 
GitLab