Definition at line 73 of file levenshtein.c.
78{
79 int m,
80 n;
81 int *prev;
88
89
90
91
92
93
94#ifdef LEVENSHTEIN_LESS_EQUAL
97
98#undef START_COLUMN
99#undef STOP_COLUMN
100#define START_COLUMN start_column
101#define STOP_COLUMN stop_column
102#else
103#undef START_COLUMN
104#undef STOP_COLUMN
105#define START_COLUMN 0
106#define STOP_COLUMN m
107#endif
108
109
112
113
114
115
116
117 if (!m)
119 if (!n)
121
122
123
124
125
126
127
128
129 if (!trusted &&
134 errmsg(
"levenshtein argument exceeds maximum length of %d characters",
136
137#ifdef LEVENSHTEIN_LESS_EQUAL
138
141
142
143
144
145
146
147
148 if (max_d >= 0)
149 {
153
157 return max_d + 1;
162 max_d = -1;
164 {
165
166
167
168
169
170
171
172
173
174
175
176
179
183 }
184 }
185#endif
186
187
188
189
190
191
192
193
194
196 {
199
201 for (
i = 0;
i < m; ++
i)
202 {
205 }
207 }
208
209
210 ++m;
211 ++n;
212
213
214 prev = (
int *)
palloc(2 * m *
sizeof(
int));
216
217
218
219
220
223
224
225 for (
y = target,
j = 1;
j < n;
j++)
226 {
231
232#ifdef LEVENSHTEIN_LESS_EQUAL
233
234
235
236
237
238
239
241 {
244 }
245
246
247
248
249
250
251
253 {
256 }
257 else
259#else
262#endif
263
264
265
266
267
268
269
270
272 {
274 {
275 int ins;
277 int sub;
279
280
281
282
283
284
285
286
287
288
295 else
296 sub = prev[
i - 1] +
sub_c;
297
298
301
302
304 }
305 }
306 else
307 {
309 {
310 int ins;
312 int sub;
313
314
317 sub = prev[
i - 1] + ((*
x == *
y) ? 0 :
sub_c);
318
319
322
323
325 }
326 }
327
328
332
333
335
336#ifdef LEVENSHTEIN_LESS_EQUAL
337
338
339
340
341
342
343
344
345 if (max_d >= 0)
346 {
347
348
349
350
351
352
353
354
355 int zp =
j - (n - m);
356
357
359 {
362
367 }
368
369
371 {
373
378
379
380
381
382
383
389 }
390
391
393 return max_d + 1;
394 }
395#endif
396 }
397
398
399
400
401
402 return prev[m - 1];
403}
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_range(const char *mbstr, const char *end)
static rewind_source * source
static bool rest_of_char_same(const char *s1, const char *s2, int len)
#define send(s, buf, len, flags)
References ereport, errcode(), errmsg(), ERROR, fb(), i, j, MAX_LEVENSHTEIN_STRLEN, Min, palloc(), pg_mblen_range(), pg_mbstrlen_with_len(), rest_of_char_same(), send, source, START_COLUMN, STOP_COLUMN, x, and y.
Referenced by levenshtein(), and levenshtein_with_costs().