vector<unique_ptr<CRegEx>> v;
49 for(
const string& s :
patterns) {
50v.push_back(unique_ptr<CRegEx>(
new CRegEx(s)));
57vector<unique_ptr<CRegEx>> v;
59v.push_back(unique_ptr<CRegEx>(
new CRegEx(p.first, p.second)));
73 for(
autoc :
str) {
105 const unsigned char* p =
reinterpret_cast<const unsigned char*
>(
input);
109 for(
autoe : emit1) {
110 if(report(e, p - (
const unsigned char*)
input)) {
117 for(
autoe : emit2) {
118 if(report(e, p - (
const unsigned char*)
input)) {
131 const unsigned char* p =
reinterpret_cast<const unsigned char*
>(
input);
135 for(
autoe : hits.at(
state)) {
142 for(
autoe : hits.at(
state)) {
155 const unsigned char* p =
reinterpret_cast<const unsigned char*
>(
input);
156CCompiledFSM::index_type
state= 0;
158 if(fsm.m_emit.test(
state)) {
159 for(
autoe : fsm.get_hits(
state)) {
160 if(report(e, p - (
const unsigned char*)
input))
166 if(fsm.m_emit.test(
state)) {
167 for(
autoe : fsm.get_hits(
state)) {
168 if(report(e, p - (
const unsigned char*)
input))
181 BoolCall2call = [report](
size_tp1,
size_t) { report(p1);
return false; };
188 BoolCall2call = [report](
size_tp1,
size_tp2) { report(p1, p2);
return false; };
195 BoolCall2call = [report](
size_tp1,
size_t) {
returnreport(p1); };
202 BoolCall2call = [report](
size_tp1,
size_tp2) {
returnreport(p1, p2); };
209 BoolCall2call = [report](
size_tp1,
size_t) { report(p1);
return false; };
216 BoolCall2call = [report](
size_tp1,
size_tp2) { report(p1, p2);
return false; };
223 BoolCall2call = [report](
size_tp1,
size_t) {
returnreport(p1); };
230 BoolCall2call = [report](
size_tp1,
size_tp2) {
returnreport(p1, p2); };
239 throw(
string)
"unexpected end of string";
246oss <<
"unexpected character " 248<<
" in position "<< (
m_Cur+ 1);
256oss <<
msg<<
" \'"<<
m_Str.substr(pos,
len) <<
"\' in position "<< (pos + 1);
286 m_RegX->SetCaseInsensitive();
290 catch(
const string& s) {
299vector<unique_ptr<CRegX> > V;
306 for(
size_t i= 0;
i<
m_Str.length();
i++) {
319 returnstd::move(V[0]);
327vector<unique_ptr<CRegX> > V;
329V.push_back(std::move(x));
339 returnstd::move(V[0]);
347vector<unique_ptr<CRegX> > V;
350V.push_back(std::move(x));
360 returnstd::move(V[0]);
380 if(to && from > to) {
383 returnunique_ptr<CRegX>(
new CRegXTerm(x, from, to, lazy));
425from = from < 0 ? 0 : from;
426to = to < 0 ? 0 : to;
447 for(
unsigned charc =
'0'; c <=
'9'; c++) {
455 for(
unsignedc = 1; c <= 255; c++) {
456 if(c < '0' || c >
'9') {
457 t.insert((
unsigned char)c);
465 for(
unsigned charc =
'0'; c <=
'9'; c++) {
468 for(
unsigned charc =
'A'; c <=
'Z'; c++) {
471 for(
unsigned charc =
'a'; c <=
'z'; c++) {
480 for(
unsignedc = 1; c <= 255; c++) {
481 if((c >=
'0'&& c <=
'9') || (c >=
'A'&& c <=
'Z') || (c >=
'a'&& c <=
'z') || c ==
'_') {
484 t.insert((
unsigned char)c);
502 for(
unsignedc = 1; c <= 255; c++) {
503 if(c !=
' '&& c !=
'\f'&& c !=
'\n'&& c !=
'\r'&& c !=
'\t'&& c !=
'\v') {
504 t.insert((
unsigned char)c);
521 for(
intc = 1; c < 256; c++) {
522 t.insert((
unsigned char)c);
524 returnunique_ptr<CRegX>(
new CRegXChar(
t));
578 returnunique_ptr<CRegX>(
new CRegXChar(
t, neg));
627 returnunique_ptr<CRegX>(
new CRegXChar(c));
638 unsigned charrange = 0;
639 unsigned charcurr = 0;
640 unsigned char prev= 0;
728 for(
unsigned int n=
prev;
n<= curr;
n++) {
729 t.insert((
unsigned char)
n);
756 return(
unsigned char)(
m_Str[
m_Cur++] -
'A'+ 1);
759 return(
unsigned char)(
m_Str[
m_Cur++] -
'a'+ 1);
783 return(
unsigned char)
n;
799 return(
unsigned char)
n;
810 return(
unsigned char)
n;
823 for(
size_t n= 0;
n<
len|| !
len;
n++) {
826 if(c >=
'0'&& c <=
'9') {
827x = x * 16 + c -
'0';
829 else if(c >=
'A'&& c <=
'F') {
830x = x * 16 + 10 + c -
'A';
832 else if(c >=
'a'&& c <=
'f') {
833x = x * 16 + 10 + c -
'a';
851 for(
size_t n= 0;
n<
len|| !
len;
n++) {
854 if(c >=
'0'&& c <=
'9') {
855x = x * 10 + c -
'0';
875 m_RegX->SetCaseInsensitive();
899ostr <<
"<<RegEx>> "<<
m_Str<<
"\n";
900 if(
m_Err.length()) {
901ostr <<
" <ERROR>\t"<<
m_Err<<
"\n";
912 out<< (
m_Neg?
"<char>!\t":
"<char>\t");
949PrintOffset(
out, off);
950 out<<
"<repeat>\t"<< m_Min <<
" : ";
957 out<< (m_Lazy ?
" : lazy\n":
"\n");
964 static const char*
A[] = {
"error",
"beginning of string",
"end of string",
"word boundary",
"not word boundary",
"look ahead",
"look ahead negative",
"look back",
"look back negative"};
965PrintOffset(
out, off);
966 out<<
"<assert>\t"<<
A[m_Assert] <<
"\n";
975 for(
unsigned charc =
'A'; c <=
'Z'; c++) {
976 if(m_Set.find(c) != m_Set.end()) {
977m_Set.insert((
unsigned char)(c + 32));
979 else if(m_Set.find((
unsigned char)(c + 32)) != m_Set.end()) {
988 for(
unsigned charc =
'A'; c <=
'Z'; c++) {
989 if((m_Set.find(c) == m_Set.end()) != (m_Set.find((
unsigned char)(c + 32)) == m_Set.end())) {
1001fsa.
Short(from, to);
1008 for(
unsigned n= 1;
n< 256;
n++) {
1009 unsigned charc = (
unsignedchar)
n;
1010 if((m_Set.find(c) == m_Set.end()) == m_Neg) {
1011fsa.
Trans(from, c, x);
1020 if(m_Vec.empty()) {
1021fsa.
Short(from, to);
1024 size_tcurrent = from;
1025 for(
size_t n= 0;
n< m_Vec.size();
n++) {
1027 if(
n< m_Vec.size() - 1) {
1030m_Vec[
n]->Render(fsa, current,
next);
1038 if(m_Vec.empty()) {
1039fsa.
Short(from, to);
1042 for(
size_t n= 0;
n< m_Vec.size();
n++) {
1044fsa.
Short(from, current);
1045m_Vec[
n]->Render(fsa, current, to);
1052 size_tcurrent = from;
1053 size_t last= current;
1054 for(
size_t n= 0;
n< m_Min;
n++) {
1056 if(
n+ 1 < m_Min ||
n+ 1 < m_Max) {
1065 m_RegX->Render(fsa, from, to);
1066fsa.
Short(from, to);
1071 for(
size_t n= m_Min;
n< m_Max;
n++) {
1073 if(
n+ 1 < m_Max) {
1077fsa.
Short(current, to);
1088fsa.
Trans(x, 0, y);
1092 for(
unsigned n= 1;
n< 256;
n++) {
1094fsa.
Trans(x, (
unsigned char)
n, y);
1100 for(
unsigned n= 1;
n< 256;
n++) {
1102fsa.
Trans(x, (
unsigned char)
n, y);
1115fsa.
Short(from, x);
1121fsa.
Short(from, x);
1127fsa.
Short(from, x);
1132fsa.
Short(from, x);
1135 caseeAssertWordNeg:
1139fsa.
Short(from, x);
1143fsa.
Short(from, x);
1146 caseeAssertLookAhead:
1147 throw string(
"(?=...) - lookahead is not supported");
1148 caseeAssertLookAheadNeg:
1149 throw string(
"(?!...) - lookahead is not supported");
1150 caseeAssertLookBack:
1151 throw string(
"(?<=...) - lookback is not supported");
1152 caseeAssertLookBackNeg:
1153 throw string(
"(?<!...) - lookback is not supported");
1169Create(rx,
m_Str.size());
1179vector<unique_ptr<CRegExFSA>> w;
1180 for(
auto& rx : v) {
1181unique_ptr<CRegExFSA> p(
new CRegExFSA);
1182p->Create(*rx,
m_Str.size());
1183 m_Str.push_back(rx->m_Str);
1184w.push_back(std::move(p));
1186 while(w.size() > 1) {
1187 size_th = (w.size() + 1) / 2;
1188 for(
size_t i= 0, j = h; j < w.size();
i++, j++) {
1189w[
i]->Merge(std::move(w[j]));
1193 Merge(std::move(w[0]));
1199 size_tshift = m_States.size();
1200 for(
auto&
state: fsa->m_States) {
1201 for(
auto& trans :
state->m_Trans) {
1204m_States.push_back(std::move(
state));
1208Short(1, shift + 1);
1209Short(shift + 1, 1);
1217 throw "Invalid Regular Expression: "+ rx.
m_Str+
" -- "+ rx.
m_Err;
1221 size_tfrom = AddState();
1222 size_tto = AddState();
1225rx.
m_RegX->Render(*
this, from, to);
1227 catch(
const string& s) {
1229 throw "Unsupported Regular Expression: "+ rx.
m_Str+
" -- "+ s;
1240vector<size_t>
Queue;
1245DSA.push_back(unique_ptr<CRegExState>(
new CRegExState));
1249Push(0, VV[0],
HH[0]);
1250Push(1, VV[0],
HH[0]);
1253 for(
size_t n= 1;
n< DSA.size();
n++) {
1255 for(
unsignedc = 0; c < 256; c++) {
1256Extend(
n, (
char)c, m_States, DSA, NM, NL, NS, VV,
HH);
1267vector<size_t>& V0 = VV[0];
1268vector<size_t>& V1 = VV[1];
1269vector<size_t>& V2 = VV[2];
1270vector<size_t>& V3 = VV[3];
1271vector<size_t>& H0 =
HH[0];
1272vector<size_t>& H1 =
HH[1];
1273vector<size_t>& H2 =
HH[2];
1274vector<size_t>& H3 =
HH[3];
1276 for(
size_t i= 0;
i< V0.size(); ++
i) {
1278 for(
size_ts : src[
n]->m_Short) {
1279 if(src[s]->m_Type & ttt) {
1280 auto t= src[s]->m_Type;
1298 for(
size_t i= 0;
i< V1.size(); ++
i) {
1300 for(
size_ts : src[
n]->m_Short) {
1301 if(src[s]->m_Type & ttt) {
1302 auto t= src[s]->m_Type;
1311 for(
size_t i= 0;
i< V2.size(); ++
i) {
1313 for(
size_ts : src[
n]->m_Short) {
1314 if(src[s]->m_Type & ttt) {
1315 auto t= src[s]->m_Type;
1324 for(
size_t i= 0;
i< V3.size(); ++
i) {
1326 for(
size_ts : src[
n]->m_Short) {
1327 if(src[s]->m_Type & ttt) {
1328 auto t= src[s]->m_Type;
1337 for(
size_t n: H0) {
1340 for(
size_t n: H1) {
1343 for(
size_t n: H2) {
1346 for(
size_t n: H3) {
1349 autoI = NM.
find(NS);
1350 if(I != NM.
end()) {
1351dest[I->second]->m_Type |= ttt;
1354 size_tx = NL.size();
1357dest.push_back(unique_ptr<CRegExState>(
new CRegExState(ttt)));
1358 for(
size_t n: H0) {
1359dest[x]->m_Emit.
insert(src[
n]->m_Emit.begin(), src[
n]->m_Emit.end());
1361 for(
size_t n: H1) {
1362dest[x]->m_Forward1.insert(src[
n]->m_Emit.begin(), src[
n]->m_Emit.end());
1364 for(
size_t n: H2) {
1365dest[x]->m_Forward2.insert(src[
n]->m_Emit.begin(), src[
n]->m_Emit.end());
1367 for(
size_t n: H3) {
1368dest[x]->m_Forward3.insert(src[
n]->m_Emit.begin(), src[
n]->m_Emit.end());
1376 for(
auto&
a: VV) {
1379 for(
auto&
a:
HH) {
1382Push(0, VV[0],
HH[0]);
1384 for(
autop : NL[x]) {
1385 if(!p.second || p.second == ttt) {
1386Push(src[p.first]->m_Trans[c], VV[0],
HH[0]);
1389 size_td = Collect(VV, ttt, src, dest, NM, NL, NS,
HH);
1390dest[x]->m_Trans[c] = d;
1392dest[d]->m_Emit.insert(dest[x]->m_Forward1.begin(), dest[x]->m_Forward1.end());
1395dest[d]->m_Emit.insert(dest[x]->m_Forward2.begin(), dest[x]->m_Forward2.end());
1398dest[d]->m_Emit.insert(dest[x]->m_Forward3.begin(), dest[x]->m_Forward3.end());
1403 static string QuoteDot(
const string& s,
boolspace =
false)
1406 for(
size_t i= 0;
i< s.size();
i++) {
1409 out+= space ?
"␣":
" ";
1421 if((
unsigned char)s[
i] < 32) {
1422 out+=
"&#"+ to_string(9216 + s[
i]) +
";";
1424 else if((
unsigned char)s[
i] > 0x7f) {
1425 out+=
"&#"+ to_string(912 + (
unsigned char)s[
i]) +
";";
1436 static string Pack(
const string& s)
1441 for(
size_t i= 0;
i< s.size();
i++) {
1442 if((s[
i] >=
'0'&& s[
i] <=
'9') || (s[
i] >=
'A'&& s[
i] <=
'Z') || (s[
i] >=
'a'&& s[
i] <=
'z')) {
1448 else if(s[
i] == to + 1) {
1454 if(to > from + 1) {
1467 if(to > from + 1) {
1479 if(to > from + 1) {
1493 out<<
"digraph {\n";
1494 for(
size_t n= 1;
n< m_States.size(); ++
n) {
1495 string label= to_string(
n) +
": ";
1525 if(!m_States[
n]->m_Emit.empty()) {
1526 label+=
"\\nfound:";
1528 for(
size_te : m_States[
n]->m_Emit) {
1536 out<<
n<<
" [label=\""<<
label<<
"\"]\n";
1537 for(
size_t t: m_States[
n]->m_Short) {
1538 out<<
n<<
" -> "<<
t<<
" [style=dotted]\n";
1542 for(
unsignedm = 1; m < 256; m++) {
1543arrows[m_States[
n]->m_Trans[m]] += char(m);
1545arrows[m_States[
n]->m_Trans[0]] +=
"␀";
1548 for(
auto&
A: arrows) {
1549 A.second =
Pack(
A.second);
1550 if(
A.second.length() > max_len) {
1552max_len =
A.second.length();
1555arrows[other] =
"...";
1556 for(
auto&
A: arrows) {
1557 out<<
n<<
" -> "<<
A.first <<
" [label=\""<<
QuoteDot(
A.second,
true) <<
"\"]\n";
1567 out<<
"// Input from the outer code: const unsigned char* p;\n//\n\n const unsigned char* _p = p;\n";
1568 for(
size_t n= 1;
n< m_States.size(); ++
n) {
1570 out<<
"_"<<
n<<
":\n";
1572 for(
autoe : m_States[
n]->m_Emit) {
1573 out<<
" if (_FSM_REPORT("<< e <<
", p - _p)) return; // "<<
m_Str[e] <<
"\n";
1576 out<<
" return;\n";
1582 out<<
" switch (*p) {\n";
1584 for(
unsignedm = 0; m < 256; m++) {
1585arrows[m_States[
n]->m_Trans[m]] += char(m);
1589 for(
auto A= arrows.
begin();
A!= arrows.
end(); ++
A) {
1590 if(
A->second.length() > max_len) {
1592max_len =
A->second.length();
1595 for(
auto A= arrows.
begin();
A!= arrows.
end(); ++
A) {
1596 if(
A->first != other) {
1597 for(
autop =
A->second.begin(); p !=
A->second.end(); ++p) {
1599 if(*p ==
'\''|| *p ==
'\"'|| *p ==
'\\') {
1600 out<<
"\'\\"<< *p <<
"\':\n";
1602 else if(*p >= 32 && *p < 127) {
1603 out<<
"\'"<< *p <<
"\':\n";
1606 out<< (unsigned)*p <<
":\n";
1609 out<<
" goto _"<<
A->first <<
";\n";
1612 out<<
" default:\n";
1613 out<<
" goto _"<< other <<
";\n";
1625 out<< (bit ?
"1":
"0") <<
",";
1627 if(m_index == 32) {
1637m_current |= (1ULL << m_index);
1640 if(m_index == 64) {
1654 size_tmax_vec_size = 0;
1655 size_tnum_hits = 0;
1656 for(
size_t n= 1;
n< m_States.size();
n++) {
1657 if(m_States[
n]->m_Emit.size())
1659max_vec_size =
std::max(max_vec_size, m_States[
n]->m_Emit.size());
1662 out<<
"NCBI_FSM_PREPARE(\n" 1663<<
" "<< m_States.size() - 1 <<
", // states size \n" 1664<<
" "<< max_vec_size <<
", // max vector size\n" 1665<<
" "<< num_hits <<
", // num hits\n" 1666<<
" "<< (m_States.size() - 1 + 63)/64 <<
" // emit compacted size\n" 1671 out<<
"NCBI_FSM_EMIT = {\n";
1672 for(
size_t n= 0;
n< m_States.size() - 1;
n++) {
1673cout << (
n?
n% 32 ?
", ":
",\n":
"") << (m_States[
n+ 1]->m_Emit.size() ?
"1":
"0");
1678 out<<
"NCBI_FSM_EMIT = {\n";
1681 for(
size_t n= 1;
n< m_States.size();
n++) {
1682mask64.
Out1(
out, (m_States[
n]->m_Emit.size()));
1688 out<<
"NCBI_FSM_EMIT_COMPACT = {\n";
1691 for(
size_t n= 1;
n< m_States.size();
n++) {
1692mask64.
Out64(
out, (m_States[
n]->m_Emit.size()));
1699 out<<
"NCBI_FSM_HITS = {\n";
1701 for(
size_t n= 0;
n< m_States.size();
n++) {
1702 if(m_States[
n]->m_Emit.size()) {
1706 for(
size_t n= 0;
n< m_States.size();
n++) {
1707 if(m_States[
n]->m_Emit.size()) {
1709 out<<
"{ "<< (
n- 1) <<
", { ";
1711 for(
autoe : m_States[
n]->m_Emit) {
1712 out<< (
i?
", ":
"") << e;
1715 out<<
" }}"<< (
count?
", ":
" ");
1716 for(
autoe : m_States[
n]->m_Emit) {
1717 out<<
" // "<< e <<
": "<<
m_Str[e];
1726 out<<
"NCBI_FSM_HITS_1("<< num_hits <<
") = {\n";
1727 for(
size_t n= 0;
n< m_States.size();
n++) {
1728 if(m_States[
n]->m_Emit.size()) {
1729 out<< (
n- 1) <<
", // ";
1730 for(
autoe : m_States[
n]->m_Emit) {
1731 out<<
" "<< e <<
": "<<
m_Str[e];
1738 out<<
"NCBI_FSM_HITS_2("<< num_hits <<
") = { {\n";
1739 for(
size_t n= 0;
n< m_States.size();
n++) {
1740 if(m_States[
n]->m_Emit.size()) {
1742 for(
autoe : m_States[
n]->m_Emit) {
1746 for(
autoe : m_States[
n]->m_Emit) {
1747 out<<
" "<< e <<
": "<<
m_Str[e];
1755 out<<
"NCBI_FSM_STATES = {\n";
1756 for(
size_t n= 1;
n< m_States.size();
n++) {
1757 out<<
"// "<< (
n- 1) <<
"\n";
1758 for(
size_t i= 0;
i< 256;
i++) {
1760<< (m_States[
n]->m_Trans[
i] ? m_States[
n]->m_Trans[
i] - 1 : 0)
1761<< (
i% 32 == 31 ?
",\n":
", ");
void GenerateSourceCode(ostream &out) const
Generate C code for the FSM search.
void AddPatterns(const vector< string > &patterns)
unique_ptr< CRegExFSA > m_FSM
std::function< void(size_t, size_t)> VoidCall2
std::function< bool(size_t, size_t)> BoolCall2
void AddPattern(const char *pattern, TFlags flags=0)
static string QuoteString(const string &str)
Quote special characters to insert string into regular expression.
void GenerateArrayMapData(ostream &out) const
Generate C++ array/map data.
std::function< void(size_t)> VoidCall1
void GenerateDotGraph(ostream &out) const
Generate graphical representation of the FSM in DOT format.
void Search(const char *input, VoidCall1 found_callback) const
std::function< bool(size_t)> BoolCall1
pair< size_t, CRegEx::EType > TNode
void GenerateArrayMapData(ostream &out) const
void Trans(size_t x, unsigned char c, size_t y)
void Add(const CRegEx &rx)
void GenerateSourceCode(ostream &out) const
void Create(const CRegEx &rx, size_t emit)
static size_t Collect(TScratch &VV, CRegEx::EType t, TStates &src, TStates &dest, TNodeSetMap &NM, TNodeSetList &NL, TNodeSet &NS, TScratch &HH)
void GenerateDotGraph(ostream &out) const
void Short(size_t x, size_t y)
static void Extend(size_t x, unsigned char c, TStates &src, TStates &dest, TNodeSetMap &NM, TNodeSetList &NL, TNodeSet &NS, TScratch &VV, TScratch &HH)
size_t AddState(unsigned char t=CRegEx::eTypePass)
void Merge(unique_ptr< CRegExFSA > fsa)
vector< TNodeSet > TNodeSetList
vector< unique_ptr< CRegExState > > TStates
unique_ptr< CRegX > x_ParseAtom()
unique_ptr< CRegX > x_ParsePlain()
unique_ptr< CRegX > x_ParseConcat()
void x_ParseSquare(set< unsigned char > &t)
bool x_ParseRepeat(int &from, int &to, bool &lazy)
void x_Print(ostream &out) const
void x_ThrowError(const string msg, size_t pos, size_t len)
unsigned char x_ParseEscape()
unique_ptr< CRegX > x_ParseTerm()
int x_ParseHex(size_t len=0)
CMultipatternSearch::TFlags m_Flag
void x_ThrowUnexpectedCharacter()
int x_ParseDec(size_t len=0)
void x_ThrowUnexpectedEndOfLine()
unique_ptr< CRegX > m_RegX
static bool IsWordCharacter(unsigned char c)
unique_ptr< CRegX > x_ParseSelect()
const_iterator begin() const
const_iterator end() const
iterator_bool insert(const value_type &val)
const_iterator find(const key_type &key) const
const_iterator begin() const
const_iterator end() const
std::ofstream out("events_result.xml")
main entry point for tests
static DLIST_TYPE *DLIST_NAME() first(DLIST_LIST_TYPE *list)
static DLIST_TYPE *DLIST_NAME() last(DLIST_LIST_TYPE *list)
static DLIST_TYPE *DLIST_NAME() prev(DLIST_LIST_TYPE *list, DLIST_TYPE *item)
static DLIST_TYPE *DLIST_NAME() next(DLIST_LIST_TYPE *list, DLIST_TYPE *item)
static const char * str(char *buf, int n)
#define HH(a, b, c, d, x, s)
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
static enable_if< is_arithmetic< TNumeric >::value||is_convertible< TNumeric, Int8 >::value, string >::type NumericToString(TNumeric value, TNumToStringFlags flags=0, int base=10)
Convert numeric value to string.
static const char label[]
static void InsertNoSpace(set< unsigned char > &t)
static void InsertNoAlpha(set< unsigned char > &t)
static void InsertAlpha(set< unsigned char > &t)
static void InsertSpace(set< unsigned char > &t)
static string QuoteDot(const string &s, bool space=false)
static void xMultiPatternSearch(const char *input, const CRegExFSA &fsa, CMultipatternSearch::BoolCall2 report)
static string Pack(const string &s)
static void InsertNoDigit(set< unsigned char > &t)
static void InsertDigit(set< unsigned char > &t)
ostream & operator<<(ostream &ostr, const CRegEx ®ex)
int Queue(const string &service, shared_ptr< CPSG_Request > request, CTimeout timeout)
static SLJIT_INLINE sljit_ins msg(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)
void Out1(std::ostream &out, bool bit)
void Final64(std::ostream &out)
void Out64(std::ostream &out, bool bit)
void Print(ostream &out, size_t off) const
void Render(CRegExFSA &fsa, size_t from, size_t to) const
void Render(CRegExFSA &fsa, size_t from, size_t to) const
void Print(ostream &out, size_t off) const
set< unsigned char > m_Set
bool IsCaseInsensitive() const
void SetCaseInsensitive()
void Render(CRegExFSA &fsa, size_t from, size_t to) const
void Render(CRegExFSA &fsa, size_t from, size_t to) const
void Render(CRegExFSA &fsa, size_t from, size_t to) const
void Print(ostream &out, size_t off) const
void Render(CRegExFSA &fsa, size_t from, size_t to) const
static void DummyTrans(CRegExFSA &fsa, size_t x, unsigned char t)
static void PrintOffset(ostream &out, size_t off)
void Merge(wxMenu &menu_1, const wxMenu &menu_2)
merges all items form menu_2 into menu_1, preserving the structure if possible
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4