Improve `ctlseqs_match()`.
This commit is contained in:
parent
aa3cef3bc7
commit
8ef507792b
|
@ -492,16 +492,25 @@ ctlseqs_matcher_config(struct ctlseqs_matcher *matcher, struct ctlseqs_matcher_o
|
||||||
}
|
}
|
||||||
|
|
||||||
CTLSEQS_HOT ssize_t
|
CTLSEQS_HOT ssize_t
|
||||||
ctlseqs_match(struct ctlseqs_matcher const *matcher, char const **seq_ptr, size_t seq_len, union ctlseqs_value *result)
|
ctlseqs_match(struct ctlseqs_matcher const *matcher, char const *str, size_t str_len, union ctlseqs_value *result)
|
||||||
{
|
{
|
||||||
struct ctlseqs_match_args args = {
|
struct ctlseqs_match_args args = {
|
||||||
.seq = *seq_ptr,
|
.seq = str,
|
||||||
.seq_len = seq_len,
|
.seq_len = str_len,
|
||||||
.result = result,
|
.result = result,
|
||||||
.save_seq = false,
|
.save_seq = true,
|
||||||
};
|
};
|
||||||
ssize_t retval = ctlseqs_do_match(matcher, &args);
|
ssize_t retval;
|
||||||
*seq_ptr += args.result_idx;
|
try_match:
|
||||||
|
retval = ctlseqs_do_match(matcher, &args);
|
||||||
|
if (retval == CTLSEQS_NOSEQ) {
|
||||||
|
size_t result_len = args.result[0].len;
|
||||||
|
if (result_len < str_len) {
|
||||||
|
args.seq += result_len;
|
||||||
|
args.seq_len -= result_len;
|
||||||
|
goto try_match;
|
||||||
|
}
|
||||||
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -407,7 +407,7 @@ void
|
||||||
ctlseqs_matcher_free(struct ctlseqs_matcher *matcher);
|
ctlseqs_matcher_free(struct ctlseqs_matcher *matcher);
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
ctlseqs_match(struct ctlseqs_matcher const *matcher, char const **seq_ptr, size_t seq_len, union ctlseqs_value *result);
|
ctlseqs_match(struct ctlseqs_matcher const *matcher, char const *str, size_t str_len, union ctlseqs_value *result);
|
||||||
|
|
||||||
struct ctlseqs_reader *
|
struct ctlseqs_reader *
|
||||||
ctlseqs_reader_init();
|
ctlseqs_reader_init();
|
||||||
|
|
Loading…
Reference in New Issue