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_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 = {
|
||||
.seq = *seq_ptr,
|
||||
.seq_len = seq_len,
|
||||
.seq = str,
|
||||
.seq_len = str_len,
|
||||
.result = result,
|
||||
.save_seq = false,
|
||||
.save_seq = true,
|
||||
};
|
||||
ssize_t retval = ctlseqs_do_match(matcher, &args);
|
||||
*seq_ptr += args.result_idx;
|
||||
ssize_t retval;
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -407,7 +407,7 @@ void
|
|||
ctlseqs_matcher_free(struct ctlseqs_matcher *matcher);
|
||||
|
||||
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 *
|
||||
ctlseqs_reader_init();
|
||||
|
|
Loading…
Reference in New Issue