/* 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 seg_flush_scanner_buffer(void); /* defined in segscan.l */ void set_parse_buffer(char *s) { PARSE_BUFFER = s; PARSE_BUFFER_SIZE = strlen(s); if (PARSE_BUFFER_SIZE == 0) elog(ERROR, "seg_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; seg_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; }