Remove legacy WordDB::find_matching method
This commit is contained in:
parent
be76ba0461
commit
019b3235b0
|
@ -34,9 +34,12 @@ UsedLetters to_lower(UsedLetters letters)
|
||||||
return ((letters & upper_mask) >> 26) | (letters & (~upper_mask));
|
return ((letters & upper_mask) >> 26) | (letters & (~upper_mask));
|
||||||
}
|
}
|
||||||
|
|
||||||
static WordDB::WordList get_words(const SharedString& content)
|
using WordList = Vector<StringView>;
|
||||||
|
|
||||||
|
|
||||||
|
static WordList get_words(const SharedString& content)
|
||||||
{
|
{
|
||||||
WordDB::WordList res;
|
WordList res;
|
||||||
using Utf8It = utf8::iterator<const char*, utf8::InvalidPolicy::Pass>;
|
using Utf8It = utf8::iterator<const char*, utf8::InvalidPolicy::Pass>;
|
||||||
const char* word_start = content.begin();
|
const char* word_start = content.begin();
|
||||||
bool in_word = false;
|
bool in_word = false;
|
||||||
|
@ -189,6 +192,12 @@ WordDB::RankedWordList WordDB::find_matching(StringView query)
|
||||||
RankedWordList res;
|
RankedWordList res;
|
||||||
for (auto&& word : m_words)
|
for (auto&& word : m_words)
|
||||||
{
|
{
|
||||||
|
if (query.empty())
|
||||||
|
{
|
||||||
|
res.push_back({word.first, 1 });
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
UsedLetters word_letters = word.second.letters;
|
UsedLetters word_letters = word.second.letters;
|
||||||
if (not matches(to_lower(letters), to_lower(word_letters)) or
|
if (not matches(to_lower(letters), to_lower(word_letters)) or
|
||||||
not matches(letters & upper_mask, word_letters & upper_mask))
|
not matches(letters & upper_mask, word_letters & upper_mask))
|
||||||
|
@ -202,6 +211,18 @@ WordDB::RankedWordList WordDB::find_matching(StringView query)
|
||||||
|
|
||||||
UnitTest test_word_db{[]()
|
UnitTest test_word_db{[]()
|
||||||
{
|
{
|
||||||
|
auto cmp_words = [](const WordDB::RankedWord& lhs, const WordDB::RankedWord& rhs) {
|
||||||
|
return lhs.word < rhs.word;
|
||||||
|
};
|
||||||
|
|
||||||
|
auto eq = [](ArrayView<const WordDB::RankedWord> lhs, const WordList& rhs) {
|
||||||
|
return lhs.size() == rhs.size() and
|
||||||
|
std::equal(lhs.begin(), lhs.end(), rhs.begin(),
|
||||||
|
[](const WordDB::RankedWord& lhs, const StringView& rhs) {
|
||||||
|
return lhs.word == rhs;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
Buffer buffer("test", Buffer::Flags::None,
|
Buffer buffer("test", Buffer::Flags::None,
|
||||||
"tchou mutch\n"
|
"tchou mutch\n"
|
||||||
"tchou kanaky tchou\n"
|
"tchou kanaky tchou\n"
|
||||||
|
@ -209,19 +230,19 @@ UnitTest test_word_db{[]()
|
||||||
"tchaa tchaa\n"
|
"tchaa tchaa\n"
|
||||||
"allo\n");
|
"allo\n");
|
||||||
WordDB word_db(buffer);
|
WordDB word_db(buffer);
|
||||||
auto res = word_db.find_matching("", prefix_match);
|
auto res = word_db.find_matching("");
|
||||||
std::sort(res.begin(), res.end());
|
std::sort(res.begin(), res.end(), cmp_words);
|
||||||
kak_assert(res == WordDB::WordList{ "allo" COMMA "kanaky" COMMA "mutch" COMMA "tchaa" COMMA "tchou" });
|
kak_assert(eq(res, WordList{ "allo" COMMA "kanaky" COMMA "mutch" COMMA "tchaa" COMMA "tchou" }));
|
||||||
kak_assert(word_db.get_word_occurences("tchou") == 3);
|
kak_assert(word_db.get_word_occurences("tchou") == 3);
|
||||||
kak_assert(word_db.get_word_occurences("allo") == 1);
|
kak_assert(word_db.get_word_occurences("allo") == 1);
|
||||||
buffer.erase(buffer.iterator_at({1, 6}), buffer.iterator_at({4, 0}));
|
buffer.erase(buffer.iterator_at({1, 6}), buffer.iterator_at({4, 0}));
|
||||||
res = word_db.find_matching("", prefix_match);
|
res = word_db.find_matching("");
|
||||||
std::sort(res.begin(), res.end());
|
std::sort(res.begin(), res.end(), cmp_words);
|
||||||
kak_assert(res == WordDB::WordList{ "allo" COMMA "mutch" COMMA "tchou" });
|
kak_assert(eq(res, WordList{ "allo" COMMA "mutch" COMMA "tchou" }));
|
||||||
buffer.insert(buffer.iterator_at({1, 0}), "re");
|
buffer.insert(buffer.iterator_at({1, 0}), "re");
|
||||||
res = word_db.find_matching("", subsequence_match);
|
res = word_db.find_matching("");
|
||||||
std::sort(res.begin(), res.end());
|
std::sort(res.begin(), res.end(), cmp_words);
|
||||||
kak_assert(res == WordDB::WordList{ "allo" COMMA "mutch" COMMA "retchou" COMMA "tchou" });
|
kak_assert(eq(res, WordList{ "allo" COMMA "mutch" COMMA "retchou" COMMA "tchou" }));
|
||||||
}};
|
}};
|
||||||
|
|
||||||
UnitTest test_used_letters{[]()
|
UnitTest test_used_letters{[]()
|
||||||
|
|
|
@ -22,22 +22,6 @@ public:
|
||||||
WordDB(const WordDB&) = delete;
|
WordDB(const WordDB&) = delete;
|
||||||
WordDB(WordDB&&) = default;
|
WordDB(WordDB&&) = default;
|
||||||
|
|
||||||
using WordList = Vector<StringView>;
|
|
||||||
template<typename MatchFunc>
|
|
||||||
WordList find_matching(StringView str, MatchFunc match)
|
|
||||||
{
|
|
||||||
update_db();
|
|
||||||
const UsedLetters letters = used_letters(str);
|
|
||||||
WordList res;
|
|
||||||
for (auto&& word : m_words)
|
|
||||||
{
|
|
||||||
if ((letters & word.second.letters) == letters and
|
|
||||||
match(word.first, str))
|
|
||||||
res.push_back(word.first);
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct RankedWord
|
struct RankedWord
|
||||||
{
|
{
|
||||||
StringView word;
|
StringView word;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user