mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03:00 
			
		
		
		
	The proposed Meson build system will need a way to ignore certain
generated files in order to coexist with the autoconf build system,
and C files generated by Flex which are #include'd into .y files make
this more difficult. In similar vein to 72b1e3a21, arrange for all Flex
C files to compile to their own .o targets.
Reviewed by Andres Freund
Discussion: https://www.postgresql.org/message-id/20220810171935.7k5zgnjwqzalzmtm%40awork3.anarazel.de
Discussion: https://www.postgresql.org/message-id/CAFBsxsF8Gc2StS3haXofshHCzqNMRXiSxvQEYGwnFsTmsdwNeg@mail.gmail.com
		
	
		
			
				
	
	
		
			70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* contrib/cube/cubedata.h */
 | |
| 
 | |
| /*
 | |
|  * This limit is pretty arbitrary, but don't make it so large that you
 | |
|  * risk overflow in sizing calculations.
 | |
|  */
 | |
| #define CUBE_MAX_DIM (100)
 | |
| 
 | |
| typedef struct NDBOX
 | |
| {
 | |
| 	/* varlena header (do not touch directly!) */
 | |
| 	int32		vl_len_;
 | |
| 
 | |
| 	/*----------
 | |
| 	 * Header contains info about NDBOX. For binary compatibility with old
 | |
| 	 * versions, it is defined as "unsigned int".
 | |
| 	 *
 | |
| 	 * Following information is stored:
 | |
| 	 *
 | |
| 	 *	bits 0-7  : number of cube dimensions;
 | |
| 	 *	bits 8-30 : unused, initialize to zero;
 | |
| 	 *	bit  31   : point flag. If set, the upper right coordinates are not
 | |
| 	 *				stored, and are implicitly the same as the lower left
 | |
| 	 *				coordinates.
 | |
| 	 *----------
 | |
| 	 */
 | |
| 	unsigned int header;
 | |
| 
 | |
| 	/*
 | |
| 	 * The lower left coordinates for each dimension come first, followed by
 | |
| 	 * upper right coordinates unless the point flag is set.
 | |
| 	 */
 | |
| 	double		x[FLEXIBLE_ARRAY_MEMBER];
 | |
| } NDBOX;
 | |
| 
 | |
| /* NDBOX access macros */
 | |
| #define POINT_BIT			0x80000000
 | |
| #define DIM_MASK			0x7fffffff
 | |
| 
 | |
| #define IS_POINT(cube)		( ((cube)->header & POINT_BIT) != 0 )
 | |
| #define SET_POINT_BIT(cube) ( (cube)->header |= POINT_BIT )
 | |
| #define DIM(cube)			( (cube)->header & DIM_MASK )
 | |
| #define SET_DIM(cube, _dim) ( (cube)->header = ((cube)->header & ~DIM_MASK) | (_dim) )
 | |
| 
 | |
| #define LL_COORD(cube, i) ( (cube)->x[i] )
 | |
| #define UR_COORD(cube, i) ( IS_POINT(cube) ? (cube)->x[i] : (cube)->x[(i) + DIM(cube)] )
 | |
| 
 | |
| #define POINT_SIZE(_dim)	(offsetof(NDBOX, x) + sizeof(double)*(_dim))
 | |
| #define CUBE_SIZE(_dim)		(offsetof(NDBOX, x) + sizeof(double)*(_dim)*2)
 | |
| 
 | |
| /* fmgr interface macros */
 | |
| #define DatumGetNDBOXP(x)	((NDBOX *) PG_DETOAST_DATUM(x))
 | |
| #define PG_GETARG_NDBOX_P(x)	DatumGetNDBOXP(PG_GETARG_DATUM(x))
 | |
| #define PG_RETURN_NDBOX_P(x)	PG_RETURN_POINTER(x)
 | |
| 
 | |
| /* GiST operator strategy numbers */
 | |
| #define CubeKNNDistanceCoord			15	/* ~> */
 | |
| #define CubeKNNDistanceTaxicab			16	/* <#> */
 | |
| #define CubeKNNDistanceEuclid			17	/* <-> */
 | |
| #define CubeKNNDistanceChebyshev		18	/* <=> */
 | |
| 
 | |
| /* in cubescan.l */
 | |
| extern int	cube_yylex(void);
 | |
| extern void cube_yyerror(NDBOX **result, Size scanbuflen, const char *message) pg_attribute_noreturn();
 | |
| extern void cube_scanner_init(const char *str, Size *scanbuflen);
 | |
| extern void cube_scanner_finish(void);
 | |
| 
 | |
| /* in cubeparse.y */
 | |
| extern int	cube_yyparse(NDBOX **result, Size scanbuflen);
 |