push
This commit is contained in:
@@ -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);
|
||||
}*/
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
#ifndef STRANGE_LIST_H
|
||||
#define STRANGE_LIST_H
|
||||
#include <stdio.h>
|
||||
enum data_type{
|
||||
|
||||
FLOAT_TYPE,
|
||||
INT_TYPE,
|
||||
STRING_TYPE,
|
||||
};
|
||||
|
||||
union value {
|
||||
float f;
|
||||
int i;
|
||||
char *s;
|
||||
};
|
||||
|
||||
struct data{
|
||||
|
||||
enum data_type type;
|
||||
union value value;
|
||||
};
|
||||
|
||||
void print_strange_list(const struct data *list, unsigned int size);
|
||||
int remove_at_strange_list(struct data **list, unsigned int *size, int index);
|
||||
int list_strange_list(const char *filename, const struct data *list, unsigned int size);
|
||||
int append_strange_list(struct data **list, unsigned int *size, struct data element);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user