summaryrefslogtreecommitdiff
path: root/contrib/cube/cube.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/cube/cube.c')
-rw-r--r--contrib/cube/cube.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/contrib/cube/cube.c b/contrib/cube/cube.c
index bf3dd8dfbf2..98c6167e625 100644
--- a/contrib/cube/cube.c
+++ b/contrib/cube/cube.c
@@ -73,11 +73,11 @@ bool cube_right(NDBOX * a, NDBOX * b);
bool cube_lt(NDBOX * a, NDBOX * b);
bool cube_gt(NDBOX * a, NDBOX * b);
double *cube_distance(NDBOX * a, NDBOX * b);
-int cube_dim(NDBOX * a);
-double *cube_ll_coord(NDBOX * a, int n);
-double *cube_ur_coord(NDBOX * a, int n);
+int4 cube_dim(NDBOX * a);
+double *cube_ll_coord(NDBOX * a, int4 n);
+double *cube_ur_coord(NDBOX * a, int4 n);
bool cube_is_point(NDBOX * a);
-NDBOX *cube_enlarge(NDBOX * a, double *r, int n);
+NDBOX *cube_enlarge(NDBOX * a, double *r, int4 n);
/*
@@ -1139,7 +1139,7 @@ cube_is_point(NDBOX * a)
}
/* Return dimensions in use in the data structure */
-int
+int4
cube_dim(NDBOX * a)
{
/* Other things will break before unsigned int doesn't fit. */
@@ -1148,7 +1148,7 @@ cube_dim(NDBOX * a)
/* Return a specific normalized LL coordinate */
double *
-cube_ll_coord(NDBOX * a, int n)
+cube_ll_coord(NDBOX * a, int4 n)
{
double *result;
@@ -1161,7 +1161,7 @@ cube_ll_coord(NDBOX * a, int n)
/* Return a specific normalized UR coordinate */
double *
-cube_ur_coord(NDBOX * a, int n)
+cube_ur_coord(NDBOX * a, int4 n)
{
double *result;
@@ -1174,14 +1174,16 @@ cube_ur_coord(NDBOX * a, int n)
/* Increase or decrease box size by a radius in at least n dimensions. */
NDBOX *
-cube_enlarge(NDBOX * a, double *r, int n)
+cube_enlarge(NDBOX * a, double *r, int4 n)
{
NDBOX *result;
int dim = 0;
int size;
int i,
- j;
+ j,
+ k;
+ if (n > CUBE_MAX_DIM) n = CUBE_MAX_DIM;
if (*r > 0 && n > 0)
dim = n;
if (a->dim > dim)
@@ -1191,17 +1193,17 @@ cube_enlarge(NDBOX * a, double *r, int n)
memset(result, 0, size);
result->size = size;
result->dim = dim;
- for (i = 0, j = dim; i < a->dim; i++, j++)
+ for (i = 0, j = dim, k = a->dim; i < a->dim; i++, j++, k++)
{
- if (a->x[i] >= a->x[j])
+ if (a->x[i] >= a->x[k])
{
- result->x[i] = a->x[j] - *r;
+ result->x[i] = a->x[k] - *r;
result->x[j] = a->x[i] + *r;
}
else
{
result->x[i] = a->x[i] - *r;
- result->x[j] = a->x[j] + *r;
+ result->x[j] = a->x[k] + *r;
}
if (result->x[i] > result->x[j])
{