#include <string>
#include <vector>
using std::vector;
using std::string;
using nlib_ns::succinct::AhoCorasick;
vector<char> g_Text;
AhoCorasick g_AhoCorasick;
vector<string> g_Words;
NLIB_PATHMAPPER_FORSAMPLE
bool MyMatchCallback(const char* first, const char* last, uint32_t nodeId, void*) {
#if 1
char str[4096];
int i = 0;
while (first != last) str[i++] = *first++;
str[i] = '\0';
#else
#endif
return true;
}
void ExecAhoCorasick() {
g_AhoCorasick.Match(&g_Text[0], MyMatchCallback);
}
void ExecBruteForce() {
for (size_t i = 0; i < g_Words.size(); ++i) {
const string& s = g_Words[i];
size_t beg_pos = 0;
size_t cur = 0;
for (size_t j = 0; j < g_Text.size(); ++j) {
if (g_Text[j] == s[cur]) {
if (cur == 0) beg_pos = j;
++cur;
if (cur == s.length()) {
#if 1
beg_pos, j);
#else
#endif
j = j - cur + 1;
cur = 0;
beg_pos = 0;
}
} else {
j = j - cur;
cur = 0;
}
}
}
}
bool ReadTextFile(const char* name, vector<char>* vec) {
FileInputStream stream;
if (stream.Init() != 0) return false;
if (stream.Open(name) != 0) {
return false;
}
while (!stream.IsEos()) {
int c = stream.Read();
if (c < 0) return false;
vec->push_back(static_cast<char>(c));
}
return true;
}
bool ReadFiles() {
char txtfile[1024];
g_PathMapper.ResolvePath(NULL, txtfile, "nlibpath:///readonly/shayo.txt");
g_Text.reserve(300000);
if (!ReadTextFile(txtfile, &g_Text)) return false;
char acfile[1024];
g_PathMapper.ResolvePath(NULL, acfile, "nlibpath:///readonly/adjv.ac");
FileInputStream stream;
if (stream.Init() != 0) return false;
if (stream.Open(acfile) != 0) {
return false;
}
BinaryReader reader;
reader.Init(&stream, BinaryReader::ENDIAN_LITTLE);
if (!g_AhoCorasick.Import(&reader)) return false;
char patternfile[1024];
g_PathMapper.ResolvePath(NULL, patternfile, "nlibpath:///readonly/adjv.txt");
vector<char> tmp;
tmp.reserve(40000);
if (!ReadTextFile(patternfile, &tmp)) return false;
g_Words.reserve(3500);
string str;
for (size_t i = 0; i < tmp.size(); ++i) {
char c = tmp[i];
if (c == 0x0D) continue;
if (c == 0x0A) {
g_Words.push_back(str);
str.clear();
} else {
str += static_cast<char>(c);
}
}
g_Words.push_back(str);
return true;
}
bool SampleMain(int, char**) {
InitPathMapperForSample();
if (!ReadFiles()) return false;
ExecAhoCorasick();
return true;
}
NLIB_MAINFUNC