commit 7292b5ed640c497645b319c208139ca8983c48e0
parent 08e4cfc029f07d21c7fef152649244417baf5792
Author: Benjamin Piaud <benjamin.piaud@meso-star.com>
Date: Thu, 22 Sep 2022 15:30:52 +0200
Continue with parsing
Diffstat:
2 files changed, 75 insertions(+), 0 deletions(-)
diff --git a/src/cg_parsing.c b/src/cg_parsing.c
@@ -126,3 +126,71 @@ exit:
error:
goto exit;
}
+
+
+res_T
+parse_building
+ (struct logger* logger,
+ struct txtrdr* reader,
+ struct building* building)
+{
+ res_T res = RES_OK;
+ char* line = NULL;
+
+ ERR(txtrdr_read_line(reader));
+ while (txtrdr_get_line(reader)){
+ size_t id = 0;
+ char* value = NULL;
+
+ line = remove_spaces(txtrdr_get_line(reader));
+ ERR(strtolower(line, line));
+
+ if (sscanf(line, "id=%lf", &id) == 1 ) {
+ building->id = id;
+ }
+
+ value = malloc(( strlen(line )) * sizeof(char));
+ if (sscanf(line, "extent=%s", value) == 1 ) {
+ size_t sz = 0;
+ if (cstr_to_list_double(value, ',', ground->extent, &sz, 4)
+ != RES_OK || sz != 4) {
+ logger_print(logger, LOG_ERROR,
+ "[ground] extent value not valid: 4 values required.\n");
+ res = RES_BAD_ARG;
+ if (value) free(value);
+ goto error;
+ }
+ }
+ if (value) free(value);
+
+ [>if new section goto check and exit<]
+ if (sscanf(line, "[%[^]]", value) == 1 ) {
+ goto check;
+ }
+ ERR(txtrdr_read_line(reader));
+ }
+
+check:
+ [>check depth<]
+ if (ground->depth <= 0) {
+ logger_print(logger, LOG_ERROR,
+ "[ground] depth value not valid: must be > 0.\n");
+ res = RES_BAD_ARG;
+ goto error;
+ }
+
+ [>check extent<]
+ if (ground->extent[0] >= ground->extent[1]
+ || ground->extent[2] >= ground->extent[3]) {
+ logger_print(logger, LOG_ERROR,
+ "[ground] extent value not valid: xmax must be > xmin and ymax must be > ymin.\n");
+ res = RES_BAD_ARG;
+ goto error;
+ }
+
+
+exit:
+ return res;
+error:
+ goto exit;
+}
diff --git a/src/cg_parsing.h b/src/cg_parsing.h
@@ -21,6 +21,7 @@
#include <rsys/logger.h>
#include "cg_ground.h"
+#include "cg_building.h"
#ifndef PARSING_H
#define PARSING_H
@@ -33,5 +34,11 @@ parse_ground
struct txtrdr* reader,
struct ground* ground);
+res_T
+parse_building
+ (struct logger* logger,
+ struct txtrdr* reader,
+ struct building* building);
+
#endif /*PARSING_H*/