From fdea5e162851330f4ac4cd733a7e842a591cc267 Mon Sep 17 00:00:00 2001 From: Brian Gianforcaro Date: Thu, 16 Sep 2021 00:02:45 -0700 Subject: [PATCH] LibRegex: Pass RegexStringView and Vector by reference Flagged by pvs-studio, it looks like these were intended to be passed by reference originally, but it was missed. This avoids excessive argument copy when searching / matching in the regex API. Before: Command: /usr/Tests/LibRegex/Regex --bench Average time: 5998.29 ms (median: 5991, stddev: 102.18) After: Command: /usr/Tests/LibRegex/Regex --bench Average time: 5623.2 ms (median: 5623, stddev: 86.25) --- Userland/Libraries/LibRegex/RegexMatcher.h | 42 +++++++++++----------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/Userland/Libraries/LibRegex/RegexMatcher.h b/Userland/Libraries/LibRegex/RegexMatcher.h index a7d0b629fd..a32e25ef8a 100644 --- a/Userland/Libraries/LibRegex/RegexMatcher.h +++ b/Userland/Libraries/LibRegex/RegexMatcher.h @@ -100,21 +100,21 @@ public: void print_bytecode(FILE* f = stdout) const; String error_string(Optional message = {}) const; - RegexResult match(RegexStringView const view, Optional::OptionsType> regex_options = {}) const + RegexResult match(RegexStringView const& view, Optional::OptionsType> regex_options = {}) const { if (!matcher || parser_result.error != Error::NoError) return {}; return matcher->match(view, regex_options); } - RegexResult match(Vector const views, Optional::OptionsType> regex_options = {}) const + RegexResult match(Vector const& views, Optional::OptionsType> regex_options = {}) const { if (!matcher || parser_result.error != Error::NoError) return {}; return matcher->match(views, regex_options); } - String replace(RegexStringView const view, StringView const& replacement_pattern, Optional::OptionsType> regex_options = {}) const + String replace(RegexStringView const& view, StringView const& replacement_pattern, Optional::OptionsType> regex_options = {}) const { if (!matcher || parser_result.error != Error::NoError) return {}; @@ -155,7 +155,7 @@ public: // FIXME: replace(Vector const , ...) - RegexResult search(RegexStringView const view, Optional::OptionsType> regex_options = {}) const + RegexResult search(RegexStringView const& view, Optional::OptionsType> regex_options = {}) const { if (!matcher || parser_result.error != Error::NoError) return {}; @@ -171,7 +171,7 @@ public: return matcher->match(view, options); } - RegexResult search(Vector const views, Optional::OptionsType> regex_options = {}) const + RegexResult search(Vector const& views, Optional::OptionsType> regex_options = {}) const { if (!matcher || parser_result.error != Error::NoError) return {}; @@ -187,31 +187,31 @@ public: return matcher->match(views, options); } - bool match(RegexStringView const view, RegexResult& m, Optional::OptionsType> regex_options = {}) const + bool match(RegexStringView const& view, RegexResult& m, Optional::OptionsType> regex_options = {}) const { m = match(view, regex_options); return m.success; } - bool match(Vector const views, RegexResult& m, Optional::OptionsType> regex_options = {}) const + bool match(Vector const& views, RegexResult& m, Optional::OptionsType> regex_options = {}) const { m = match(views, regex_options); return m.success; } - bool search(RegexStringView const view, RegexResult& m, Optional::OptionsType> regex_options = {}) const + bool search(RegexStringView const& view, RegexResult& m, Optional::OptionsType> regex_options = {}) const { m = search(view, regex_options); return m.success; } - bool search(Vector const views, RegexResult& m, Optional::OptionsType> regex_options = {}) const + bool search(Vector const& views, RegexResult& m, Optional::OptionsType> regex_options = {}) const { m = search(views, regex_options); return m.success; } - bool has_match(RegexStringView const view, Optional::OptionsType> regex_options = {}) const + bool has_match(RegexStringView const& view, Optional::OptionsType> regex_options = {}) const { if (!matcher || parser_result.error != Error::NoError) return false; @@ -219,7 +219,7 @@ public: return result.success; } - bool has_match(Vector const views, Optional::OptionsType> regex_options = {}) const + bool has_match(Vector const& views, Optional::OptionsType> regex_options = {}) const { if (!matcher || parser_result.error != Error::NoError) return false; @@ -236,61 +236,61 @@ private: // free standing functions for match, search and has_match template -RegexResult match(RegexStringView const view, Regex& pattern, Optional::OptionsType> regex_options = {}) +RegexResult match(RegexStringView const& view, Regex& pattern, Optional::OptionsType> regex_options = {}) { return pattern.match(view, regex_options); } template -RegexResult match(Vector const view, Regex& pattern, Optional::OptionsType> regex_options = {}) +RegexResult match(Vector const& view, Regex& pattern, Optional::OptionsType> regex_options = {}) { return pattern.match(view, regex_options); } template -bool match(RegexStringView const view, Regex& pattern, RegexResult&, Optional::OptionsType> regex_options = {}) +bool match(RegexStringView const& view, Regex& pattern, RegexResult&, Optional::OptionsType> regex_options = {}) { return pattern.match(view, regex_options); } template -bool match(Vector const view, Regex& pattern, RegexResult&, Optional::OptionsType> regex_options = {}) +bool match(Vector const& view, Regex& pattern, RegexResult&, Optional::OptionsType> regex_options = {}) { return pattern.match(view, regex_options); } template -RegexResult search(RegexStringView const view, Regex& pattern, Optional::OptionsType> regex_options = {}) +RegexResult search(RegexStringView const& view, Regex& pattern, Optional::OptionsType> regex_options = {}) { return pattern.search(view, regex_options); } template -RegexResult search(Vector const views, Regex& pattern, Optional::OptionsType> regex_options = {}) +RegexResult search(Vector const& views, Regex& pattern, Optional::OptionsType> regex_options = {}) { return pattern.search(views, regex_options); } template -bool search(RegexStringView const view, Regex& pattern, RegexResult&, Optional::OptionsType> regex_options = {}) +bool search(RegexStringView const& view, Regex& pattern, RegexResult&, Optional::OptionsType> regex_options = {}) { return pattern.search(view, regex_options); } template -bool search(Vector const views, Regex& pattern, RegexResult&, Optional::OptionsType> regex_options = {}) +bool search(Vector const& views, Regex& pattern, RegexResult&, Optional::OptionsType> regex_options = {}) { return pattern.search(views, regex_options); } template -bool has_match(RegexStringView const view, Regex& pattern, Optional::OptionsType> regex_options = {}) +bool has_match(RegexStringView const& view, Regex& pattern, Optional::OptionsType> regex_options = {}) { return pattern.has_match(view, regex_options); } template -bool has_match(Vector const views, Regex& pattern, Optional::OptionsType> regex_options = {}) +bool has_match(Vector const& views, Regex& pattern, Optional::OptionsType> regex_options = {}) { return pattern.has_match(views, regex_options); }