diff options
Diffstat (limited to 'contrib/cube/buffer.c')
-rw-r--r-- | contrib/cube/buffer.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/contrib/cube/buffer.c b/contrib/cube/buffer.c new file mode 100644 index 00000000000..0bcc2d19b57 --- /dev/null +++ b/contrib/cube/buffer.c @@ -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; +} + + |