String-Approx
view release on metacpan or search on metacpan
warn("Usage: new(pattern[, edit_distance])\n");
XSRETURN_UNDEF;
}
ap = apse_create((unsigned char *)SvPV(pattern, PL_na),
pattern_size, edit_distance);
if (ap) {
RETVAL = ap;
} else {
warn("unable to allocate");
XSRETURN_UNDEF;
}
OUTPUT:
RETVAL
void
DESTROY(ap)
apse_t* ap
CODE:
apse_destroy(ap);
apse_bool_t
match(ap, text)
apse_t* ap
SV* text
CODE:
RETVAL = apse_match(ap,
(unsigned char *)SvPV(text, PL_na),
sv_len(text));
OUTPUT:
RETVAL
apse_bool_t
match_next(ap, text)
apse_t* ap
SV* text
CODE:
RETVAL = apse_match_next(ap,
(unsigned char *)SvPV(text, PL_na),
sv_len(text));
OUTPUT:
RETVAL
apse_ssize_t
index(ap, text)
apse_t* ap
SV* text
CODE:
RETVAL = apse_index(ap,
(unsigned char *)SvPV(text, PL_na),
sv_len(text));
OUTPUT:
RETVAL
void
slice(ap, text)
apse_t* ap
SV* text
PREINIT:
apse_size_t match_begin;
apse_size_t match_size;
PPCODE:
if (ap->use_minimal_distance) {
apse_slice(ap,
(unsigned char *)SvPV(text, PL_na),
(apse_size_t)sv_len(text),
&match_begin,
&match_size);
EXTEND(sp, 3);
PUSHs(sv_2mortal(newSViv(match_begin)));
PUSHs(sv_2mortal(newSViv(match_size)));
PUSHs(sv_2mortal(newSViv(ap->edit_distance)));
} else if (apse_slice(ap,
(unsigned char *)SvPV(text, PL_na),
(apse_size_t)sv_len(text),
&match_begin,
&match_size)) {
EXTEND(sp, 2);
PUSHs(sv_2mortal(newSViv(match_begin)));
PUSHs(sv_2mortal(newSViv(match_size)));
}
void
slice_next(ap, text)
apse_t* ap
SV* text
PREINIT:
apse_size_t match_begin;
apse_size_t match_size;
PPCODE:
if (apse_slice_next(ap,
(unsigned char *)SvPV(text, PL_na),
sv_len(text),
&match_begin,
&match_size)) {
EXTEND(sp, 2);
PUSHs(sv_2mortal(newSViv(match_begin)));
PUSHs(sv_2mortal(newSViv(match_size)));
if (ap->use_minimal_distance) {
EXTEND(sp, 1);
PUSHs(sv_2mortal(newSViv(ap->edit_distance)));
}
}
void
set_greedy(ap)
apse_t* ap
CODE:
apse_set_greedy(ap, 1);
apse_bool_t
set_caseignore_slice(ap, ...)
apse_t* ap
PREINIT:
apse_size_t offset;
apse_size_t size;
apse_bool_t ignore;
CODE:
offset = items < 2 ? 0 : (apse_size_t)SvIV(ST(1));
size = items < 3 ? ap->pattern_size : (apse_size_t)SvIV(ST(2));
ignore = items < 4 ? 1 : (apse_bool_t)SvIV(ST(3));
RETVAL = apse_set_caseignore_slice(ap, offset, size, ignore);
OUTPUT:
RETVAL
apse_bool_t
set_insertions(ap, insertions)
apse_t* ap
apse_size_t insertions = SvUV($arg);
CODE:
RETVAL = apse_set_insertions(ap, insertions);
OUTPUT:
RETVAL
apse_bool_t
set_deletions(ap, deletions)
apse_t* ap
apse_size_t deletions = SvUV($arg);
CODE:
RETVAL = apse_set_deletions(ap, deletions);
OUTPUT:
RETVAL
apse_bool_t
set_substitutions(ap, substitutions)
apse_t* ap
apse_size_t substitutions = SvUV($arg);
CODE:
RETVAL = apse_set_substitutions(ap, substitutions);
OUTPUT:
( run in 0.654 second using v1.01-cache-2.11-cpan-5511b514fd6 )