star-cpr

Clip 2D meshes with 2D polygons
git clone git://git.meso-star.fr/star-cpr.git
Log | Files | Refs | README | LICENSE

commit 2bd7f24ce053392bb47e0822f59d4aadb0530ca4
parent 3aeadb054cbc5da7cfd5743b493b8a23964a440c
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Tue, 21 Feb 2023 15:54:35 +0100

Fix warnings in release build

Diffstat:
Msrc/scpr_c.h | 4++++
Msrc/scpr_intersector.c | 48+++++++++++++++++++++++++-----------------------
2 files changed, 29 insertions(+), 23 deletions(-)

diff --git a/src/scpr_c.h b/src/scpr_c.h @@ -197,16 +197,20 @@ pair_eq #include <rsys/hash_table.h> /* An htable to keep track of registered components */ +#pragma pack(push, 1) /* Avoid padding */ struct intersector_component { scpr_polygon* polygon; uint32_t component; + /* If there is padding, hashing reports uninitialized data in htable code */ }; +#pragma pack(pop) static FINLINE void component_init(struct mem_allocator* alloc, struct intersector_component* key) { ASSERT(alloc && key); (void)alloc; key->polygon = NULL; + key->component = UINT32_MAX; } static INLINE char component_eq diff --git a/src/scpr_intersector.c b/src/scpr_intersector.c @@ -166,6 +166,7 @@ init_segment_pair } } +#ifndef NDEBUG static int segments_bbox_interacts_1_core (int64_t lower1, int64_t upper1, int64_t lower2, int64_t upper2) @@ -175,6 +176,29 @@ segments_bbox_interacts_1_core return 1; } +/* Check if 2 polygon Bbox interact */ +static int +segments_bbox_interacts + (Clipper2Lib::Point64 *v11, + Clipper2Lib::Point64 *v12, + Clipper2Lib::Point64 *v21, + Clipper2Lib::Point64 *v22) +{ + int64_t lower1[2], upper1[2], lower2[2], upper2[2]; + ASSERT(v11 && v12 && v21 && v22); + lower1[0] = MMIN(v11->x, v12->x); + lower1[1] = MMIN(v11->y, v12->y); + lower2[0] = MMIN(v21->x, v22->x); + lower2[1] = MMIN(v21->y, v22->y); + upper1[0] = MMAX(v11->x, v12->x); + upper1[1] = MMAX(v11->y, v12->y); + upper2[0] = MMAX(v21->x, v22->x); + upper2[1] = MMAX(v21->y, v22->y); + if(!segments_bbox_interacts_1_core(lower1[0], upper1[0], lower2[0], upper2[0])) + return 0; + return segments_bbox_interacts_1_core(lower1[1], upper1[1], lower2[1], upper2[1]); +} + static int segments_bbox_interacts_1 (uint32_t seg_idx1, @@ -223,6 +247,7 @@ segments_bbox_interacts_1 } return segments_bbox_interacts_1_core(lower1, upper1, lower2, upper2); } +#endif /* Register interaction of 2 segments along 1 dimension */ static res_T @@ -421,29 +446,6 @@ error: goto exit; } -/* Check if 2 polygon Bbox interact */ -static int -segments_bbox_interacts - (Clipper2Lib::Point64 *v11, - Clipper2Lib::Point64 *v12, - Clipper2Lib::Point64 *v21, - Clipper2Lib::Point64 *v22) -{ - int64_t lower1[2], upper1[2], lower2[2], upper2[2]; - ASSERT(v11 && v12 && v21 && v22); - lower1[0] = MMIN(v11->x, v12->x); - lower1[1] = MMIN(v11->y, v12->y); - lower2[0] = MMIN(v21->x, v22->x); - lower2[1] = MMIN(v21->y, v22->y); - upper1[0] = MMAX(v11->x, v12->x); - upper1[1] = MMAX(v11->y, v12->y); - upper2[0] = MMAX(v21->x, v22->x); - upper2[1] = MMAX(v21->y, v22->y); - if(!segments_bbox_interacts_1_core(lower1[0], upper1[0], lower2[0], upper2[0])) - return 0; - return segments_bbox_interacts_1_core(lower1[1], upper1[1], lower2[1], upper2[1]); -} - static int64_t safe_mul (int64_t a,