feat: use WordRefList instead of std::foward_list for results
This commit is contained in:
parent
b53a4edeee
commit
a6146415df
19 changed files with 78 additions and 86 deletions
|
@ -12,8 +12,7 @@ private:
|
|||
public:
|
||||
void insert(const WordList &word_list, size_t first_index, size_t last_index);
|
||||
|
||||
std::forward_list<const std::string *>
|
||||
find_prefix(std::string_view search_term) const;
|
||||
WordRefList find_prefix(std::string_view search_term) const;
|
||||
};
|
||||
|
||||
class BucketFinder : public Finder {
|
||||
|
@ -23,6 +22,5 @@ private:
|
|||
public:
|
||||
BucketFinder(const WordList &word_list);
|
||||
|
||||
std::forward_list<const std::string *>
|
||||
find_prefix(std::string_view search_term) const override;
|
||||
WordRefList find_prefix(std::string_view search_term) const override;
|
||||
};
|
||||
|
|
|
@ -1,12 +1,10 @@
|
|||
#pragma once
|
||||
|
||||
#include <forward_list>
|
||||
#include <string>
|
||||
#include "word_list.h"
|
||||
|
||||
class Finder {
|
||||
public:
|
||||
virtual ~Finder() = default;
|
||||
|
||||
virtual std::forward_list<const std::string *>
|
||||
find_prefix(std::string_view search_term) const = 0;
|
||||
virtual WordRefList find_prefix(std::string_view search_term) const = 0;
|
||||
};
|
||||
|
|
|
@ -12,6 +12,6 @@ private:
|
|||
public:
|
||||
GroupedFinder(const WordList &word_list);
|
||||
|
||||
virtual std::forward_list<const std::string *>
|
||||
virtual WordRefList
|
||||
find_prefix(std::string_view search_prefix) const override;
|
||||
};
|
||||
|
|
|
@ -10,6 +10,5 @@ private:
|
|||
public:
|
||||
LinearFinder(const WordList &word_list);
|
||||
|
||||
std::forward_list<const std::string *>
|
||||
find_prefix(std::string_view search_term) const override;
|
||||
WordRefList find_prefix(std::string_view search_term) const override;
|
||||
};
|
||||
|
|
|
@ -10,6 +10,5 @@ private:
|
|||
public:
|
||||
ParallelFinder(const WordList &word_list);
|
||||
|
||||
std::forward_list<const std::string *>
|
||||
find_prefix(std::string_view search_prefix) const override;
|
||||
WordRefList find_prefix(std::string_view search_prefix) const override;
|
||||
};
|
||||
|
|
|
@ -10,6 +10,5 @@ private:
|
|||
public:
|
||||
SortedLinearFinder(const WordList &word_list);
|
||||
|
||||
std::forward_list<const std::string *>
|
||||
find_prefix(std::string_view search_term) const override;
|
||||
WordRefList find_prefix(std::string_view search_term) const override;
|
||||
};
|
||||
|
|
|
@ -7,14 +7,14 @@
|
|||
|
||||
class SearchTreeNode {
|
||||
private:
|
||||
std::forward_list<const std::string *> words_;
|
||||
WordRefList words_;
|
||||
std::map<const char, SearchTreeNode> children_;
|
||||
|
||||
public:
|
||||
void insert(std::string_view partial_word, const std::string *original_word);
|
||||
const SearchTreeNode *find(std::string_view search_term) const;
|
||||
|
||||
std::forward_list<const std::string *> words() const;
|
||||
WordRefList words() const;
|
||||
};
|
||||
|
||||
class SearchTree : public SearchTreeNode {
|
||||
|
@ -29,6 +29,5 @@ private:
|
|||
public:
|
||||
TreeFinder(const WordList &word_list);
|
||||
|
||||
virtual std::forward_list<const std::string *>
|
||||
find_prefix(std::string_view search_term) const override;
|
||||
WordRefList find_prefix(std::string_view search_term) const override;
|
||||
};
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
#pragma once
|
||||
|
||||
#include <filesystem>
|
||||
#include <forward_list>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class WordRefList;
|
||||
|
||||
class WordList : public std::vector<std::string> {
|
||||
public:
|
||||
WordList &multiply(size_t factor);
|
||||
|
@ -15,10 +16,11 @@ public:
|
|||
static WordList fourCaps();
|
||||
static WordList fromFile(const std::filesystem::path &path);
|
||||
|
||||
static void find_prefix_in_range(
|
||||
const WordList &word_list, const std::string_view &search_prefix,
|
||||
size_t start_index, size_t end_index,
|
||||
std::forward_list<const std::string *> &result, std::mutex &result_mutex);
|
||||
static void find_prefix_in_range(const WordList &word_list,
|
||||
const std::string_view &search_prefix,
|
||||
size_t start_index, size_t end_index,
|
||||
WordRefList &result,
|
||||
std::mutex &result_mutex);
|
||||
};
|
||||
|
||||
class WordRefList : public std::vector<const std::string *> {
|
||||
|
@ -26,8 +28,9 @@ public:
|
|||
WordRefList() = default;
|
||||
WordRefList(const WordList &source);
|
||||
|
||||
static void find_prefix_in_range(
|
||||
const WordRefList &word_list, const std::string_view &search_prefix,
|
||||
size_t start_index, size_t end_index,
|
||||
std::forward_list<const std::string *> &result, std::mutex &result_mutex);
|
||||
static void find_prefix_in_range(const WordRefList &word_list,
|
||||
const std::string_view &search_prefix,
|
||||
size_t start_index, size_t end_index,
|
||||
WordRefList &result,
|
||||
std::mutex &result_mutex);
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue