aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorZufu Liu <unknown>2023-11-25 09:11:21 +1100
committerZufu Liu <unknown>2023-11-25 09:11:21 +1100
commitdfc5d8de39ac19263122eed5ef40f7c9ae73ef7e (patch)
tree8127cb6fb1d51916d6419601d96d6e46b84ace55 /src
parent0d84ef7da391ff193c944cb47b7a4eddeb61d8c3 (diff)
downloadscintilla-mirror-dfc5d8de39ac19263122eed5ef40f7c9ae73ef7e.tar.gz
Feature [feature-requests:#1503] Use std::array for bittab and simplify use.
Diffstat (limited to 'src')
-rw-r--r--src/RESearch.cxx35
-rw-r--r--src/RESearch.h2
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);