diff options
Diffstat (limited to 'src/backend/utils/adt/geo_ops.c')
-rw-r--r-- | src/backend/utils/adt/geo_ops.c | 128 |
1 files changed, 76 insertions, 52 deletions
diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c index feea5559c06..0c06e45bef4 100644 --- a/src/backend/utils/adt/geo_ops.c +++ b/src/backend/utils/adt/geo_ops.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/geo_ops.c,v 1.14 1997/08/12 22:54:29 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/geo_ops.c,v 1.15 1997/08/19 21:34:39 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -28,8 +28,39 @@ #define PI 3.1415926536 #endif -int point_inside( Point *p, int npts, Point plist[]); -int lseg_crossing( double x, double y, double px, double py); +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); +static BOX *box_copy(BOX *box); +static BOX *box_fill(BOX *result, double x1, double x2, double y1, double y2); +static double box_ht(BOX *box); +static double box_wd(BOX *box); +static double circle_ar(CIRCLE *circle); +static CIRCLE *circle_copy(CIRCLE *circle); +static LINE *line_construct_pm(Point *pt, double m); +static bool line_horizontal(LINE *line); +static Point *line_interpt(LINE *l1, LINE *l2); +static bool line_intersect(LINE *l1, LINE *l2); +static bool line_parallel(LINE *l1, LINE *l2); +static bool line_vertical(LINE *line); +static double lseg_dt(LSEG *l1, LSEG *l2); +static void make_bound_box(POLYGON *poly); +static PATH *path_copy(PATH *path); +static bool plist_same(int npts, Point p1[], Point p2[]); +static Point *point_construct(double x, double y); +static Point *point_copy(Point *pt); +static int single_decode(char *str, float8 *x, char **ss); +static int single_encode(float8 x, char *str); +static int pair_decode(char *str, float8 *x, float8 *y, char **s); +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 void statlseg_construct(LSEG *lseg, Point *pt1, Point *pt2); +static double box_ar(BOX *box); +static Point *interpt_sl(LSEG *lseg, LINE *line); +static LINE *line_construct_pp(Point *pt1, Point *pt2); + /* * Delimiters for input and output strings. @@ -77,16 +108,7 @@ static int digits8 = P_MAXDIG; * and restore that order for text output - tgl 97/01/16 */ -int single_decode(char *str, float8 *x, char **ss); -int single_encode(float8 x, char *str); -int pair_decode(char *str, float8 *x, float8 *y, char **s); -int pair_encode(float8 x, float8 y, char *str); -int pair_count(char *s, char delim); -int path_decode(int opentype, int npts, char *str, int *isopen, char **ss, Point *p); - -char *path_encode( bool closed, int npts, Point *pt); - -int single_decode(char *str, float8 *x, char **s) +static int single_decode(char *str, float8 *x, char **s) { char *cp; @@ -106,13 +128,13 @@ fprintf( stderr, "single_decode- (%x) try decoding %s to %g\n", (cp-str), str, * return(TRUE); } /* single_decode() */ -int single_encode(float8 x, char *str) +static int single_encode(float8 x, char *str) { sprintf(str, "%.*g", digits8, x); return(TRUE); } /* single_encode() */ -int pair_decode(char *str, float8 *x, float8 *y, char **s) +static int pair_decode(char *str, float8 *x, float8 *y, char **s) { int has_delim; char *cp; @@ -142,13 +164,13 @@ int pair_decode(char *str, float8 *x, float8 *y, char **s) return(TRUE); } -int pair_encode(float8 x, float8 y, char *str) +static int pair_encode(float8 x, float8 y, char *str) { sprintf(str, "%.*g,%.*g", digits8, x, digits8, y); return(TRUE); } -int path_decode(int opentype, int npts, char *str, int *isopen, char **ss, Point *p) +static int path_decode(int opentype, int npts, char *str, int *isopen, char **ss, Point *p) { int depth = 0; char *s, *cp; @@ -200,7 +222,7 @@ int path_decode(int opentype, int npts, char *str, int *isopen, char **ss, Point return(TRUE); } /* path_decode() */ -char *path_encode( bool closed, int npts, Point *pt) +static char *path_encode( bool closed, int npts, Point *pt) { char *result = PALLOC(npts*(P_MAXLEN+3)+2); @@ -251,7 +273,7 @@ char *path_encode( bool closed, int npts, Point *pt) * '(1,3,2,4)' * require an odd number of delim characters in the string *-------------------------------------------------------------*/ -int pair_count(char *s, char delim) +static int pair_count(char *s, char delim) { int ndelim = 0; @@ -321,7 +343,7 @@ char *box_out(BOX *box) /* box_construct - fill in a new box. */ -BOX *box_construct(double x1, double x2, double y1, double y2) +static BOX *box_construct(double x1, double x2, double y1, double y2) { BOX *result = PALLOCTYPE(BOX); @@ -331,7 +353,7 @@ BOX *box_construct(double x1, double x2, double y1, double y2) /* box_fill - fill in a static box */ -BOX *box_fill(BOX *result, double x1, double x2, double y1, double y2) +static BOX *box_fill(BOX *result, double x1, double x2, double y1, double y2) { if (x1 > x2) { result->high.x = x1; @@ -354,7 +376,7 @@ BOX *box_fill(BOX *result, double x1, double x2, double y1, double y2) /* box_copy - copy a box */ -BOX *box_copy(BOX *box) +static BOX *box_copy(BOX *box) { BOX *result = PALLOCTYPE(BOX); @@ -563,7 +585,7 @@ Point *box_center(BOX *box) /* box_ar - returns the area of the box. */ -double box_ar(BOX *box) +static double box_ar(BOX *box) { return( box_wd(box) * box_ht(box) ); } @@ -572,7 +594,7 @@ double box_ar(BOX *box) /* box_wd - returns the width (length) of the box * (horizontal magnitude). */ -double box_wd(BOX *box) +static double box_wd(BOX *box) { return( box->high.x - box->low.x ); } @@ -581,7 +603,7 @@ double box_wd(BOX *box) /* box_ht - returns the height of the box * (vertical magnitude). */ -double box_ht(BOX *box) +static double box_ht(BOX *box) { return( box->high.y - box->low.y ); } @@ -590,7 +612,8 @@ double box_ht(BOX *box) /* box_dt - returns the distance between the * center points of two boxes. */ -double box_dt(BOX *box1, BOX *box2) +#ifdef NOT_USED +static double box_dt(BOX *box1, BOX *box2) { double result; Point *a, *b; @@ -603,6 +626,7 @@ double box_dt(BOX *box1, BOX *box2) PFREE(b); return(result); } +#endif /*---------------------------------------------------------- * Funky operations. @@ -661,7 +685,7 @@ LSEG *box_diagonal(BOX *box) * Internal form: Ax+By+C=0 *---------------------------------------------------------*/ -LINE * /* point-slope */ +static LINE * /* point-slope */ line_construct_pm(Point *pt, double m) { LINE *result = PALLOCTYPE(LINE); @@ -677,7 +701,7 @@ line_construct_pm(Point *pt, double m) } /* line_construct_pm() */ -LINE * /* two points */ +static LINE * /* two points */ line_construct_pp(Point *pt1, Point *pt2) { LINE *result = PALLOCTYPE(LINE); @@ -724,12 +748,12 @@ printf( "line_construct_pp- line is neither vertical nor horizontal (diffs x=%.* * Relative position routines. *---------------------------------------------------------*/ -bool line_intersect(LINE *l1, LINE *l2) +static bool line_intersect(LINE *l1, LINE *l2) { return( ! line_parallel(l1, l2) ); } -bool line_parallel(LINE *l1, LINE *l2) +static bool line_parallel(LINE *l1, LINE *l2) { #if FALSE return( FPeq(l1->m, l2->m) ); @@ -741,6 +765,7 @@ bool line_parallel(LINE *l1, LINE *l2) return(FPeq(l2->A, l1->A*(l2->B / l1->B))); } /* line_parallel() */ +#ifdef NOT_USED bool line_perp(LINE *l1, LINE *l2) { #if FALSE @@ -757,8 +782,9 @@ bool line_perp(LINE *l1, LINE *l2) return( FPeq(((l1->A * l2->B) / (l1->B * l2->A)), -1.0) ); } /* line_perp() */ +#endif -bool line_vertical(LINE *line) +static bool line_vertical(LINE *line) { #if FALSE return( FPeq(line->A, -1.0) && FPzero(line->B) ); @@ -766,7 +792,7 @@ bool line_vertical(LINE *line) return( FPzero(line->B) ); } /* line_vertical() */ -bool line_horizontal(LINE *line) +static bool line_horizontal(LINE *line) { #if FALSE return( FPzero(line->m) ); @@ -774,7 +800,7 @@ bool line_horizontal(LINE *line) return( FPzero(line->A) ); } /* line_horizontal() */ - +#ifdef NOT_USED bool line_eq(LINE *l1, LINE *l2) { double k; @@ -792,7 +818,7 @@ bool line_eq(LINE *l1, LINE *l2) FPeq(l1->B, k * l2->B) && FPeq(l1->C, k * l2->C) ); } - +#endif /*---------------------------------------------------------- * Line arithmetic routines. @@ -821,7 +847,7 @@ line_distance(LINE *l1, LINE *l2) /* line_interpt() * Point where two lines l1, l2 intersect (if any) */ -Point * +static Point * line_interpt(LINE *l1, LINE *l2) { Point *result; @@ -985,8 +1011,6 @@ bool path_n_ge(PATH *p1, PATH *p2) * Conversion operators. *---------------------------------------------------------*/ -PATH *path_copy(PATH *path); - bool path_isclosed( PATH *path) { @@ -1155,7 +1179,7 @@ double *path_length(PATH *path) } /* path_length() */ - +#ifdef NOT_USED double path_ln(PATH *path) { double result; @@ -1167,6 +1191,7 @@ double path_ln(PATH *path) return(result); } /* path_ln() */ +#endif /*********************************************************************** ** @@ -1213,7 +1238,7 @@ point_out(Point *pt) } /* point_out() */ -Point *point_construct(double x, double y) +static Point *point_construct(double x, double y) { Point *result = PALLOCTYPE(Point); @@ -1223,7 +1248,7 @@ Point *point_construct(double x, double y) } -Point *point_copy(Point *pt) +static Point *point_copy(Point *pt) { Point *result; @@ -1392,7 +1417,7 @@ LSEG *lseg_construct(Point *pt1, Point *pt2) } /* like lseg_construct, but assume space already allocated */ -void statlseg_construct(LSEG *lseg, Point *pt1, Point *pt2) +static void statlseg_construct(LSEG *lseg, Point *pt1, Point *pt2) { lseg->p[0].x = pt1->x; lseg->p[0].y = pt1->y; @@ -1489,7 +1514,7 @@ double *lseg_distance(LSEG *l1, LSEG *l2) } /* distance between l1, l2 */ -double +static double lseg_dt(LSEG *l1, LSEG *l2) { double *d, result; @@ -1833,7 +1858,7 @@ printf( "dist_cpoly- segment %d distance is %f\n", (i+1), *d); * lines and boxes, since there are typically two. *-------------------------------------------------------------------*/ -Point *interpt_sl(LSEG *lseg, LINE *line) +static Point *interpt_sl(LSEG *lseg, LINE *line) { LINE *tmp; Point *p; @@ -2194,7 +2219,7 @@ bool inter_lb(LINE *line, BOX *box) /*--------------------------------------------------------------------- * Make the smallest bounding box for the given polygon. *---------------------------------------------------------------------*/ -void make_bound_box(POLYGON *poly) +static void make_bound_box(POLYGON *poly) { int i; double x1,y1,x2,y2; @@ -3286,9 +3311,7 @@ bool circle_ge(CIRCLE *circle1, CIRCLE *circle2) * actual value. *---------------------------------------------------------*/ -CIRCLE *circle_copy(CIRCLE *circle); - -CIRCLE * +static CIRCLE * circle_copy(CIRCLE *circle) { CIRCLE *result; @@ -3494,7 +3517,7 @@ Point *circle_center(CIRCLE *circle) /* circle_ar - returns the area of the circle. */ -double circle_ar(CIRCLE *circle) +static double circle_ar(CIRCLE *circle) { return(PI*(circle->radius*circle->radius)); } @@ -3503,6 +3526,7 @@ double circle_ar(CIRCLE *circle) /* circle_dt - returns the distance between the * center points of two circlees. */ +#ifdef NOT_USED double circle_dt(CIRCLE *circle1, CIRCLE *circle2) { double result; @@ -3511,7 +3535,7 @@ double circle_dt(CIRCLE *circle1, CIRCLE *circle2) return(result); } - +#endif /*---------------------------------------------------------- * Conversion operators. @@ -3657,7 +3681,7 @@ CIRCLE *poly_circle(POLYGON *poly) #define HIT_IT INT_MAX -int +static int point_inside( Point *p, int npts, Point plist[]) { double x0, y0; @@ -3716,7 +3740,7 @@ point_inside( Point *p, int npts, Point plist[]) * It returns HIT_IT if the segment contains (0,0) */ -int +static int lseg_crossing( double x, double y, double px, double py) { double z; @@ -3756,7 +3780,7 @@ lseg_crossing( double x, double y, double px, double py) } /* lseg_crossing() */ -bool +static bool plist_same(int npts, Point p1[], Point p2[]) { int i, ii, j; |