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 ac865761ffd7007d8ac75386dc4a3ac46d1213fc
parent b37b226deae42166df3e611f7ce791763a076346
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Tue, 22 Nov 2016 12:09:19 +0100

Add and test the iterator on parsed geometries

Diffstat:
Msrc/parser/solstice_parser.c | 22++++++++++++++++++++--
Msrc/parser/solstice_parser.h | 44++++++++++++++++++++++++++++++++++++++++++++
Msrc/parser/test_solstice_parser2.c | 19++++++++++++++++++-
3 files changed, 82 insertions(+), 3 deletions(-)

diff --git a/src/parser/solstice_parser.c b/src/parser/solstice_parser.c @@ -2986,7 +2986,7 @@ solstice_parser_get_shape_stl return darray_impgeom_cdata_get(&parser->stls) + impgeom.i; } -const struct solstice_sun* +const struct solstice_sun* solstice_parser_get_sun(const struct solstice_parser* parser) { ASSERT(parser && parser->sun_key); @@ -3027,5 +3027,23 @@ solstice_parser_material_iterator_end ASSERT(parser && it); it->mtls__ = darray_material_cdata_get(&parser->mtls); it->imtl__ = darray_material_size_get(&parser->mtls); -} +} + +void +solstice_parser_geometry_iterator_begin + (struct solstice_parser* parser, struct solstice_geometry_iterator* it) +{ + ASSERT(parser && it); + it->geoms__ = darray_geometry_cdata_get(&parser->geometries); + it->igeom__ = 0; +} + +void +solstice_parser_geometry_iterator_end + (struct solstice_parser* parser, struct solstice_geometry_iterator* it) +{ + ASSERT(parser && it); + it->geoms__ = darray_geometry_cdata_get(&parser->geometries); + it->igeom__ = darray_geometry_size_get(&parser->geometries); +} diff --git a/src/parser/solstice_parser.h b/src/parser/solstice_parser.h @@ -32,6 +32,12 @@ struct solstice_material_iterator { size_t imtl__; }; +struct solstice_geometry_iterator { + /* Internal data */ + const struct solstice_geometry* geoms__; + size_t igeom__; +}; + /******************************************************************************* * Solstice parser API. ******************************************************************************/ @@ -223,5 +229,43 @@ solstice_material_iterator_get(struct solstice_material_iterator* it) return id; } +/******************************************************************************* + * Geometry iterator + ******************************************************************************/ +extern LOCAL_SYM void +solstice_parser_geometry_iterator_begin + (struct solstice_parser* parser, + struct solstice_geometry_iterator* it); + +extern LOCAL_SYM void +solstice_parser_geometry_iterator_end + (struct solstice_parser* parser, + struct solstice_geometry_iterator* it); + +static FINLINE void +solstice_geometry_iterator_next(struct solstice_geometry_iterator* it) +{ + ASSERT(it); + ++it->igeom__; +} + +static FINLINE int +solstice_geometry_iterator_eq + (const struct solstice_geometry_iterator* a, + const struct solstice_geometry_iterator* b) +{ + ASSERT(a && b); + return a->geoms__ == b->geoms__ && a->igeom__ == b->igeom__; +} + +static FINLINE struct solstice_geometry_id +solstice_geometry_iterator_get(struct solstice_geometry_iterator* it) +{ + struct solstice_geometry_id id; + ASSERT(it); + id.i = it->igeom__; + return id; +} + #endif /* SOLSTICE_PARSER_H */ diff --git a/src/parser/test_solstice_parser2.c b/src/parser/test_solstice_parser2.c @@ -23,10 +23,12 @@ main(int argc, char** argv) struct mem_allocator allocator; struct solstice_parser* parser; struct solstice_entity_iterator it, end; + struct solstice_geometry_iterator geom_it, geom_it_end; struct solstice_material_iterator mtl_it, mtl_it_end; struct solstice_entity_id entity_id; struct solstice_object_id obj_id; struct solstice_geometry_id geom_id; + const struct solstice_geometry* geoms[2] = { NULL, NULL }; const struct solstice_material* mtls[2] = { NULL, NULL }; const struct solstice_entity* entity, *entity1a, *entity1b, *entity2, *entity3; const struct solstice_geometry* geom; @@ -39,6 +41,7 @@ main(int argc, char** argv) const struct solstice_shape_sphere* sphere; const struct solstice_sun* sun; size_t nmtls = 0; + size_t ngeoms = 0; double tmp[3]; FILE* stream; @@ -77,6 +80,18 @@ main(int argc, char** argv) CHECK(solstice_parser_setup(parser, NULL, stream), RES_OK); CHECK(solstice_parser_load(parser), RES_OK); + solstice_parser_geometry_iterator_begin(parser, &geom_it); + solstice_parser_geometry_iterator_end(parser, &geom_it_end); + ngeoms = 0; + while(!solstice_geometry_iterator_eq(&geom_it, &geom_it_end)) { + CHECK(ngeoms < 2, 1); + geom_id = solstice_geometry_iterator_get(&geom_it); + solstice_geometry_iterator_next(&geom_it); + geoms[ngeoms] = solstice_parser_get_geometry(parser, geom_id); + ++ngeoms; + } + CHECK(ngeoms, 2); + solstice_parser_material_iterator_begin(parser, &mtl_it); solstice_parser_material_iterator_end(parser, &mtl_it_end); nmtls = 0; @@ -88,7 +103,7 @@ main(int argc, char** argv) mtls[nmtls] = solstice_parser_get_material(parser, mtl_id); ++nmtls; } - CHECK(nmtls == 2, 1); + CHECK(nmtls, 2); solstice_parser_entity_iterator_begin(parser, &it); solstice_parser_entity_iterator_end(parser, &end); @@ -106,6 +121,7 @@ main(int argc, char** argv) CHECK(solstice_entity_get_children_count(entity), 2); geom_id = entity->geometry; geom = solstice_parser_get_geometry(parser, entity->geometry); + CHECK(geom == geoms[0] || geom == geoms[1], 1); CHECK(solstice_geometry_get_objects_count(geom), 1); obj_id = solstice_geometry_get_object(geom, 0); obj = solstice_parser_get_object(parser, obj_id); @@ -131,6 +147,7 @@ main(int argc, char** argv) CHECK(solstice_entity_get_children_count(entity1a), 0); NCHECK(entity1a->geometry.i, geom_id.i); geom = solstice_parser_get_geometry(parser, entity1a->geometry); + CHECK(geom == geoms[0] || geom == geoms[1], 1); CHECK(solstice_geometry_get_objects_count(geom), 1); obj_id = solstice_geometry_get_object(geom, 0); obj = solstice_parser_get_object(parser, obj_id);