diff --git a/peglib.h b/peglib.h index 5545a08..8b51b11 100644 --- a/peglib.h +++ b/peglib.h @@ -3955,11 +3955,12 @@ public: load_grammar(s, n, rules); } - parser(const char *s, const Rules &rules) : parser(s, strlen(s), rules) {} + parser(std::string_view sv, const Rules &rules) + : parser(sv.data(), sv.size(), rules) {} parser(const char *s, size_t n) : parser(s, n, Rules()) {} - parser(const char *s) : parser(s, strlen(s), Rules()) {} + parser(std::string_view sv) : parser(sv.data(), sv.size(), Rules()) {} operator bool() { return grammar_ != nullptr; } @@ -3972,14 +3973,12 @@ public: return load_grammar(s, n, Rules()); } - bool load_grammar(const char *s, const Rules &rules) { - auto n = strlen(s); - return load_grammar(s, n, rules); + bool load_grammar(std::string_view sv, const Rules &rules) { + return load_grammar(sv.data(), sv.size(), rules); } - bool load_grammar(const char *s) { - auto n = strlen(s); - return load_grammar(s, n); + bool load_grammar(std::string_view sv) { + return load_grammar(sv.data(), sv.size()); } bool parse_n(const char *s, size_t n, const char *path = nullptr) const { @@ -3990,9 +3989,8 @@ public: return false; } - bool parse(const char *s, const char *path = nullptr) const { - auto n = strlen(s); - return parse_n(s, n, path); + bool parse(std::string_view sv, const char *path = nullptr) const { + return parse_n(sv.data(), sv.size(), path); } bool parse_n(const char *s, size_t n, std::any &dt, @@ -4004,9 +4002,9 @@ public: return false; } - bool parse(const char *s, std::any &dt, const char *path = nullptr) const { - auto n = strlen(s); - return parse_n(s, n, dt, path); + bool parse(std::string_view sv, std::any &dt, + const char *path = nullptr) const { + return parse_n(sv.data(), sv.size(), dt, path); } template @@ -4020,9 +4018,8 @@ public: } template - bool parse(const char *s, T &val, const char *path = nullptr) const { - auto n = strlen(s); - return parse_n(s, n, val, path); + bool parse(std::string_view sv, T &val, const char *path = nullptr) const { + return parse_n(sv.data(), sv.size(), val, path); } template @@ -4077,7 +4074,9 @@ public: return *this; } - template std::shared_ptr optimize_ast(std::shared_ptr ast, bool opt_mode = true) const { + template + std::shared_ptr optimize_ast(std::shared_ptr ast, + bool opt_mode = true) const { return AstOptimizer(opt_mode, get_no_ast_opt_rules()).optimize(ast); }