/* retoor */ #ifndef LOREX_MATCHER_H #define LOREX_MATCHER_H #include "nfa.h" #include "lorex.h" typedef struct { nfa_state_t **states; size_t count; size_t capacity; size_t *group_starts; size_t *group_ends; int group_count; } state_set_t; state_set_t *state_set_create(size_t initial_capacity, int group_count); void state_set_free(state_set_t *set); void state_set_clear(state_set_t *set); void state_set_add(state_set_t *set, nfa_state_t *state); bool state_set_contains(state_set_t *set, nfa_state_t *state); typedef struct match_ctx match_ctx_t; match_ctx_t *match_ctx_create(nfa_t *nfa); void match_ctx_free(match_ctx_t *ctx); bool nfa_match(nfa_t *nfa, const char *text, size_t start_pos, lorex_match_t *result); bool nfa_match_with_ctx(nfa_t *nfa, const char *text, size_t start_pos, lorex_match_t *result, match_ctx_t *ctx); bool nfa_search(nfa_t *nfa, const char *text, lorex_match_t *result); #endif