feat: use WordRefList instead of std::foward_list for results

This commit is contained in:
Michael Mandl 2024-03-21 20:16:00 +01:00
parent b53a4edeee
commit a6146415df
Signed by: mandlm
GPG key ID: 4AA25D647AA54CC7
19 changed files with 78 additions and 86 deletions

View file

@ -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;
};

View file

@ -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;
};

View file

@ -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;
};

View file

@ -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;
};

View file

@ -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;
};

View file

@ -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;
};

View file

@ -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;
};

View file

@ -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);
};