From 49026803b128465de360132ecd7e0eb17318a593 Mon Sep 17 00:00:00 2001 From: Lucas Date: Thu, 9 Apr 2026 19:05:32 +0200 Subject: [PATCH] toolbox.c --- functional_market/Fundamentals/test | Bin 0 -> 20720 bytes functional_market/Fundamentals/toolbox.c | 154 +++++++++++++++++++++-- 2 files changed, 144 insertions(+), 10 deletions(-) create mode 100755 functional_market/Fundamentals/test diff --git a/functional_market/Fundamentals/test b/functional_market/Fundamentals/test new file mode 100755 index 0000000000000000000000000000000000000000..ab8fa6773d45c5cedccfd39df48b08ecd54f191c GIT binary patch literal 20720 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 M5)u)Uf(d2+1K1-^wg3PC literal 0 HcmV?d00001 diff --git a/functional_market/Fundamentals/toolbox.c b/functional_market/Fundamentals/toolbox.c index e546950..eb07661 100644 --- a/functional_market/Fundamentals/toolbox.c +++ b/functional_market/Fundamentals/toolbox.c @@ -1,18 +1,48 @@ #include "toolbox.h" - +#include +#include +#include struct array *sort(struct array *arr, comparator f) { - (void)arr; - (void)f; - return NULL; + + void *temp = malloc(arr->elem_size); + + for(size_t index1 = 0; index1 < arr->len - 1; index1 ++ ){ + + for(size_t index2 = index1; index2 < arr->len; index2 ++){ + + void *data1 = arr->data + index1 * arr->elem_size; + void *data2 = arr->data + index2 * arr->elem_size; + + if(f(data1,data2) > 0){ + memcpy(temp, data2, arr->elem_size); + memcpy(data2, data1, arr->elem_size); + memcpy(data1, temp, arr->elem_size); + } + } + } + + free(temp); + return arr; + + } struct array *map(struct array *arr, size_t output_size, mapper f) { - (void)arr; - (void)f; - (void)output_size; - return NULL; + + void *data = calloc(arr->len, output_size); + if(!data) return NULL; + + size_t index = 0; + while (index != arr->len){ + f(data[index], arr->data + index * arr->elem_size); + index ++; + } + memcpy(arr->data, data); + arr->elem_size = output_size; + + return arr; } struct array *filter(struct array *arr, predicate f) @@ -32,6 +62,110 @@ void *reduce(struct array *arr, void *start_value, reducer f) void foreach(struct array *arr, acceptor f) { - (void)arr; - (void)f; +// arr.data est un array de x valeurs + size_t index = 0; + + while(index != arr->len){ + + f(arr->data + index * arr->elem_size); + index ++; + } } + +#include +#include + +void next(double *res, int *n) +{ + *res = *n + 1; +} + +void print_double(double *n) +{ + printf("%.1lf\n", *n); +} + +int main(void) +{ + struct array arr = { + .data = calloc(4, sizeof(int)), + .len = 4, + .elem_size = sizeof(int), + }; + + int *data = arr.data; + data[0] = 0; + data[1] = 1; + data[2] = 2; + data[3] = 3; + + foreach(map(&arr, sizeof(double), (mapper)&next), (acceptor)&print_double); + + free(arr.data); +} + + + +/* +#include +#include + +int reverse(int *a, int *b) +{ + return *b - *a; +} + +void print_int(int *n) +{ + printf("%d\n", *n); +} + +int main(void) +{ + struct array arr = { + .data = calloc(4, sizeof(int)), + .len = 4, + .elem_size = sizeof(int), + }; + + int *data = arr.data; + data[0] = 0; + data[1] = 1; + data[2] = 2; + data[3] = 3; + + foreach(sort(&arr, (comparator)&reverse), (acceptor)&print_int); + + free(arr.data); +} +*/ + + +/* +#include +#include + +void print_int(int *n) +{ + printf("%d\n", *n); +} + +int main(void) +{ + struct array arr = { + .data = calloc(4, sizeof(int)), + .len = 4, + .elem_size = sizeof(int), + }; + + int *data = arr.data; + data[0] = 0; + data[1] = 1; + data[2] = 2; + data[3] = 3; + + foreach(&arr, (acceptor)&print_int); + + free(arr.data); +} +*/