Make regular expressions static variables.
continuous-integration/drone/push Build is passing Details

Fewer allocations → faster program. About 17% speed increase with 89 books on up
to 3 cores. Measured using the average of 4 runs.
Before: ~15,5 seconds
 After: ~12,8 seconds

Calls to allocation functions went down from 16.652.583 to 5.059.301.
This commit is contained in:
tastytea 2021-05-28 19:07:27 +02:00
parent 4df7b36dfc
commit 4ff796a590
Signed by: tastytea
GPG Key ID: CFC39497F1B26E07
1 changed files with 9 additions and 7 deletions

View File

@ -31,8 +31,8 @@ namespace epubgrep::search
using std::string;
std::vector<match> search(const fs::path &filepath, std::string_view regex,
const settings &opts)
std::vector<match> search(const fs::path &filepath,
const std::string_view regex, const settings &opts)
{
boost::regex::flag_type flags{};
@ -107,17 +107,21 @@ std::vector<match> search(const fs::path &filepath, std::string_view regex,
void cleanup_text(string &text)
{
static const boost::regex re_header_start{"<[hH][1-6]"};
static const boost::regex re_header_end{"</[hH]"};
static const boost::regex re_pagebreak{".+pagebreak.+(title|aria-label)"
"=\"([[:alnum:]]+)\".*"};
size_t pos{};
while ((pos = text.find('<', pos)) != string::npos)
{
// Mark headlines. We need them later on.
string replacement;
if (boost::regex_match(text.substr(pos, 3), boost::regex{"<[hH][1-6]"}))
if (boost::regex_match(text.substr(pos, 3), re_header_start))
{
replacement = "<H>";
}
else if (boost::regex_match(text.substr(pos, 3),
boost::regex{"</[hH]"}))
else if (boost::regex_match(text.substr(pos, 3), re_header_end))
{
replacement = "</H>";
}
@ -125,8 +129,6 @@ void cleanup_text(string &text)
{
auto endpos{text.find('>')};
boost::match_results<const char *> match;
const boost::regex re_pagebreak{".+pagebreak.+(title|aria-label)"
"=\"([[:alnum:]]+)\".*"};
if (boost::regex_search(text.substr(pos, endpos).data(), match,
re_pagebreak))
{