search engine: replace gnu regex with boost::regex

This commit is contained in:
Andrzej Rybczak
2013-04-06 17:22:54 +02:00
parent 2b5f1b9fd4
commit 7f8a6e7931

View File

@@ -20,7 +20,6 @@
#include <array> #include <array>
#include <iomanip> #include <iomanip>
#include <regex.h>
#include "display.h" #include "display.h"
#include "global.h" #include "global.h"
@@ -446,85 +445,116 @@ void SearchEngine::Search()
{ {
if (SearchMode != &SearchModes[2]) // match to pattern if (SearchMode != &SearchModes[2]) // match to pattern
{ {
regex_t rx; boost::regex rx;
if (!itsConstraints[0].empty()) if (!itsConstraints[0].empty())
{ {
if (regcomp(&rx, itsConstraints[0].c_str(), REG_ICASE | Config.regex_type) == 0) try
{ {
rx.assign(itsConstraints[0], Config.regex_type);
any_found = any_found =
!regexec(&rx, it->getArtist().c_str(), 0, 0, 0) !boost::regex_search(it->getArtist(), rx)
|| !regexec(&rx, it->getAlbumArtist().c_str(), 0, 0, 0) || !boost::regex_search(it->getAlbumArtist(), rx)
|| !regexec(&rx, it->getTitle().c_str(), 0, 0, 0) || !boost::regex_search(it->getTitle(), rx)
|| !regexec(&rx, it->getAlbum().c_str(), 0, 0, 0) || !boost::regex_search(it->getAlbum(), rx)
|| !regexec(&rx, it->getName().c_str(), 0, 0, 0) || !boost::regex_search(it->getName(), rx)
|| !regexec(&rx, it->getComposer().c_str(), 0, 0, 0) || !boost::regex_search(it->getComposer(), rx)
|| !regexec(&rx, it->getPerformer().c_str(), 0, 0, 0) || !boost::regex_search(it->getPerformer(), rx)
|| !regexec(&rx, it->getGenre().c_str(), 0, 0, 0) || !boost::regex_search(it->getGenre(), rx)
|| !regexec(&rx, it->getDate().c_str(), 0, 0, 0) || !boost::regex_search(it->getDate(), rx)
|| !regexec(&rx, it->getComment().c_str(), 0, 0, 0); || !boost::regex_search(it->getComment(), rx);
} }
regfree(&rx); catch (boost::bad_expression &) { }
} }
if (found && !itsConstraints[1].empty()) if (found && !itsConstraints[1].empty())
{ {
if (!regcomp(&rx, itsConstraints[1].c_str(), REG_ICASE | Config.regex_type)) try
found = !regexec(&rx, it->getArtist().c_str(), 0, 0, 0); {
regfree(&rx); rx.assign(itsConstraints[1], Config.regex_type);
found = !boost::regex_search(it->getArtist(), rx);
}
catch (boost::bad_expression &) { }
} }
if (found && !itsConstraints[2].empty()) if (found && !itsConstraints[2].empty())
{ {
if (!regcomp(&rx, itsConstraints[2].c_str(), REG_ICASE | Config.regex_type)) try
found = !regexec(&rx, it->getAlbumArtist().c_str(), 0, 0, 0); {
regfree(&rx); rx.assign(itsConstraints[2], Config.regex_type);
found = !boost::regex_search(it->getAlbumArtist(), rx);
}
catch (boost::bad_expression &) { }
} }
if (found && !itsConstraints[3].empty()) if (found && !itsConstraints[3].empty())
{ {
if(!regcomp(&rx, itsConstraints[3].c_str(), REG_ICASE | Config.regex_type)) try
found = !regexec(&rx, it->getTitle().c_str(), 0, 0, 0); {
regfree(&rx); rx.assign(itsConstraints[3], Config.regex_type);
found = !boost::regex_search(it->getTitle(), rx);
}
catch (boost::bad_expression &) { }
} }
if (found && !itsConstraints[4].empty()) if (found && !itsConstraints[4].empty())
{ {
if (!regcomp(&rx, itsConstraints[4].c_str(), REG_ICASE | Config.regex_type)) try
found = !regexec(&rx, it->getAlbum().c_str(), 0, 0, 0); {
regfree(&rx); rx.assign(itsConstraints[4], Config.regex_type);
found = !boost::regex_search(it->getAlbum(), rx);
}
catch (boost::bad_expression &) { }
} }
if (found && !itsConstraints[5].empty()) if (found && !itsConstraints[5].empty())
{ {
if (!regcomp(&rx, itsConstraints[5].c_str(), REG_ICASE | Config.regex_type)) try
found = !regexec(&rx, it->getName().c_str(), 0, 0, 0); {
regfree(&rx); rx.assign(itsConstraints[5], Config.regex_type);
found = !boost::regex_search(it->getName(), rx);
}
catch (boost::bad_expression &) { }
} }
if (found && !itsConstraints[6].empty()) if (found && !itsConstraints[6].empty())
{ {
if (!regcomp(&rx, itsConstraints[6].c_str(), REG_ICASE | Config.regex_type)) try
found = !regexec(&rx, it->getComposer().c_str(), 0, 0, 0); {
regfree(&rx); rx.assign(itsConstraints[6], Config.regex_type);
found = !boost::regex_search(it->getComposer(), rx);
}
catch (boost::bad_expression &) { }
} }
if (found && !itsConstraints[7].empty()) if (found && !itsConstraints[7].empty())
{ {
if (!regcomp(&rx, itsConstraints[7].c_str(), REG_ICASE | Config.regex_type)) try
found = !regexec(&rx, it->getPerformer().c_str(), 0, 0, 0); {
regfree(&rx); rx.assign(itsConstraints[7], Config.regex_type);
found = !boost::regex_search(it->getPerformer(), rx);
}
catch (boost::bad_expression &) { }
} }
if (found && !itsConstraints[8].empty()) if (found && !itsConstraints[8].empty())
{ {
if (!regcomp(&rx, itsConstraints[8].c_str(), REG_ICASE | Config.regex_type)) try
found = !regexec(&rx, it->getGenre().c_str(), 0, 0, 0); {
regfree(&rx); rx.assign(itsConstraints[8], Config.regex_type);
found = !boost::regex_search(it->getGenre(), rx);
}
catch (boost::bad_expression &) { }
} }
if (found && !itsConstraints[9].empty()) if (found && !itsConstraints[9].empty())
{ {
if (!regcomp(&rx, itsConstraints[9].c_str(), REG_ICASE | Config.regex_type)) try
found = !regexec(&rx, it->getDate().c_str(), 0, 0, 0); {
regfree(&rx); rx.assign(itsConstraints[9], Config.regex_type);
found = !boost::regex_search(it->getDate(), rx);
}
catch (boost::bad_expression &) { }
} }
if (found && !itsConstraints[10].empty()) if (found && !itsConstraints[10].empty())
{ {
if (!regcomp(&rx, itsConstraints[10].c_str(), REG_ICASE | Config.regex_type)) try
found = !regexec(&rx, it->getComment().c_str(), 0, 0, 0); {
regfree(&rx); rx.assign(itsConstraints[10], Config.regex_type);
found = !boost::regex_search(it->getComment(), rx);
}
catch (boost::bad_expression &) { }
} }
} }
else // match only if values are equal else // match only if values are equal