PostgreSQL Source Code git master
snowball_runtime.h
Go to the documentation of this file.
1#ifndef SNOWBALL_INCLUDED_SNOWBALL_RUNTIME_H
2#define SNOWBALL_INCLUDED_SNOWBALL_RUNTIME_H
3
4#include "api.h"
5
6#define HEAD 2*sizeof(int)
7
8#ifdef __cplusplus
9/* Use reinterpret_cast<> to avoid -Wcast-align warnings from clang++. */
10# define SIZE(p) (reinterpret_cast<const int *>(p))[-1]
11# define SET_SIZE(p, n) (reinterpret_cast<int *>(p))[-1] = n
12# define CAPACITY(p) (reinterpret_cast<int *>(p))[-2]
13#else
14# define SIZE(p) ((const int *)(p))[-1]
15# define SET_SIZE(p, n) ((int *)(p))[-1] = n
16# define CAPACITY(p) ((int *)(p))[-2]
17#endif
18
19#ifdef SNOWBALL_RUNTIME_THROW_EXCEPTIONS
20# define SNOWBALL_ERR void
21#else
22# define SNOWBALL_ERR int
23#endif
24
25#ifdef SNOWBALL_DEBUG_COMMAND_USED
26# include <stdio.h>
27static void debug(struct SN_env * z, int number, int line_count) {
28 int i;
29 int limit = SIZE(z->p);
30 if (number >= 0) printf("%3d (line %4d): [%d]'", number, line_count, limit);
31 for (i = 0; i <= limit; i++) {
32 if (z->lb == i) printf("{");
33 if (z->bra == i) printf("[");
34 if (z->c == i) printf("|");
35 if (z->ket == i) printf("]");
36 if (z->l == i) printf("}");
37 if (i < limit) {
38 int ch = z->p[i];
39 if (ch == 0) ch = '#';
40 printf("%c", ch);
41 }
42 }
43 printf("'\n");
44}
45#endif
46
47struct among
48{
49 /* Number of symbols in s. */
50 int s_size;
51 /* Search string. */
52 const symbol * s;
53 /* Delta of index to longest matching substring, or 0 if none. */
55 /* Result of the lookup. */
56 int result;
57 /* Optional condition routine index, or 0 if none. */
59};
60
61#ifdef __cplusplus
62extern "C" {
63#endif
64
65extern symbol * create_s(void);
66extern void lose_s(symbol * p);
67
68extern int skip_utf8(const symbol * p, int c, int limit, int n);
69
70extern int skip_b_utf8(const symbol * p, int c, int limit, int n);
71
72extern int in_grouping_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
73extern int in_grouping_b_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
74extern int out_grouping_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
75extern int out_grouping_b_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
76
77extern int in_grouping(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
78extern int in_grouping_b(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
79extern int out_grouping(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
80extern int out_grouping_b(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
81
82extern int eq_s(struct SN_env * z, int s_size, const symbol * s);
83extern int eq_s_b(struct SN_env * z, int s_size, const symbol * s);
84extern int eq_v(struct SN_env * z, const symbol * p);
85extern int eq_v_b(struct SN_env * z, const symbol * p);
86
87extern int find_among(struct SN_env * z, const struct among * v, int v_size,
88 int (*)(struct SN_env *));
89extern int find_among_b(struct SN_env * z, const struct among * v, int v_size,
90 int (*)(struct SN_env *));
91
92extern SNOWBALL_ERR replace_s(struct SN_env * z, int c_bra, int c_ket, int s_size, const symbol * s);
93extern SNOWBALL_ERR slice_from_s(struct SN_env * z, int s_size, const symbol * s);
94extern SNOWBALL_ERR slice_from_v(struct SN_env * z, const symbol * p);
95extern SNOWBALL_ERR slice_del(struct SN_env * z);
96
97extern SNOWBALL_ERR insert_s(struct SN_env * z, int bra, int ket, int s_size, const symbol * s);
98extern SNOWBALL_ERR insert_v(struct SN_env * z, int bra, int ket, const symbol * p);
99
100extern SNOWBALL_ERR slice_to(struct SN_env * z, symbol ** p);
101extern SNOWBALL_ERR assign_to(struct SN_env * z, symbol ** p);
102
103extern int len_utf8(const symbol * p);
104
105#ifdef __cplusplus
106}
107#endif
108
109#endif
unsigned char symbol
Definition: api.h:4
static bool debug
Definition: initdb.c:161
int i
Definition: isn.c:77
int out_grouping_U(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.c:157
#define SIZE(p)
int in_grouping_U(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.c:133
SNOWBALL_ERR insert_s(struct SN_env *z, int bra, int ket, int s_size, const symbol *s)
Definition: utilities.c:464
int eq_v_b(struct SN_env *z, const symbol *p)
Definition: utilities.c:245
SNOWBALL_ERR slice_from_s(struct SN_env *z, int s_size, const symbol *s)
Definition: utilities.c:432
int in_grouping(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.c:183
SNOWBALL_ERR slice_to(struct SN_env *z, symbol **p)
Definition: utilities.c:478
SNOWBALL_ERR assign_to(struct SN_env *z, symbol **p)
Definition: utilities.c:491
SNOWBALL_ERR slice_from_v(struct SN_env *z, const symbol *p)
Definition: utilities.c:439
int eq_s(struct SN_env *z, int s_size, const symbol *s)
Definition: utilities.c:231
SNOWBALL_ERR insert_v(struct SN_env *z, int bra, int ket, const symbol *p)
Definition: utilities.c:474
int eq_v(struct SN_env *z, const symbol *p)
Definition: utilities.c:241
SNOWBALL_ERR replace_s(struct SN_env *z, int c_bra, int c_ket, int s_size, const symbol *s)
Definition: utilities.c:389
void lose_s(symbol *p)
Definition: utilities.c:31
int out_grouping_b(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.c:219
int in_grouping_b_U(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.c:145
int skip_b_utf8(const symbol *p, int c, int limit, int n)
Definition: utilities.c:68
int eq_s_b(struct SN_env *z, int s_size, const symbol *s)
Definition: utilities.c:236
int out_grouping(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.c:207
SNOWBALL_ERR slice_del(struct SN_env *z)
Definition: utilities.c:443
int out_grouping_b_U(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.c:169
symbol * create_s(void)
Definition: utilities.c:20
int skip_utf8(const symbol *p, int c, int limit, int n)
Definition: utilities.c:43
int in_grouping_b(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.c:195
int find_among_b(struct SN_env *z, const struct among *v, int v_size, int(*)(struct SN_env *))
Definition: utilities.c:315
int len_utf8(const symbol *p)
Definition: utilities.c:501
int find_among(struct SN_env *z, const struct among *v, int v_size, int(*)(struct SN_env *))
Definition: utilities.c:249
#define SNOWBALL_ERR
Datum repeat(PG_FUNCTION_ARGS)
#define printf(...)
Definition: port.h:266
char * c
Definition: api.h:15
int lb
Definition: api.h:17
symbol * p
Definition: api.h:16
int ket
Definition: api.h:17
int c
Definition: api.h:17
int bra
Definition: api.h:17
int l
Definition: api.h:17
int substring_i
const symbol * s
int function