Definition at line 73 of file levenshtein.c.
78{
79 int m,
80 n;
81 int *prev;
86
87
88
89
90
91
92#ifdef LEVENSHTEIN_LESS_EQUAL
95
96#undef START_COLUMN
97#undef STOP_COLUMN
98#define START_COLUMN start_column
99#define STOP_COLUMN stop_column
100#else
101#undef START_COLUMN
102#undef STOP_COLUMN
103#define START_COLUMN 0
104#define STOP_COLUMN m
105#endif
106
107
110
111
112
113
114
115 if (!m)
117 if (!n)
119
120
121
122
123
124
125
126
127 if (!trusted &&
132 errmsg(
"levenshtein argument exceeds maximum length of %d characters",
134
135#ifdef LEVENSHTEIN_LESS_EQUAL
136
139
140
141
142
143
144
145
146 if (max_d >= 0)
147 {
151
155 return max_d + 1;
160 max_d = -1;
162 {
163
164
165
166
167
168
169
170
171
172
173
174
177
181 }
182 }
183#endif
184
185
186
187
188
189
190
191
192
194 {
197
199 for (
i = 0;
i < m; ++
i)
200 {
203 }
205 }
206
207
208 ++m;
209 ++n;
210
211
212 prev = (
int *)
palloc(2 * m *
sizeof(
int));
214
215
216
217
218
221
222
223 for (
y = target,
j = 1;
j < n;
j++)
224 {
229
230#ifdef LEVENSHTEIN_LESS_EQUAL
231
232
233
234
235
236
237
239 {
242 }
243
244
245
246
247
248
249
251 {
254 }
255 else
257#else
260#endif
261
262
263
264
265
266
267
268
270 {
272 {
273 int ins;
275 int sub;
277
278
279
280
281
282
283
284
285
286
293 else
294 sub = prev[
i - 1] +
sub_c;
295
296
299
300
302 }
303 }
304 else
305 {
307 {
308 int ins;
310 int sub;
311
312
315 sub = prev[
i - 1] + ((*
x == *
y) ? 0 :
sub_c);
316
317
320
321
323 }
324 }
325
326
330
331
333
334#ifdef LEVENSHTEIN_LESS_EQUAL
335
336
337
338
339
340
341
342
343 if (max_d >= 0)
344 {
345
346
347
348
349
350
351
352
353 int zp =
j - (n - m);
354
355
357 {
360
365 }
366
367
369 {
371
376
377
378
379
380
381
387 }
388
389
391 return max_d + 1;
392 }
393#endif
394 }
395
396
397
398
399
400 return prev[m - 1];
401}
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
#define MAX_LEVENSHTEIN_STRLEN
int pg_mbstrlen_with_len(const char *mbstr, int limit)
int pg_mblen(const char *mbstr)
static rewind_source * source
static bool rest_of_char_same(const char *s1, const char *s2, int len)
References ereport, errcode(), errmsg(), ERROR, fb(), i, j, MAX_LEVENSHTEIN_STRLEN, Min, palloc(), pg_mblen(), pg_mbstrlen_with_len(), rest_of_char_same(), source, START_COLUMN, STOP_COLUMN, x, and y.
Referenced by levenshtein(), and levenshtein_with_costs().