mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Gene Selkov's CUBE datatype (GiST example code)
This commit is contained in:
79
contrib/cube/buffer.c
Normal file
79
contrib/cube/buffer.c
Normal file
@ -0,0 +1,79 @@
|
||||
/* This module defines the parse buffer and routines for setting/reading it */
|
||||
|
||||
#include "postgres.h"
|
||||
|
||||
#include "utils/elog.h"
|
||||
|
||||
static char * PARSE_BUFFER;
|
||||
static char * PARSE_BUFFER_PTR;
|
||||
static unsigned int PARSE_BUFFER_SIZE;
|
||||
static unsigned int SCANNER_POS;
|
||||
|
||||
void set_parse_buffer( char* s );
|
||||
void reset_parse_buffer( void );
|
||||
int read_parse_buffer( void );
|
||||
char * parse_buffer( void );
|
||||
char * parse_buffer_ptr( void );
|
||||
unsigned int parse_buffer_curr_char( void );
|
||||
unsigned int parse_buffer_size( void );
|
||||
unsigned int parse_buffer_pos( void );
|
||||
|
||||
extern void cube_flush_scanner_buffer(void); /* defined in cubescan.l */
|
||||
|
||||
void set_parse_buffer( char* s )
|
||||
{
|
||||
PARSE_BUFFER = s;
|
||||
PARSE_BUFFER_SIZE = strlen(s);
|
||||
if ( PARSE_BUFFER_SIZE == 0 ) {
|
||||
elog(ERROR, "cube_in: can't parse an empty string");
|
||||
}
|
||||
PARSE_BUFFER_PTR = PARSE_BUFFER;
|
||||
SCANNER_POS = 0;
|
||||
}
|
||||
|
||||
void reset_parse_buffer( void )
|
||||
{
|
||||
PARSE_BUFFER_PTR = PARSE_BUFFER;
|
||||
SCANNER_POS = 0;
|
||||
cube_flush_scanner_buffer();
|
||||
}
|
||||
|
||||
int read_parse_buffer( void )
|
||||
{
|
||||
int c;
|
||||
/*
|
||||
c = *PARSE_BUFFER_PTR++;
|
||||
SCANNER_POS++;
|
||||
*/
|
||||
c = PARSE_BUFFER[SCANNER_POS];
|
||||
if(SCANNER_POS < PARSE_BUFFER_SIZE)
|
||||
SCANNER_POS++;
|
||||
return c;
|
||||
}
|
||||
|
||||
char * parse_buffer( void )
|
||||
{
|
||||
return PARSE_BUFFER;
|
||||
}
|
||||
|
||||
unsigned int parse_buffer_curr_char( void )
|
||||
{
|
||||
return PARSE_BUFFER[SCANNER_POS];
|
||||
}
|
||||
|
||||
char * parse_buffer_ptr( void )
|
||||
{
|
||||
return PARSE_BUFFER_PTR;
|
||||
}
|
||||
|
||||
unsigned int parse_buffer_pos( void )
|
||||
{
|
||||
return SCANNER_POS;
|
||||
}
|
||||
|
||||
unsigned int parse_buffer_size( void )
|
||||
{
|
||||
return PARSE_BUFFER_SIZE;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user