This commit is contained in:
2026-03-02 02:12:28 +01:00
parent 88b0c96605
commit 77cd47526c
7 changed files with 572 additions and 0 deletions
+146
View File
@@ -0,0 +1,146 @@
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include "strange_list.h"
void print_strange_list(const struct data *list, unsigned int size){
if(!list) return ;
for (unsigned int i = 0; i < size; i ++){
if(list[i].type == INT_TYPE) printf("INT : %i\n", list[i].value.i);
else if (list[i].type == FLOAT_TYPE) printf("FLOAT : %f\n", list[i].value.f);
else printf("STRING : %s\n", list[i].value.s);
}
}
int append_strange_list(struct data **list, unsigned int *size, struct data element){
if(!list || size == 0) return -1;
struct data *tmp = realloc(*list, (*size + 1) * sizeof(struct data));
if(!tmp) return -2;
*list = tmp;
(*list)[*size ] = element;
(*size) ++;
return 0;
}
int remove_at_strange_list(struct data **list, unsigned int *size, int index){
if(!list || *size == 0 || index < 0 || index > (int)*size) return -1;
/*if(*size == 1 && index == 0){
free(*list);
*list = NULL;
*size = 0;
return 0;
//free(list);
}*/
for (unsigned int i = index; i < *size; i ++){
(*list)[i] = (*list)[i + 1];
}
(*size) --;
if(*size > 0) *list = realloc(*list, (*size) * sizeof(struct data));
else {
free(*list);
*list = NULL;
//free(list);
}
return 0;
}
int list_strange_list(const char *filename, const struct data *list, unsigned int size){
if(!filename || !list) return -1;
FILE *file = fopen(filename, "w");
if(!file) return -2;
for (unsigned int i = 0; i < size; i ++){
if(list[i].type == INT_TYPE) fprintf(file, "INT : %i\n", list[i].value.i);
else if (list[i].type == FLOAT_TYPE) fprintf(file, "FLOAT : %f\n", list[i].value.f);
else fprintf(file, "STRING : %s\n", list[i].value.s);
}
return 0;
}
/*
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
struct data *list = NULL;
unsigned int size = 0;
struct data elt1 = { .type = INT_TYPE, .value = { .i = 42 } };
struct data elt2 = { .type = STRING_TYPE, .value = { .s = "QUOI" } };
//int err = append_strange_list(&list, &size, elt1);
//printf("%d\n", err);
//append_strange_list(&list, &size, elt2);
//printf("%d\n", err);
//append_strange_list(&list, NULL, elt1);
//printf("%d\n", err);
int err = remove_at_strange_list(&list, &size, 1);
printf("%d\n", err);
err = remove_at_strange_list(&list, &size, 42);
printf("%d\n", err);
print_strange_list(list, size);
free(list);
struct data *list = NULL;
unsigned int size = 0;
struct data elt1 = { .type = INT_TYPE, .value = { .i = 42 } };
struct data elt2 = { .type = STRING_TYPE, .value = { .s = "FEUR" } };
append_strange_list(&list, &size, elt1);
append_strange_list(&list, &size, elt2);
append_strange_list(&list, &size, elt2);
int err = remove_at_strange_list(&list, &size, 1);
printf("%d\n", err);
err = remove_at_strange_list(&list, &size, 42);
printf("%d\n", err);
print_strange_list(list, size);
free(list);
struct data *list = NULL;
unsigned int size = 0;
struct data elt1 = { .type = INT_TYPE, .value = { .i = 42 } };
struct data elt2 = { .type = STRING_TYPE, .value = { .s = "welcome2u" } };
append_strange_list(&list, &size, elt1);
append_strange_list(&list, &size, elt2);
int err = list_strange_list("/tmp/list", list, size);
printf("%d\n", err);
err = list_strange_list("/", list, size);
printf("%d\n", err);
free(list);
}*/