bool abuse in path_encode()
The function path_encode() in geo_ops.c takes an argument "bool closed",
to indicate an open or closed path --- but you can also pass -1 to
indicate "neither". I propose to change this to an enum to make the
code clearer and less weird.
Attachments:
path-encode-enum.patchtext/x-patch; charset=UTF-8; name=path-encode-enum.patchDownload
diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c
index ad18cf0..7bfea01 100644
--- a/src/backend/utils/adt/geo_ops.c
+++ b/src/backend/utils/adt/geo_ops.c
@@ -32,6 +32,8 @@
* Internal routines
*/
+enum path_delim { PATH_NONE, PATH_OPEN, PATH_CLOSED };
+
static int point_inside(Point *p, int npts, Point *plist);
static int lseg_crossing(double x, double y, double px, double py);
static BOX *box_construct(double x1, double x2, double y1, double y2);
@@ -57,7 +59,7 @@
static int pair_encode(float8 x, float8 y, char *str);
static int pair_count(char *s, char delim);
static int path_decode(int opentype, int npts, char *str, int *isopen, char **ss, Point *p);
-static char *path_encode(bool closed, int npts, Point *pt);
+static char *path_encode(enum path_delim path_delim, int npts, Point *pt);
static void statlseg_construct(LSEG *lseg, Point *pt1, Point *pt2);
static double box_ar(BOX *box);
static void box_cn(Point *center, BOX *box);
@@ -280,7 +282,7 @@
} /* path_decode() */
static char *
-path_encode(bool closed, int npts, Point *pt)
+path_encode(enum path_delim path_delim, int npts, Point *pt)
{
int size = npts * (P_MAXLEN + 3) + 2;
char *result;
@@ -296,12 +298,12 @@
result = palloc(size);
cp = result;
- switch (closed)
+ switch (path_delim)
{
- case TRUE:
+ case PATH_CLOSED:
*cp++ = LDELIM;
break;
- case FALSE:
+ case PATH_OPEN:
*cp++ = LDELIM_EP;
break;
default:
@@ -322,12 +324,12 @@
pt++;
}
cp--;
- switch (closed)
+ switch (path_delim)
{
- case TRUE:
+ case PATH_CLOSED:
*cp++ = RDELIM;
break;
- case FALSE:
+ case PATH_OPEN:
*cp++ = RDELIM_EP;
break;
default:
@@ -415,7 +417,7 @@
{
BOX *box = PG_GETARG_BOX_P(0);
- PG_RETURN_CSTRING(path_encode(-1, 2, &(box->high)));
+ PG_RETURN_CSTRING(path_encode(PATH_NONE, 2, &(box->high)));
}
/*
@@ -1018,7 +1020,7 @@
{
}
- return path_encode(TRUE, 2, (Point *) &(ls->p[0]));
+ return path_encode(PATH_CLOSED, 2, (Point *) &(ls->p[0]));
#else
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
@@ -1441,7 +1443,7 @@
{
PATH *path = PG_GETARG_PATH_P(0);
- PG_RETURN_CSTRING(path_encode(path->closed, path->npts, path->p));
+ PG_RETURN_CSTRING(path_encode(path->closed ? PATH_CLOSED : PATH_OPEN, path->npts, path->p));
}
/*
@@ -1823,7 +1825,7 @@
{
Point *pt = PG_GETARG_POINT_P(0);
- PG_RETURN_CSTRING(path_encode(-1, 1, pt));
+ PG_RETURN_CSTRING(path_encode(PATH_NONE, 1, pt));
}
/*
@@ -2051,7 +2053,7 @@
{
LSEG *ls = PG_GETARG_LSEG_P(0);
- PG_RETURN_CSTRING(path_encode(FALSE, 2, (Point *) &(ls->p[0])));
+ PG_RETURN_CSTRING(path_encode(PATH_OPEN, 2, (Point *) &(ls->p[0])));
}
/*
@@ -3494,7 +3496,7 @@
{
POLYGON *poly = PG_GETARG_POLYGON_P(0);
- PG_RETURN_CSTRING(path_encode(TRUE, poly->npts, poly->p));
+ PG_RETURN_CSTRING(path_encode(PATH_CLOSED, poly->npts, poly->p));
}
/*
Peter Eisentraut <peter_e@gmx.net> writes:
The function path_encode() in geo_ops.c takes an argument "bool closed",
to indicate an open or closed path --- but you can also pass -1 to
indicate "neither".
Egad :-(.
I propose to change this to an enum to make the
code clearer and less weird.
Please change the "default" cases to be "case PATH_NONE", then.
regards, tom lane
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers