⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtproc.c

📁 关系型数据库 Postgresql 6.5.2
💻 C
字号:
/*------------------------------------------------------------------------- * * rtproc.c *	  pg_amproc entries for rtrees. * * Copyright (c) 1994, Regents of the University of California * * * IDENTIFICATION *	  $Header: /usr/local/cvsroot/pgsql/src/backend/access/rtree/rtproc.c,v 1.18.2.1 1999/08/02 05:24:44 scrappy Exp $ * *------------------------------------------------------------------------- */#include "postgres.h"#include "utils/builtins.h"BOX		   *rt_box_union(BOX *a, BOX *b){	BOX		   *n;	if ((n = (BOX *) palloc(sizeof(*n))) == (BOX *) NULL)		elog(ERROR, "Cannot allocate box for union");	n->high.x = Max(a->high.x, b->high.x);	n->high.y = Max(a->high.y, b->high.y);	n->low.x = Min(a->low.x, b->low.x);	n->low.y = Min(a->low.y, b->low.y);	return n;}BOX *rt_box_inter(BOX *a, BOX *b){	BOX		   *n;	if ((n = (BOX *) palloc(sizeof(*n))) == (BOX *) NULL)		elog(ERROR, "Cannot allocate box for union");	n->high.x = Min(a->high.x, b->high.x);	n->high.y = Min(a->high.y, b->high.y);	n->low.x = Max(a->low.x, b->low.x);	n->low.y = Max(a->low.y, b->low.y);	if (n->high.x < n->low.x || n->high.y < n->low.y)	{		pfree(n);		return (BOX *) NULL;	}	return n;}voidrt_box_size(BOX *a, float *size){	if (a == (BOX *) NULL || a->high.x <= a->low.x || a->high.y <= a->low.y)		*size = 0.0;	else		*size = (float) ((a->high.x - a->low.x) * (a->high.y - a->low.y));	return;}/* *	rt_bigbox_size() -- Compute a size for big boxes. * *		In an earlier release of the system, this routine did something *		different from rt_box_size.  We now use floats, rather than ints, *		as the return type for the size routine, so we no longer need to *		have a special return type for big boxes. */voidrt_bigbox_size(BOX *a, float *size){	rt_box_size(a, size);}POLYGON    *rt_poly_union(POLYGON *a, POLYGON *b){	POLYGON    *p;	p = (POLYGON *) palloc(sizeof(POLYGON));	if (!PointerIsValid(p))		elog(ERROR, "Cannot allocate polygon for union");	MemSet((char *) p, 0, sizeof(POLYGON));		/* zero any holes */	p->size = sizeof(POLYGON);	p->npts = 0;	p->boundbox.high.x = Max(a->boundbox.high.x, b->boundbox.high.x);	p->boundbox.high.y = Max(a->boundbox.high.y, b->boundbox.high.y);	p->boundbox.low.x = Min(a->boundbox.low.x, b->boundbox.low.x);	p->boundbox.low.y = Min(a->boundbox.low.y, b->boundbox.low.y);	return p;}voidrt_poly_size(POLYGON *a, float *size){	double		xdim,				ydim;	size = (float *) palloc(sizeof(float));	if (a == (POLYGON *) NULL ||		a->boundbox.high.x <= a->boundbox.low.x ||		a->boundbox.high.y <= a->boundbox.low.y)		*size = 0.0;	else	{		xdim = (a->boundbox.high.x - a->boundbox.low.x);		ydim = (a->boundbox.high.y - a->boundbox.low.y);		*size = (float) (xdim * ydim);	}	return;}POLYGON    *rt_poly_inter(POLYGON *a, POLYGON *b){	POLYGON    *p;	p = (POLYGON *) palloc(sizeof(POLYGON));	if (!PointerIsValid(p))		elog(ERROR, "Cannot allocate polygon for intersection");	MemSet((char *) p, 0, sizeof(POLYGON));		/* zero any holes */	p->size = sizeof(POLYGON);	p->npts = 0;	p->boundbox.high.x = Min(a->boundbox.high.x, b->boundbox.high.x);	p->boundbox.high.y = Min(a->boundbox.high.y, b->boundbox.high.y);	p->boundbox.low.x = Max(a->boundbox.low.x, b->boundbox.low.x);	p->boundbox.low.y = Max(a->boundbox.low.y, b->boundbox.low.y);	if (p->boundbox.high.x < p->boundbox.low.x || p->boundbox.high.y < p->boundbox.low.y)	{		pfree(p);		return (POLYGON *) NULL;	}	return p;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -