147 lines
3.5 KiB
C
147 lines
3.5 KiB
C
#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);
|
|
}*/
|