class TrieNode
{
public:
Unistring *data;
bool isFinal;
std::map<unichar, TrieNode*> leaves;
TrieNode(Unistring *ndata, std::map<unichar, TrieNode*> nleaves, bool nflag);
~TrieNode();
void findDownNodes(std::set<Unistring> wordSet);
void searchWordsFromNode(std::set<Unistring> *wordSet, Unistring *pattern, int curIndex);
};
class Trie
{
public:
TrieNode *root;
Trie(TrieNode *nroot);
~Trie();
std::set<Unistring> *searchWordsFromTrie(Unistring *pattern);
};