#ifndef LIBREGEXIS024_SRC_LIBREGEXIS024SOL_SUBEXPR_FA_TRANSFORMED_H #define LIBREGEXIS024_SRC_LIBREGEXIS024SOL_SUBEXPR_FA_TRANSFORMED_H #include namespace regexis024 { struct SubExprCompiled{ FA_Node* start = NULL; /* After putting there values from neighbour vectors in nodes, these vectors must not change size */ std::vector ends; bool can_be_empty = true; void assertDefault(); }; SubExprCompiled subexpr_charset_reading_filter(const codeset_t& codeset, FA_Container& fa); SubExprCompiled join(const SubExprCompiled& A, const SubExprCompiled& B); SubExprCompiled forkify(const std::vector& options, FA_Container& fa); SubExprCompiled subexpression_from_path(FA_NodePathPart* node); /* And then Robert Angier said `It's prestige time` and prestiged all over the place. * If you still don't get it, this function copies section of NFA of regexp */ SubExprCompiled RobertAngier(const SubExprCompiled& source, FA_Container& fa); #define REGEXIS024_MAX_REPEAT 64 /* pass REGEXIS024_MAX_REPEAT + 1 as max_allowed to allow infinite repeat */ void apply_repeat_to_subexpression(SubExprCompiled& patient, FA_Container& fa, size_t min_allowed, size_t max_allowed); } #endif //LIBREGEXIS024_SRC_LIBREGEXIS024SOL_SUBEXPR_FA_TRANSFORMED_H