solstice

Compute collected power and efficiencies of a solar plant
git clone git://git.meso-star.com/solstice.git
Log | Files | Refs | README | LICENSE

commit dfd964a5bf5872c914fd5da8b5cb59bc8192c79e
parent 491e8ffbfec89d039acaaf8a38fdee407b246cfc
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Thu, 26 Jan 2017 16:13:11 +0100

Fix a possible issue on the creation of a geomtry node

Diffstat:
Msrc/parser/solparser.c | 25+++++++++----------------
Msrc/solstice_entity.c | 13+++++++++++--
Msrc/solstice_node.c | 3+--
3 files changed, 21 insertions(+), 20 deletions(-)

diff --git a/src/parser/solparser.c b/src/parser/solparser.c @@ -2531,13 +2531,12 @@ parse_entity SETUP_MASK(TRANSFORM, "transform"); res = parse_transform (parser, doc, val, solent.translation, solent.rotation); - } else if (!strcmp((char*) key->data.scalar.value, "primary")) { + } else if(!strcmp((char*) key->data.scalar.value, "primary")) { long tmp; SETUP_MASK(PRIMARY, "primary"); res = parse_integer(parser, val, 0, 1, &tmp); solent.primary = (int)tmp; - } - else { + } else { log_err(parser, key, "unknown entity parameter `%s'.\n", key->data.scalar.value); res = RES_BAD_ARG; @@ -2556,26 +2555,20 @@ parse_entity #define CHECK_PARAM(Flag, Name) \ if(!(mask & BIT(Flag))) { \ - log_err(parser, entity, "the entity "Name" is missing.\n"); \ + log_err(parser, entity, "the entity "Name" parameter is missing.\n"); \ res = RES_BAD_ARG; \ goto error; \ } (void)0 - #define CHECK_NOPARAM(Flag, Name) \ - if(mask & BIT(Flag)) { \ - log_err(parser, entity, \ - "the entity "Name" is invalid in this context.\n"); \ - res = RES_BAD_ARG; \ - goto error; \ - } (void) 0 CHECK_PARAM(NAME, "name"); - if (solent.type == SOLPARSER_ENTITY_GEOMETRY) { + if(solent.type == SOLPARSER_ENTITY_GEOMETRY) { CHECK_PARAM(PRIMARY, "primary"); - } - else { - CHECK_NOPARAM(PRIMARY, "primary"); + } else if(mask & BIT(PRIMARY)) { + log_err(parser, entity, + "the entity primary parameter is invalid in this context.\n"); + res = RES_BAD_ARG; + goto error; } #undef CHECK_PARAM - #undef CHECK_NOPARAM psolent = darray_entity_data_get(&parser->entities) + isolent; res = solparser_entity_copy_and_clear(psolent, &solent); diff --git a/src/solstice_entity.c b/src/solstice_entity.c @@ -176,8 +176,6 @@ create_node(struct solstice* solstice, const struct solparser_entity* entity) break; case SOLPARSER_ENTITY_GEOMETRY: node = create_geometry_node(solstice, entity); - res = solstice_node_geometry_set_primary(node, entity->primary); - if (res != RES_OK) goto error; break; case SOLPARSER_ENTITY_PIVOT: node = create_pivot_node(solstice, entity); @@ -189,6 +187,17 @@ create_node(struct solstice* solstice, const struct solparser_entity* entity) goto error; } + /* Setup the primary parameter for the geometry entity */ + if(entity->type == SOLPARSER_ENTITY_GEOMETRY) { + res = solstice_node_geometry_set_primary(node, entity->primary); + if(res != RES_OK) { + fprintf(stderr, + "Could not define the primary parameter of the entity `%s'.\n", + str_cget(&entity->name)); + goto error; + } + } + /* Setup the entity receiver flags */ rcv = htable_receiver_find(&solstice->receivers, &entity); if(rcv) { diff --git a/src/solstice_node.c b/src/solstice_node.c @@ -223,8 +223,7 @@ solstice_node_ref_put(struct solstice_node* node) res_T solstice_node_geometry_set_primary - (struct solstice_node* node, - const int is_primary) + (struct solstice_node* node, const int is_primary) { ASSERT(node && (!is_primary || node->type == SOLSTICE_NODE_GEOMETRY)); return ssol_instance_sample(node->instance, is_primary);