xapian-core  2.0.0
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>
27 static 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 
47 struct 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. */
58  int function;
59 };
60 
61 /* MSVC doesn't like functions declared `extern "C"` throwing exceptions. */
62 #if defined __cplusplus && !defined SNOWBALL_RUNTIME_THROW_EXCEPTIONS
63 extern "C" {
64 #endif
65 
66 extern symbol * create_s(void);
67 extern void lose_s(symbol * p);
68 
69 extern int skip_utf8(const symbol * p, int c, int limit, int n);
70 
71 extern int skip_b_utf8(const symbol * p, int c, int limit, int n);
72 
73 extern int in_grouping_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
74 extern int in_grouping_b_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
75 extern int out_grouping_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
76 extern int out_grouping_b_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
77 
78 extern int in_grouping(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
79 extern int in_grouping_b(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
80 extern int out_grouping(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
81 extern int out_grouping_b(struct SN_env * z, const unsigned char * s, int min, int max, int repeat);
82 
83 extern int eq_s(struct SN_env * z, int s_size, const symbol * s);
84 extern int eq_s_b(struct SN_env * z, int s_size, const symbol * s);
85 extern int eq_v(struct SN_env * z, const symbol * p);
86 extern int eq_v_b(struct SN_env * z, const symbol * p);
87 
88 extern int find_among(struct SN_env * z, const struct among * v, int v_size,
89  int (*)(struct SN_env *));
90 extern int find_among_b(struct SN_env * z, const struct among * v, int v_size,
91  int (*)(struct SN_env *));
92 
93 extern SNOWBALL_ERR replace_s(struct SN_env * z, int c_bra, int c_ket, int s_size, const symbol * s);
94 extern SNOWBALL_ERR slice_from_s(struct SN_env * z, int s_size, const symbol * s);
95 extern SNOWBALL_ERR slice_from_v(struct SN_env * z, const symbol * p);
96 extern SNOWBALL_ERR slice_del(struct SN_env * z);
97 
98 extern SNOWBALL_ERR insert_s(struct SN_env * z, int bra, int ket, int s_size, const symbol * s);
99 extern SNOWBALL_ERR insert_v(struct SN_env * z, int bra, int ket, const symbol * p);
100 
101 extern SNOWBALL_ERR slice_to(struct SN_env * z, symbol ** p);
102 extern SNOWBALL_ERR assign_to(struct SN_env * z, symbol ** p);
103 
104 extern int len_utf8(const symbol * p);
105 
106 #if defined __cplusplus && !defined SNOWBALL_RUNTIME_THROW_EXCEPTIONS
107 }
108 #endif
109 
110 #endif
unsigned char symbol
Definition: api.h:4
PositionList * p
@ c_ket
Definition: header.h:121
@ c_bra
Definition: header.h:117
int out_grouping_U(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.cc:164
#define SIZE(p)
int in_grouping_U(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.cc:140
SNOWBALL_ERR insert_s(struct SN_env *z, int bra, int ket, int s_size, const symbol *s)
Definition: utilities.cc:471
int eq_v_b(struct SN_env *z, const symbol *p)
Definition: utilities.cc:252
SNOWBALL_ERR slice_from_s(struct SN_env *z, int s_size, const symbol *s)
Definition: utilities.cc:439
int in_grouping(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.cc:190
SNOWBALL_ERR slice_to(struct SN_env *z, symbol **p)
Definition: utilities.cc:485
SNOWBALL_ERR assign_to(struct SN_env *z, symbol **p)
Definition: utilities.cc:498
SNOWBALL_ERR slice_from_v(struct SN_env *z, const symbol *p)
Definition: utilities.cc:446
int eq_s(struct SN_env *z, int s_size, const symbol *s)
Definition: utilities.cc:238
SNOWBALL_ERR insert_v(struct SN_env *z, int bra, int ket, const symbol *p)
Definition: utilities.cc:481
int eq_v(struct SN_env *z, const symbol *p)
Definition: utilities.cc:248
SNOWBALL_ERR replace_s(struct SN_env *z, int c_bra, int c_ket, int s_size, const symbol *s)
Definition: utilities.cc:396
void lose_s(symbol *p)
Definition: utilities.cc:38
symbol * create_s(void)
Definition: utilities.cc:27
int out_grouping_b(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.cc:226
int in_grouping_b_U(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.cc:152
int skip_b_utf8(const symbol *p, int c, int limit, int n)
Definition: utilities.cc:75
int eq_s_b(struct SN_env *z, int s_size, const symbol *s)
Definition: utilities.cc:243
int out_grouping(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.cc:214
SNOWBALL_ERR slice_del(struct SN_env *z)
Definition: utilities.cc:450
int out_grouping_b_U(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.cc:176
int skip_utf8(const symbol *p, int c, int limit, int n)
Definition: utilities.cc:50
int in_grouping_b(struct SN_env *z, const unsigned char *s, int min, int max, int repeat)
Definition: utilities.cc:202
int find_among_b(struct SN_env *z, const struct among *v, int v_size, int(*)(struct SN_env *))
Definition: utilities.cc:322
int len_utf8(const symbol *p)
Definition: utilities.cc:508
int find_among(struct SN_env *z, const struct among *v, int v_size, int(*)(struct SN_env *))
Definition: utilities.cc:256
#define SNOWBALL_ERR
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
Definition: header.h:256
int substring_i
const symbol * s