aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoren J. Rittle <ljrittle@acm.org>2001-01-10 02:08:16 +0000
committerGerald Pfeifer <gerald@gcc.gnu.org>2001-01-10 02:08:16 +0000
commit046585534ecd87d9ecc21aa178616f63233cdaf2 (patch)
tree316193645de0a4a1c936165cb373eae45e02fa37
parent9088c6fcf67fc7eaf11ba1a09499e40125d6ac50 (diff)
downloadgcc-046585534ecd87d9ecc21aa178616f63233cdaf2.zip
gcc-046585534ecd87d9ecc21aa178616f63233cdaf2.tar.gz
gcc-046585534ecd87d9ecc21aa178616f63233cdaf2.tar.bz2
ctype_inline.h (is): (Make right code path:) Remove magic constants and restructure to handle...
* config/os/bsd/freebsd/bits/ctype_inline.h (is): (Make right code path:) Remove magic constants and restructure to handle ctype.h bit mask layout changes more gracefully. (Make fast code path:) Use __maskrune (), if available. (is): Remove special case for digit and xdigit masks. From-SVN: r38847
-rw-r--r--libstdc++-v3/ChangeLog7
-rw-r--r--libstdc++-v3/config/os/bsd/freebsd/bits/ctype_inline.h30
2 files changed, 25 insertions, 12 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 64e2775..1e77ef5c 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,10 @@
+2001-01-10 Loren J. Rittle <ljrittle@acm.org>
+
+ * config/os/bsd/freebsd/bits/ctype_inline.h (is): (Make right
+ code path:) Remove magic constants and restructure to handle
+ ctype.h bit mask layout changes more gracefully. (Make fast
+ code path:) Use __maskrune (), if available.
+ (is): Remove special case for digit and xdigit masks.
2001-01-09 Robert Lipe <robertlipe@usa.net>
diff --git a/libstdc++-v3/config/os/bsd/freebsd/bits/ctype_inline.h b/libstdc++-v3/config/os/bsd/freebsd/bits/ctype_inline.h
index c282c4b..b4ba03f 100644
--- a/libstdc++-v3/config/os/bsd/freebsd/bits/ctype_inline.h
+++ b/libstdc++-v3/config/os/bsd/freebsd/bits/ctype_inline.h
@@ -38,28 +38,34 @@
ctype<char>::
is(mask __m, char __c) const
{
- if (__m & (digit | xdigit))
- return __isctype(__c, __m);
- else
- return __istype(__c, __m);
+ return __istype(__c, __m);
}
const char*
ctype<char>::
is(const char* __low, const char* __high, mask* __vec) const
{
- const int __bitmasksize = 11; // Highest bitmask in ctype_base == 10
for (;__low < __high; ++__vec, ++__low)
{
+#if defined (_CTYPE_S) || defined (__istype)
+ *__vec = __maskrune (*__low, upper | lower | alpha | digit | xdigit
+ | space | print | graph | cntrl | punct | alnum);
+#else
mask __m = 0;
- int __i = 0; // Lowest bitmask in ctype_base == 0
- for (;__i < __bitmasksize; ++__i)
- {
- mask __bit = static_cast<mask>(1 << __i);
- if (this->is(__bit, *__low))
- __m |= __bit;
- }
+ if (this->is(upper, *__low)) __m |= upper;
+ if (this->is(lower, *__low)) __m |= lower;
+ if (this->is(alpha, *__low)) __m |= alpha;
+ if (this->is(digit, *__low)) __m |= digit;
+ if (this->is(xdigit, *__low)) __m |= xdigit;
+ if (this->is(space, *__low)) __m |= space;
+ if (this->is(print, *__low)) __m |= print;
+ if (this->is(graph, *__low)) __m |= graph;
+ if (this->is(cntrl, *__low)) __m |= cntrl;
+ if (this->is(punct, *__low)) __m |= punct;
+ // Do not include explicit line for alnum mask since it is a
+ // pure composite of masks on FreeBSD.
*__vec = __m;
+#endif
}
return __high;
}