mirror of https://github.com/postgres/postgres
parent
3b0453b24f
commit
f82b853b47
@ -1,89 +1,69 @@ |
||||
#include <stdlib.h> |
||||
|
||||
#include <stdlib.h> /* for calloc, free */ |
||||
#include "header.h" |
||||
|
||||
struct SN_env * |
||||
SN_create_env(int S_size, int I_size, int B_size) |
||||
extern struct SN_env * SN_create_env(int S_size, int I_size, int B_size) |
||||
{ |
||||
struct SN_env *z = (struct SN_env *) calloc(1, sizeof(struct SN_env)); |
||||
struct SN_env *z2 = z; |
||||
struct SN_env * z = (struct SN_env *) calloc(1, sizeof(struct SN_env)); |
||||
if (z == NULL) return NULL; |
||||
z->p = create_s(); |
||||
if (z->p == NULL) goto error; |
||||
if (S_size) |
||||
{ |
||||
int i; |
||||
z->S = (symbol * *) calloc(S_size, sizeof(symbol *)); |
||||
if (z->S == NULL) goto error; |
||||
|
||||
if (!z) |
||||
return z; |
||||
for (i = 0; i < S_size; i++) |
||||
{ |
||||
z->S[i] = create_s(); |
||||
if (z->S[i] == NULL) goto error; |
||||
} |
||||
z->S_size = S_size; |
||||
} |
||||
|
||||
z->p = create_s(); |
||||
if (!z->p) |
||||
z = NULL; |
||||
if (I_size) |
||||
{ |
||||
z->I = (int *) calloc(I_size, sizeof(int)); |
||||
if (z->I == NULL) goto error; |
||||
z->I_size = I_size; |
||||
} |
||||
|
||||
if (z && S_size) |
||||
{ |
||||
if ((z->S = (symbol * *) calloc(S_size, sizeof(symbol *)))) |
||||
{ |
||||
int i; |
||||
if (B_size) |
||||
{ |
||||
z->B = (symbol *) calloc(B_size, sizeof(symbol)); |
||||
if (z->B == NULL) goto error; |
||||
z->B_size = B_size; |
||||
} |
||||
|
||||
for (i = 0; i < S_size; i++) |
||||
{ |
||||
if (!(z->S[i] = create_s())) |
||||
{ |
||||
z = NULL; |
||||
break; |
||||
} |
||||
} |
||||
z2->S_size = i; |
||||
} |
||||
else |
||||
z = NULL; |
||||
} |
||||
|
||||
if (z && I_size) |
||||
{ |
||||
z->I = (int *) calloc(I_size, sizeof(int)); |
||||
if (z->I) |
||||
z->I_size = I_size; |
||||
else |
||||
z = NULL; |
||||
} |
||||
|
||||
if (z && B_size) |
||||
{ |
||||
z->B = (symbol *) calloc(B_size, sizeof(symbol)); |
||||
if (z->B) |
||||
z->B_size = B_size; |
||||
else |
||||
z = NULL; |
||||
} |
||||
|
||||
if (!z) |
||||
SN_close_env(z2); |
||||
|
||||
return z; |
||||
return z; |
||||
error: |
||||
SN_close_env(z); |
||||
return NULL; |
||||
} |
||||
|
||||
void |
||||
SN_close_env(struct SN_env * z) |
||||
extern void SN_close_env(struct SN_env * z) |
||||
{ |
||||
if (z->S && z->S_size) |
||||
{ |
||||
{ |
||||
int i; |
||||
|
||||
for (i = 0; i < z->S_size; i++) |
||||
lose_s(z->S[i]); |
||||
} |
||||
free(z->S); |
||||
} |
||||
if (z->I_size) |
||||
free(z->I); |
||||
if (z->B_size) |
||||
free(z->B); |
||||
if (z->p) |
||||
lose_s(z->p); |
||||
free(z); |
||||
if (z == NULL) return; |
||||
if (z->S_size) |
||||
{ |
||||
int i; |
||||
for (i = 0; i < z->S_size; i++) |
||||
{ |
||||
lose_s(z->S[i]); |
||||
} |
||||
free(z->S); |
||||
} |
||||
if (z->I_size) free(z->I); |
||||
if (z->B_size) free(z->B); |
||||
if (z->p) lose_s(z->p); |
||||
free(z); |
||||
} |
||||
|
||||
void |
||||
SN_set_current(struct SN_env * z, int size, const symbol * s) |
||||
extern int SN_set_current(struct SN_env * z, int size, const symbol * s) |
||||
{ |
||||
replace_s(z, 0, z->l, size, s); |
||||
z->c = 0; |
||||
int err = replace_s(z, 0, z->l, size, s, NULL); |
||||
z->c = 0; |
||||
return err; |
||||
} |
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,51 +1,58 @@ |
||||
|
||||
#include <limits.h> |
||||
|
||||
#include "api.h" |
||||
|
||||
#define MAXINT INT_MAX |
||||
#define MININT INT_MIN |
||||
|
||||
#define HEAD 2*sizeof(int) |
||||
|
||||
#define SIZE(p) ((int *)(p))[-1] |
||||
#define SIZE(p) ((int *)(p))[-1] |
||||
#define SET_SIZE(p, n) ((int *)(p))[-1] = n |
||||
#define CAPACITY(p) ((int *)(p))[-2] |
||||
|
||||
struct among |
||||
{ |
||||
int s_size; /* number of chars in string */ |
||||
symbol *s; /* search string */ |
||||
int substring_i; /* index to longest matching substring */ |
||||
int result; /* result of the lookup */ |
||||
int (*function) (struct SN_env *); |
||||
{ int s_size; /* number of chars in string */ |
||||
symbol * s; /* search string */ |
||||
int substring_i;/* index to longest matching substring */ |
||||
int result; /* result of the lookup */ |
||||
int (* function)(struct SN_env *); |
||||
}; |
||||
|
||||
extern symbol *create_s(void); |
||||
extern symbol * create_s(void); |
||||
extern void lose_s(symbol * p); |
||||
|
||||
extern int in_grouping(struct SN_env * z, unsigned char *s, int min, int max); |
||||
extern int in_grouping_b(struct SN_env * z, unsigned char *s, int min, int max); |
||||
extern int out_grouping(struct SN_env * z, unsigned char *s, int min, int max); |
||||
extern int out_grouping_b(struct SN_env * z, unsigned char *s, int min, int max); |
||||
extern int skip_utf8(const symbol * p, int c, int lb, int l, int n); |
||||
|
||||
extern int in_range(struct SN_env * z, int min, int max); |
||||
extern int in_range_b(struct SN_env * z, int min, int max); |
||||
extern int out_range(struct SN_env * z, int min, int max); |
||||
extern int out_range_b(struct SN_env * z, int min, int max); |
||||
extern int in_grouping_U(struct SN_env * z, unsigned char * s, int min, int max); |
||||
extern int in_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max); |
||||
extern int out_grouping_U(struct SN_env * z, unsigned char * s, int min, int max); |
||||
extern int out_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max); |
||||
|
||||
extern int eq_s(struct SN_env * z, int s_size, symbol * s); |
||||
extern int eq_s_b(struct SN_env * z, int s_size, symbol * s); |
||||
extern int eq_v(struct SN_env * z, symbol * p); |
||||
extern int eq_v_b(struct SN_env * z, symbol * p); |
||||
extern int in_grouping(struct SN_env * z, unsigned char * s, int min, int max); |
||||
extern int in_grouping_b(struct SN_env * z, unsigned char * s, int min, int max); |
||||
extern int out_grouping(struct SN_env * z, unsigned char * s, int min, int max); |
||||
extern int out_grouping_b(struct SN_env * z, unsigned char * s, int min, int max); |
||||
|
||||
extern int find_among(struct SN_env * z, struct among * v, int v_size); |
||||
extern int find_among_b(struct SN_env * z, struct among * v, int v_size); |
||||
extern int eq_s(struct SN_env * z, int s_size, symbol * s); |
||||
extern int eq_s_b(struct SN_env * z, int s_size, symbol * s); |
||||
extern int eq_v(struct SN_env * z, symbol * p); |
||||
extern int eq_v_b(struct SN_env * z, symbol * p); |
||||
|
||||
extern symbol *increase_size(symbol * p, int n); |
||||
extern int replace_s(struct SN_env * z, int c_bra, int c_ket, int s_size, const symbol * s); |
||||
extern void slice_from_s(struct SN_env * z, int s_size, symbol * s); |
||||
extern void slice_from_v(struct SN_env * z, symbol * p); |
||||
extern void slice_del(struct SN_env * z); |
||||
extern int find_among(struct SN_env * z, struct among * v, int v_size); |
||||
extern int find_among_b(struct SN_env * z, struct among * v, int v_size); |
||||
|
||||
extern void insert_s(struct SN_env * z, int bra, int ket, int s_size, symbol * s); |
||||
extern void insert_v(struct SN_env * z, int bra, int ket, symbol * p); |
||||
extern int replace_s(struct SN_env * z, int c_bra, int c_ket, int s_size, const symbol * s, int * adjustment); |
||||
extern int slice_from_s(struct SN_env * z, int s_size, symbol * s); |
||||
extern int slice_from_v(struct SN_env * z, symbol * p); |
||||
extern int slice_del(struct SN_env * z); |
||||
|
||||
extern symbol *slice_to(struct SN_env * z, symbol * p); |
||||
extern symbol *assign_to(struct SN_env * z, symbol * p); |
||||
extern int insert_s(struct SN_env * z, int bra, int ket, int s_size, symbol * s); |
||||
extern int insert_v(struct SN_env * z, int bra, int ket, symbol * p); |
||||
|
||||
extern symbol * slice_to(struct SN_env * z, symbol * p); |
||||
extern symbol * assign_to(struct SN_env * z, symbol * p); |
||||
|
||||
extern void debug(struct SN_env * z, int number, int line_count); |
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue