%% options copyright owner = Dirk Krause copyright year = 2017-xxxx SPDX-License-Identifier: BSD-3-Clause %% header /** @file dk4bb32.h Bounding box for int32_t coordinates. */ #ifndef DK4CONF_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4conf.h" #else #include #endif #endif #ifndef DK4TYPES_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4types.h" #else #include #endif #endif /** Bounding box for int32_t coordinates. */ typedef struct { int32_t xmin; /**< Minimum x value. */ int32_t xmax; /**< Maximum x value. */ int32_t ymin; /**< Minimum y value. */ int32_t ymax; /**< Maximum y value. */ unsigned char hx; /**< Flag: Have x values. */ unsigned char hy; /**< Flag: Have y values. */ } dk4_bb32_t; #ifdef __cplusplus extern "C" { #endif /** Initialize bounding box structure. @param bbptr Structure to initialize. */ void dk4bb32_init(dk4_bb32_t *bbptr); /** Add x value to bounding box. @param bbptr Structure to modify. @param x Value to add. */ void dk4bb32_add_x(dk4_bb32_t *bbptr, int32_t x); /** Add y value to bounding box. @param bbptr Structure to modify. @param y Value to add. */ void dk4bb32_add_y(dk4_bb32_t *bbptr, int32_t y); /** Add x and y value of a point to bounding box. @param bbptr Structure to modify. @param x X value to add. @param y Y value to add. */ void dk4bb32_add_point(dk4_bb32_t *bbptr, int32_t x, int32_t y); /** Check whether a bounding box contains x information. @param bbptr Structure to check. @return 1 if x information available, 0 otherwise. */ int dk4bb32_have_x(dk4_bb32_t const *bbptr); /** Check whether a bounding box contains y information. @param bbptr Structure to check. @return 1 if y information available, 0 otherwise. */ int dk4bb32_have_y(dk4_bb32_t const *bbptr); /** Get minimum x value from bounding box structure. @param bbptr Structure to use. @return Minimum x value if x information available, random value otherwise. */ int32_t dk4bb32_get_x_min(dk4_bb32_t const *bbptr); /** Get maximum x value from bounding box structure. @param bbptr Structure to use. @return Maximum x value if x information available, random value otherwise. */ int32_t dk4bb32_get_x_max(dk4_bb32_t const *bbptr); /** Get minimum y value from bounding box structure. @param bbptr Structure to use. @return Minimum y value if y information available, random value otherwise. */ int32_t dk4bb32_get_y_min(dk4_bb32_t const *bbptr); /** Get maximum y value from bounding box structure. @param bbptr Structure to use. @return Maximum y value if y information available, random value otherwise. */ int32_t dk4bb32_get_y_max(dk4_bb32_t const *bbptr); #ifdef __cplusplus } #endif /* vim: set ai sw=4 ts=4 : */ %% module #ifndef DK4BB32_H_INCLUDED #include "dk4bb32.h" #endif #ifndef DK4MEM_H_INCLUDED #include "dk4mem.h" #endif #if DK4_HAVE_ASSERT_H #ifndef ASSERT_H_INCLUDED #include #define ASSERT_H_INCLUDED 1 #endif #endif void dk4bb32_init(dk4_bb32_t *bbptr) { #if DK4_USE_ASSERT assert(NULL != bbptr); #endif if (NULL != bbptr) { DK4_MEMRES(bbptr,sizeof(dk4_bb32_t)); bbptr->xmin = bbptr->xmax = bbptr->ymin = bbptr->ymax = (int32_t)0L; bbptr->hx = bbptr->hy = 0x00; } } void dk4bb32_add_x(dk4_bb32_t *bbptr, int32_t x) { #if DK4_USE_ASSERT assert(NULL != bbptr); #endif if (NULL != bbptr) { if (0x00 != bbptr->hx) { if (bbptr->xmin > x) { bbptr->xmin = x; } if (bbptr->xmax < x) { bbptr->xmax = x; } } else { bbptr->xmin = bbptr->xmax = x; bbptr->hx = 0x01; } } } void dk4bb32_add_y(dk4_bb32_t *bbptr, int32_t y) { #if DK4_USE_ASSERT assert(NULL != bbptr); #endif if (NULL != bbptr) { if (0x00 != bbptr->hy) { if (bbptr->ymin > y) { bbptr->ymin = y; } if (bbptr->ymax < y) { bbptr->ymax = y; } } else { bbptr->ymin = bbptr->ymax = y; bbptr->hy = 0x01; } } } void dk4bb32_add_point(dk4_bb32_t *bbptr, int32_t x, int32_t y) { #if DK4_USE_ASSERT assert(NULL != bbptr); #endif dk4bb32_add_x(bbptr, x); dk4bb32_add_y(bbptr, y); } int dk4bb32_have_x(dk4_bb32_t const *bbptr) { int back = 0; #if DK4_USE_ASSERT assert(NULL != bbptr); #endif if (NULL != bbptr) { if (0x00 != bbptr->hx) { back = 1; } } return back; } int dk4bb32_have_y(dk4_bb32_t const *bbptr) { int back = 0; #if DK4_USE_ASSERT assert(NULL != bbptr); #endif if (NULL != bbptr) { if (0x00 != bbptr->hy) { back = 1; } } return back; } int32_t dk4bb32_get_x_min(dk4_bb32_t const *bbptr) { int32_t back = (int32_t)0L; #if DK4_USE_ASSERT assert(NULL != bbptr); #endif if (NULL != bbptr) { back = bbptr->xmin; } return back; } int32_t dk4bb32_get_x_max(dk4_bb32_t const *bbptr) { int32_t back = (int32_t)0L; #if DK4_USE_ASSERT assert(NULL != bbptr); #endif if (NULL != bbptr) { back = bbptr->xmax; } return back; } int32_t dk4bb32_get_y_min(dk4_bb32_t const *bbptr) { int32_t back = (int32_t)0L; #if DK4_USE_ASSERT assert(NULL != bbptr); #endif if (NULL != bbptr) { back = bbptr->ymin; } return back; } int32_t dk4bb32_get_y_max(dk4_bb32_t const *bbptr) { int32_t back = (int32_t)0L; #if DK4_USE_ASSERT assert(NULL != bbptr); #endif if (NULL != bbptr) { back = bbptr->ymax; } return back; } /* vim: set ai sw=4 ts=4 : */