diff options
-rw-r--r-- | src/RESearch.cxx | 35 | ||||
-rw-r--r-- | src/RESearch.h | 2 |
2 files changed, 17 insertions, 20 deletions
diff --git a/src/RESearch.cxx b/src/RESearch.cxx index 86f2d0e9e..de4dc08a9 100644 --- a/src/RESearch.cxx +++ b/src/RESearch.cxx @@ -254,8 +254,6 @@ RESearch::RESearch(CharClassify *charClassTable) { charClass = charClassTable; sta = NOP; /* status of lastpat */ bol = 0; - constexpr unsigned char nul = 0; - std::fill(bittab, std::end(bittab), nul); nfa[0] = END; Clear(); } @@ -423,8 +421,7 @@ const char *RESearch::Compile(const char *pattern, Sci::Position length, bool ca return badpat("No previous regular expression"); } - constexpr unsigned char nul = 0; - std::fill(bittab, std::end(bittab), nul); + bittab.fill(0); nfa[0] = END; char *mp=nfa; /* nfa pointer */ @@ -435,8 +432,6 @@ const char *RESearch::Compile(const char *pattern, Sci::Position length, bool ca int tagi = 0; /* tag stack index */ int tagc = 1; /* actual tag count */ - char mask = 0; /* xor mask -CCL/NCL */ - sta = NOP; const char *p=pattern; /* pattern pointer */ @@ -469,16 +464,14 @@ const char *RESearch::Compile(const char *pattern, Sci::Position length, bool ca break; case '[': { /* match char class */ - *mp++ = CCL; int prevChar = 0; + char mask = 0; /* xor mask -CCL/NCL */ i++; if (*++p == '^') { mask = '\377'; i++; p++; - } else { - mask = 0; } if (*p == '-') { /* real dash */ @@ -565,9 +558,11 @@ const char *RESearch::Compile(const char *pattern, Sci::Position length, bool ca if (!*p) return badpat("Missing ]"); - for (int n = 0; n < BITBLK; bittab[n++] = 0) - *mp++ = static_cast<char>(mask ^ bittab[n]); - + *mp++ = CCL; + for (const unsigned char byte : bittab) { + *mp++ = mask ^ byte; + } + bittab.fill(0); } break; case '*': /* match 0 or more... */ @@ -666,9 +661,10 @@ const char *RESearch::Compile(const char *pattern, Sci::Position length, bool ca *mp++ = static_cast<unsigned char>(c); } else { *mp++ = CCL; - mask = 0; - for (int n = 0; n < BITBLK; bittab[n++] = 0) - *mp++ = static_cast<char>(mask ^ bittab[n]); + for (const unsigned char byte : bittab) { + *mp++ = byte; + } + bittab.fill(0); } } } @@ -700,11 +696,12 @@ const char *RESearch::Compile(const char *pattern, Sci::Position length, bool ca *mp++ = CHR; *mp++ = c; } else { - *mp++ = CCL; - mask = 0; ChSetWithCase(c, false); - for (int n = 0; n < BITBLK; bittab[n++] = 0) - *mp++ = static_cast<char>(mask ^ bittab[n]); + *mp++ = CCL; + for (const unsigned char byte : bittab) { + *mp++ = byte; + } + bittab.fill(0); } } break; diff --git a/src/RESearch.h b/src/RESearch.h index 4dee666a0..b7955dc79 100644 --- a/src/RESearch.h +++ b/src/RESearch.h @@ -51,7 +51,7 @@ private: char nfa[MAXNFA]; /* automaton */ int sta; int failure; - unsigned char bittab[BITBLK]; /* bit table for CCL pre-set bits */ + std::array<unsigned char, BITBLK> bittab {}; /* bit table for CCL pre-set bits */ CharClassify *charClass; bool iswordc(unsigned char x) const noexcept { return charClass->IsWord(x); |