2023-12-07 14:56:28 -06:00
|
|
|
#ifndef GENERATOR_HPP
|
|
|
|
#define GENERATOR_HPP
|
|
|
|
|
2023-12-08 18:03:58 -06:00
|
|
|
#include <deque>
|
|
|
|
#include <unordered_map>
|
2023-12-07 21:36:51 -06:00
|
|
|
#include <string>
|
|
|
|
|
|
|
|
void PrintUsage(void);
|
|
|
|
|
|
|
|
struct ArgumentList {
|
|
|
|
std::string filename = "";
|
|
|
|
bool isFileSet = false;
|
|
|
|
int prefixLength = 0;
|
|
|
|
bool isPrefixSet = false;
|
|
|
|
int outputLength = 0;
|
|
|
|
bool isOutputSet = false;
|
|
|
|
};
|
|
|
|
|
2023-12-08 18:03:58 -06:00
|
|
|
class TrieNode {
|
|
|
|
public:
|
|
|
|
std::unordered_map<char, TrieNode*> children;
|
|
|
|
int occurances = 1;
|
|
|
|
bool isEndOfWord;
|
|
|
|
|
|
|
|
TrieNode() : isEndOfWord(false) {}
|
|
|
|
};
|
|
|
|
|
|
|
|
class Trie {
|
|
|
|
public:
|
|
|
|
Trie() : root(new TrieNode()) {}
|
|
|
|
void insert(const std::deque<char>& currentKGram);
|
|
|
|
bool search(const std::deque<char>& currentKGram) const;
|
|
|
|
private:
|
|
|
|
TrieNode* root;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2023-12-07 14:56:28 -06:00
|
|
|
struct Generator {
|
|
|
|
public:
|
2023-12-07 21:36:51 -06:00
|
|
|
Generator(void) = default;
|
|
|
|
~Generator(void) = default;
|
2023-12-07 14:56:28 -06:00
|
|
|
void SetArguments(int argc, char* argv[]);
|
2023-12-08 18:03:58 -06:00
|
|
|
void ReadFile(void);
|
|
|
|
void GenerateOutput(void);
|
2023-12-07 14:56:28 -06:00
|
|
|
private:
|
2023-12-08 18:03:58 -06:00
|
|
|
char GenerateCharacter(void);
|
2023-12-07 21:36:51 -06:00
|
|
|
ArgumentList setup;
|
2023-12-08 18:03:58 -06:00
|
|
|
Trie trie;
|
2023-12-07 14:56:28 -06:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif // !GENERATOR_HPP
|