filter: Simplify adding words to the filter

I can use the lowercase text from string :: lowercase() and take a
single pass over a single string (rather than iterating through a list
of strings).

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2015-01-30 10:03:18 -05:00
parent 6c4dc5b1db
commit 7e58a4fef8
2 changed files with 11 additions and 32 deletions

View File

@ -5,7 +5,7 @@
#include <core/filter.h>
#include <core/index.h>
#include <core/print.h>
#include <core/string.h>
#include <algorithm>
#include <list>
@ -58,38 +58,17 @@ static void parse_text(const std::string &text, std::list<std::string> &ret)
ret.push_back(word);
}
static void add_substrings(const std::string &text, unsigned int index)
const std::string filter :: add(const std::string &text, unsigned int index)
{
std::string substr;
for (unsigned int i = 1; i <= text.size(); i++) {
substr = text.substr(0, i);
filter_index.insert(substr, index);
const std::string lc = string :: lowercase(text);
size_t begin = 0, end;
for (end = 1; end <= lc.size(); end++) {
filter_index.insert(lc.substr(begin, end - begin), index);
if (lc[end] == ' ')
begin = ++end;
}
}
static std::string reassemble_text(std::list<std::string> text)
{
std::string res;
std::list<std::string>::iterator it = text.begin();
if (it == text.end())
return res;
res += *it;
for (it++; it != text.end(); it++)
res += " " + *it;
return res;
}
std::string filter :: add(const std::string &text, unsigned int index)
{
std::list<std::string> parsed;
std::list<std::string>::iterator it;
parse_text(text, parsed);
for (it = parsed.begin(); it != parsed.end(); it++)
add_substrings(*it, index);
return reassemble_text(parsed);
return lc;
}
static void do_set_intersection(IndexEntry *entry,

View File

@ -35,7 +35,7 @@ namespace filter {
* @param index The track index to pair with the text.
* @return The lowercase form of the input text.
*/
std::string add(const std::string &, unsigned int);
const std::string add(const std::string &, unsigned int);
/**
* Break the input text into lowercase words and search the Index