From 58cfb25971dfce4ff913b3d03a8c996024b53649 Mon Sep 17 00:00:00 2001 From: AnonymusRaccoon Date: Mon, 9 Dec 2019 17:40:37 +0100 Subject: [PATCH] Adding float suppotr --- Makefile | 10 +++++++--- include/xml_internal.h | 3 ++- src/floatutils.c | 20 ++++++++++++++++++++ src/xmlget.c | 13 +++++++++++++ 4 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 src/floatutils.c diff --git a/Makefile b/Makefile index cb20025..f336710 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,8 @@ SRC = src/xmlparser.c \ src/xmlproperties.c \ src/rawnode.c \ src/xml_destroy.c \ - src/xmlget.c + src/xmlget.c \ + src/floatutils.c OBJ = $(SRC:%.c=%.o) @@ -60,8 +61,11 @@ fclean: clean re: fclean all dbg: CFLAGS += -g -dbg: fclean -dbg: $(OBJ) +dbg: re + +main-dbg: CFLAGS += -g +main-dbg: fclean +main-dbg: $(OBJ) $(CC) -o $(FT) $(SRC) $(TEST_MAIN) $(CFLAGS) $(LDFLAGS) .PHONY: all build clean fclean diff --git a/include/xml_internal.h b/include/xml_internal.h index 651e7ac..65ace57 100644 --- a/include/xml_internal.h +++ b/include/xml_internal.h @@ -16,4 +16,5 @@ char *trimstr(char *str); int xml_getstringdata(node *n, char **nodestr); int xml_checkclosing(node *n, char **nodestr); dictionary *property_add(dictionary *list, dictionary *property); -node *xml_parsenode(char **nodestr); \ No newline at end of file +node *xml_parsenode(char **nodestr); +int get_int_size(int n); \ No newline at end of file diff --git a/src/floatutils.c b/src/floatutils.c new file mode 100644 index 0000000..e4f59c3 --- /dev/null +++ b/src/floatutils.c @@ -0,0 +1,20 @@ +/* +** EPITECH PROJECT, 2019 +** MUL_my_runner_2019 +** File description: +** floatutils +*/ + +#include "my.h" + +int get_int_size(int n) +{ + int base_size = my_strlen("0123456789"); + int i = 1; + + while (n >= base_size) { + n /= base_size; + i++; + } + return (i); +} \ No newline at end of file diff --git a/src/xmlget.c b/src/xmlget.c index 10cb64b..ea13499 100644 --- a/src/xmlget.c +++ b/src/xmlget.c @@ -6,6 +6,7 @@ */ #include "xml.h" +#include "xml_internal.h" #include "my.h" #include @@ -30,9 +31,21 @@ int xml_getintprop(node *n, const char *key) float xml_getfloatprop(node *n, const char *key) { char *prop = xml_getproperty(n, key); + float nbr; + int deci; if (!prop) return (0); + for (int i = 0; prop[i]; i++) { + if (!is_num(prop[i])) + return (-1); + } + nbr = (float)my_getnbr(prop); + prop += get_int_size(nbr); + if (*prop) { + deci = my_getnbr(prop + 1); + nbr += deci / (float)(get_int_size(deci) + 1); + } return (0); }