OSDN Git Service

* config/os/bsd/freebsd/ctype_inline.h: Support _M_table
authorljrittle <ljrittle@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 11 Mar 2003 07:07:25 +0000 (07:07 +0000)
committerljrittle <ljrittle@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 11 Mar 2003 07:07:25 +0000 (07:07 +0000)
when so installed.
* testsuite/22_locale/ctype/cons/char/1.cc: Fix typo.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@64163 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h
libstdc++-v3/testsuite/22_locale/ctype/cons/char/1.cc

index 9689c58..f66c6e4 100644 (file)
@@ -1,5 +1,9 @@
 2003-03-11  Loren J. Rittle  <ljrittle@acm.org>
 
+       * config/os/bsd/freebsd/ctype_inline.h:  Support _M_table
+       when so installed.
+       * testsuite/22_locale/ctype/cons/char/1.cc: Fix typo.
+
        * testsuite/testsuite_hooks.h (run_tests_wrapped_env): Do not
        report lack of setenv().
 
index b4ba03f..d69324a 100644 (file)
@@ -1,6 +1,6 @@
 // Locale support -*- C++ -*-
 
-// Copyright (C) 2000 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2003 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
   ctype<char>::
   is(mask __m, char __c) const
   { 
-    return __istype(__c, __m);
+    if (_M_table)
+      return _M_table[static_cast<unsigned char>(__c)] & __m;
+    else
+      return __istype(__c, __m);
   }
 
   const char*
   ctype<char>::
   is(const char* __low, const char* __high, mask* __vec) const
   {
-    for (;__low < __high; ++__vec, ++__low)
-      {
+    if (_M_table)
+      while (__low < __high)
+       *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
+    else
+      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);
+         *__vec = __maskrune (*__low, upper | lower | alpha | digit | xdigit
+                              | space | print | graph | cntrl | punct | alnum);
 #else
-       mask __m = 0;
-       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;
+         mask __m = 0;
+         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;
   }
 
   ctype<char>::
   scan_is(mask __m, const char* __low, const char* __high) const
   {
-    while (__low < __high && !this->is(__m, *__low))
-      ++__low;
+    if (_M_table)
+      while (__low < __high
+            && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
+       ++__low;
+    else
+      while (__low < __high && !this->is(__m, *__low))
+       ++__low;
     return __low;
   }
 
   ctype<char>::
   scan_not(mask __m, const char* __low, const char* __high) const
   {
-    while (__low < __high && this->is(__m, *__low) != 0)
-      ++__low;
+    if (_M_table)
+      while (__low < __high
+            && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
+       ++__low;
+    else
+      while (__low < __high && this->is(__m, *__low) != 0)
+       ++__low;
     return __low;
   }
-
-
-
-
-
index 65fc626..5ad3877 100644 (file)
@@ -57,7 +57,7 @@ void test01()
 
   comma_ctype obj2(tmp);
   const ctype_base::mask* ctable = obj2.get_table();
-  VERIFY ( tmp = ctable );
+  VERIFY ( tmp == ctable );
 }
 
 int main()