star-enclosures-2d

Extract enclosures from 2D geometry
git clone git://git.meso-star.fr/star-enclosures-2d.git
Log | Files | Refs | README | LICENSE

commit 9469b448621f3c0d682029b2976b4dd67f30c759
parent 69f7598147fb5e22d882103216c1bbe854cbf43e
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Fri, 13 Jul 2018 17:30:59 +0200

Fix type confusion (uint VS enclosure_id)

Diffstat:
Msrc/senc2d_descriptor.c | 25++++++++++++++-----------
Msrc/senc2d_descriptor_c.h | 19+++++++++++--------
Msrc/senc2d_scene_analyze.c | 7++++---
3 files changed, 29 insertions(+), 22 deletions(-)

diff --git a/src/senc2d_descriptor.c b/src/senc2d_descriptor.c @@ -36,7 +36,7 @@ descriptor_release(ref_T * ref) scn = desc->scene; darray_segment_enc_release(&desc->segments_enc); darray_enclosure_release(&desc->enclosures); - darray_ids_array_release(&desc->ids_array_by_medium); + darray_enc_ids_array_release(&desc->enc_ids_array_by_medium); MEM_RM(scn->dev->allocator, desc); SENC2D(scene_ref_put(scn)); @@ -58,8 +58,9 @@ descriptor_create(struct senc2d_scene* scn) ref_init(&desc->ref); darray_segment_enc_init(scn->dev->allocator, &desc->segments_enc); darray_enclosure_init(scn->dev->allocator, &desc->enclosures); - darray_ids_array_init(scn->dev->allocator, &desc->ids_array_by_medium); - OK(darray_ids_array_resize(&desc->ids_array_by_medium, scn->nmeds)); + darray_enc_ids_array_init(scn->dev->allocator, + &desc->enc_ids_array_by_medium); + OK(darray_enc_ids_array_resize(&desc->enc_ids_array_by_medium, scn->nmeds)); /* Enclosure 0 is always defined for infinite */ OK(darray_enclosure_resize(&desc->enclosures, 1)); desc->enclosures_count = 1; @@ -113,13 +114,14 @@ senc2d_descriptor_get_enclosure_count_by_medium unsigned* count) { size_t tmp; - const struct darray_uint* ids; + const struct darray_enc_id* enc_ids; if(!desc || !count || imed >= desc->scene->nmeds) return RES_BAD_ARG; - ASSERT(darray_ids_array_size_get(&desc->ids_array_by_medium) + ASSERT(darray_enc_ids_array_size_get(&desc->enc_ids_array_by_medium) == desc->scene->nmeds); - ids = darray_ids_array_cdata_get(&desc->ids_array_by_medium) + imed; - tmp = darray_uint_size_get(ids); + enc_ids = + darray_enc_ids_array_cdata_get(&desc->enc_ids_array_by_medium) + imed; + tmp = darray_enc_id_size_get(enc_ids); ASSERT(tmp < UINT_MAX); /* API type */ *count = (unsigned)tmp; return RES_OK; @@ -148,12 +150,13 @@ senc2d_descriptor_get_enclosure_by_medium const unsigned idx, struct senc2d_enclosure** out_enc) { - const struct darray_uint* ids; + const struct darray_enc_id* enc_ids; unsigned index; if(!desc || imed >= desc->scene->nmeds || !out_enc) return RES_BAD_ARG; - ids = darray_ids_array_cdata_get(&desc->ids_array_by_medium) + imed; - if(idx >= darray_uint_size_get(ids)) return RES_BAD_ARG; - index = darray_uint_cdata_get(ids)[idx]; + enc_ids = + darray_enc_ids_array_cdata_get(&desc->enc_ids_array_by_medium) + imed; + if(idx >= darray_enc_id_size_get(enc_ids)) return RES_BAD_ARG; + index = darray_enc_id_cdata_get(enc_ids)[idx]; return senc2d_descriptor_get_enclosure(desc, index, out_enc); } diff --git a/src/senc2d_descriptor_c.h b/src/senc2d_descriptor_c.h @@ -18,7 +18,6 @@ #include <rsys/ref_count.h> #include <rsys/dynamic_array.h> -#include <rsys/dynamic_array_uint.h> #include "senc2d.h" #include "senc2d_enclosure_data.h" @@ -73,12 +72,16 @@ segment_enc_init(struct mem_allocator* alloc, struct segment_enc* seg) { #define DARRAY_FUNCTOR_COPY_AND_RELEASE enclosure_data_copy_and_release #include <rsys/dynamic_array.h> -#define DARRAY_NAME ids_array -#define DARRAY_DATA struct darray_uint -#define DARRAY_FUNCTOR_INIT darray_uint_init -#define DARRAY_FUNCTOR_COPY darray_uint_copy -#define DARRAY_FUNCTOR_RELEASE darray_uint_release -#define DARRAY_FUNCTOR_COPY_AND_RELEASE darray_uint_copy_and_release +#define DARRAY_NAME enc_id +#define DARRAY_DATA enclosure_id_t +#include <rsys/dynamic_array.h> + +#define DARRAY_NAME enc_ids_array +#define DARRAY_DATA struct darray_enc_id +#define DARRAY_FUNCTOR_INIT darray_enc_id_init +#define DARRAY_FUNCTOR_COPY darray_enc_id_copy +#define DARRAY_FUNCTOR_RELEASE darray_enc_id_release +#define DARRAY_FUNCTOR_COPY_AND_RELEASE darray_enc_id_copy_and_release #include <rsys/dynamic_array.h> struct senc2d_descriptor { @@ -88,7 +91,7 @@ struct senc2d_descriptor { struct darray_segment_enc segments_enc; /* Store enclosures */ struct darray_enclosure enclosures; - struct darray_ids_array ids_array_by_medium; + struct darray_enc_ids_array enc_ids_array_by_medium; seg_id_t segment_count; vrtx_id_t vertices_count; diff --git a/src/senc2d_scene_analyze.c b/src/senc2d_scene_analyze.c @@ -947,7 +947,7 @@ build_result const enclosure_id_t e = (enclosure_id_t)ee; struct enclosure_data* enc = enclosures + e; const struct cc_descriptor* current = cc_descriptors[enc->first_component]; - struct darray_uint* ids_by_medium; + struct darray_enc_id* enc_ids_by_medium; seg_id_t fst_idx = 0; seg_id_t sgd_idx = enc->side_count; seg_id_t s; @@ -965,11 +965,12 @@ build_result = (unsigned)current->medium; /* Back to API type */ ASSERT(enc->header.enclosed_medium < desc->scene->nmeds); - ids_by_medium = darray_ids_array_data_get(&desc->ids_array_by_medium) + enc_ids_by_medium = + darray_enc_ids_array_data_get(&desc->enc_ids_array_by_medium) + current->medium; #pragma omp critical { - tmp_res = darray_uint_push_back(ids_by_medium, &e); + tmp_res = darray_enc_id_push_back(enc_ids_by_medium, &e); } if(tmp_res != RES_OK) *res = tmp_res; if(*res != RES_OK) continue;