* src/c++98/Makefile.am: Move ctype.cc, ctype_configure_char.cc and
authorredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 20 Oct 2014 12:34:10 +0000 (12:34 +0000)
committerredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 20 Oct 2014 12:34:10 +0000 (12:34 +0000)
ctype_members.cc to ...
* src/c++11/Makefile.am: Here.
* src/c++98/Makefile.in: Regenerate.
* src/c++11/Makefile.in: Regenerate.
* src/c++98/ctype.cc: Move file to ...
* src/c++11/ctype.cc: Here, define ctype_base::blank.
* config/abi/pre/gnu.ver: Export ctype_base::blank.
* config/locale/generic/ctype_members.cc
(ctype<wchar_t>::_M_convert_to_wmask): Handle blank. Update comments.
* config/locale/gnu/ctype_members.cc
(ctype<wchar_t>::_M_convert_to_wmask): Likewise.
* config/os/aix/ctype_base.h (ctype_base::blank): Declare.
* config/os/bionic/ctype_base.h (ctype_base::blank): Likewise.
* config/os/bsd/darwin/ctype_base.h (ctype_base::blank): Declare.
* config/os/bsd/darwin/ctype_inline.h (ctype<char>::is): Use blank.
(ctype<wchar_t::do_is): Likewise.
* config/os/bsd/dragonfly/ctype_base.h (ctype_base::blank): Declare.
* config/os/bsd/dragonfly/ctype_inline.h (ctype<char>::is): Use blank.
(ctype<wchar_t::do_is): Likewise.
* config/os/bsd/freebsd/ctype_base.h (ctype_base::blank): Declare.
* config/os/bsd/freebsd/ctype_inline.h (ctype<char>::is): Use blank.
(ctype<wchar_t::do_is): Likewise.
* config/os/bsd/netbsd/ctype_base.h (ctype_base::blank): Declare.
* config/os/bsd/openbsd/ctype_base.h (ctype_base::blank): Likewise.
* config/os/djgpp/ctype_base.h (ctype_base::blank): Likewise.
* config/os/generic/ctype_base.h (ctype_base::blank): Declare.
* config/os/generic/ctype_inline.h (ctype<char>::is): Use blank.
* config/os/gnu-linux/ctype_base.h (ctype_base::blank): Declare.
* config/os/hpux/ctype_base.h (ctype_base::blank): Likewise.
* config/os/mingw32-w64/ctype_base.h (ctype_base::blank): Declare.
* config/os/mingw32-w64/ctype_configure_char.cc
(ctype<char>::classic_table()): Set blank bit for space and tab.
* config/os/mingw32/ctype_base.h (ctype_base::blank): Declare.
* config/os/mingw32/ctype_configure_char.cc
(ctype<char>::classic_table()): Set blank bit for space and tab.
* config/os/newlib/ctype_base.h (ctype_base::blank): Declare.
* config/os/qnx/qnx6.1/ctype_base.h (ctype_base::blank): Likewise.
* config/os/solaris/solaris2.10/ctype_base.h (ctype_base::blank):
Likewise.
* config/os/tpf/ctype_base.h (ctype_base::blank): Likewise.
* config/os/uclibc/ctype_base.h (ctype_base::blank): Likewise.
* config/os/vxworks/ctype_base.h (ctype_base::blank): Likewise.
* include/bits/locale_facets.h (isblank): Define.
* include/bits/localefwd.h (isblank): Declare.
* testsuite/22_locale/classification/isblank.cc: New.
* testsuite/22_locale/ctype_base/blank.cc: New.

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

38 files changed:
libstdc++-v3/ChangeLog
libstdc++-v3/config/abi/pre/gnu.ver
libstdc++-v3/config/locale/generic/ctype_members.cc
libstdc++-v3/config/locale/gnu/ctype_members.cc
libstdc++-v3/config/os/aix/ctype_base.h
libstdc++-v3/config/os/bionic/ctype_base.h
libstdc++-v3/config/os/bsd/darwin/ctype_base.h
libstdc++-v3/config/os/bsd/darwin/ctype_inline.h
libstdc++-v3/config/os/bsd/dragonfly/ctype_base.h
libstdc++-v3/config/os/bsd/dragonfly/ctype_inline.h
libstdc++-v3/config/os/bsd/freebsd/ctype_base.h
libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h
libstdc++-v3/config/os/bsd/netbsd/ctype_base.h
libstdc++-v3/config/os/bsd/openbsd/ctype_base.h
libstdc++-v3/config/os/djgpp/ctype_base.h
libstdc++-v3/config/os/generic/ctype_base.h
libstdc++-v3/config/os/generic/ctype_inline.h
libstdc++-v3/config/os/gnu-linux/ctype_base.h
libstdc++-v3/config/os/hpux/ctype_base.h
libstdc++-v3/config/os/mingw32-w64/ctype_base.h
libstdc++-v3/config/os/mingw32-w64/ctype_configure_char.cc
libstdc++-v3/config/os/mingw32/ctype_base.h
libstdc++-v3/config/os/mingw32/ctype_configure_char.cc
libstdc++-v3/config/os/newlib/ctype_base.h
libstdc++-v3/config/os/qnx/qnx6.1/ctype_base.h
libstdc++-v3/config/os/solaris/solaris2.10/ctype_base.h
libstdc++-v3/config/os/tpf/ctype_base.h
libstdc++-v3/config/os/uclibc/ctype_base.h
libstdc++-v3/config/os/vxworks/ctype_base.h
libstdc++-v3/include/bits/locale_facets.h
libstdc++-v3/include/bits/localefwd.h
libstdc++-v3/src/c++11/Makefile.am
libstdc++-v3/src/c++11/Makefile.in
libstdc++-v3/src/c++11/ctype.cc [moved from libstdc++-v3/src/c++98/ctype.cc with 98% similarity]
libstdc++-v3/src/c++98/Makefile.am
libstdc++-v3/src/c++98/Makefile.in
libstdc++-v3/testsuite/22_locale/classification/isblank.cc [new file with mode: 0644]
libstdc++-v3/testsuite/22_locale/ctype_base/blank.cc [new file with mode: 0644]

index fcaaea0..e00b071 100644 (file)
@@ -1,3 +1,53 @@
+2014-10-16  Jonathan Wakely  <jwakely@redhat.com>
+
+       * src/c++98/Makefile.am: Move ctype.cc, ctype_configure_char.cc and
+       ctype_members.cc to ...
+       * src/c++11/Makefile.am: Here.
+       * src/c++98/Makefile.in: Regenerate.
+       * src/c++11/Makefile.in: Regenerate.
+       * src/c++98/ctype.cc: Move file to ...
+       * src/c++11/ctype.cc: Here, define ctype_base::blank.
+       * config/abi/pre/gnu.ver: Export ctype_base::blank.
+       * config/locale/generic/ctype_members.cc
+       (ctype<wchar_t>::_M_convert_to_wmask): Handle blank. Update comments.
+       * config/locale/gnu/ctype_members.cc
+       (ctype<wchar_t>::_M_convert_to_wmask): Likewise.
+       * config/os/aix/ctype_base.h (ctype_base::blank): Declare.
+       * config/os/bionic/ctype_base.h (ctype_base::blank): Likewise.
+       * config/os/bsd/darwin/ctype_base.h (ctype_base::blank): Declare.
+       * config/os/bsd/darwin/ctype_inline.h (ctype<char>::is): Use blank.
+       (ctype<wchar_t::do_is): Likewise.
+       * config/os/bsd/dragonfly/ctype_base.h (ctype_base::blank): Declare.
+       * config/os/bsd/dragonfly/ctype_inline.h (ctype<char>::is): Use blank.
+       (ctype<wchar_t::do_is): Likewise.
+       * config/os/bsd/freebsd/ctype_base.h (ctype_base::blank): Declare.
+       * config/os/bsd/freebsd/ctype_inline.h (ctype<char>::is): Use blank.
+       (ctype<wchar_t::do_is): Likewise.
+       * config/os/bsd/netbsd/ctype_base.h (ctype_base::blank): Declare.
+       * config/os/bsd/openbsd/ctype_base.h (ctype_base::blank): Likewise.
+       * config/os/djgpp/ctype_base.h (ctype_base::blank): Likewise.
+       * config/os/generic/ctype_base.h (ctype_base::blank): Declare.
+       * config/os/generic/ctype_inline.h (ctype<char>::is): Use blank.
+       * config/os/gnu-linux/ctype_base.h (ctype_base::blank): Declare.
+       * config/os/hpux/ctype_base.h (ctype_base::blank): Likewise.
+       * config/os/mingw32-w64/ctype_base.h (ctype_base::blank): Declare.
+       * config/os/mingw32-w64/ctype_configure_char.cc
+       (ctype<char>::classic_table()): Set blank bit for space and tab.
+       * config/os/mingw32/ctype_base.h (ctype_base::blank): Declare.
+       * config/os/mingw32/ctype_configure_char.cc
+       (ctype<char>::classic_table()): Set blank bit for space and tab.
+       * config/os/newlib/ctype_base.h (ctype_base::blank): Declare.
+       * config/os/qnx/qnx6.1/ctype_base.h (ctype_base::blank): Likewise.
+       * config/os/solaris/solaris2.10/ctype_base.h (ctype_base::blank):
+       Likewise.
+       * config/os/tpf/ctype_base.h (ctype_base::blank): Likewise.
+       * config/os/uclibc/ctype_base.h (ctype_base::blank): Likewise.
+       * config/os/vxworks/ctype_base.h (ctype_base::blank): Likewise.
+       * include/bits/locale_facets.h (isblank): Define.
+       * include/bits/localefwd.h (isblank): Declare.
+       * testsuite/22_locale/classification/isblank.cc: New.
+       * testsuite/22_locale/ctype_base/blank.cc: New.
+
 2014-10-19  Maxim Kuvyrkov  <maxim.kuvyrkov@linaro.org>
 
        * testsuite/lib/libstdc++.exp (v3-copy-file): New proc split from ...
index 0559444..4c6d994 100644 (file)
@@ -513,7 +513,7 @@ GLIBCXX_3.4 {
     _ZNSt5ctypeI[cw]*;
 
     # std::ctype_base
-    _ZNSt10ctype_base*;
+    _ZNSt10ctype_base[56][ac-z]*;
 
     # std::ctype_byname
     _ZNSt12ctype_bynameI[cw]*;
@@ -1473,6 +1473,9 @@ GLIBCXX_3.4.21 {
     # std::basic_ios::operator bool() const
     _ZNKSt9basic_iosI[cw]St11char_traitsI[cw]EEcvbEv;
 
+    # std::ctype_base::blank
+    _ZNSt10ctype_base5blankE;
+
 } GLIBCXX_3.4.20;
 
 
index 126c0f3..367a893 100644 (file)
@@ -93,7 +93,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        __ret = wctype("graph");
        break;
       default:
-       __ret = __wmask_type();
+       // For some targets ctype_base::blank == ctype_base::space so check
+       // here to avoid a duplicate case error.
+       if (__m == blank)
+         __ret = wctype("blank");
+       else
+         __ret = __wmask_type();
       }
     return __ret;
   };
@@ -133,7 +138,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   do_is(mask __m, char_type __c) const
   { 
     bool __ret = false;
-    // Generically, 15 (instead of 10) since we don't know the numerical
+    // Generically, 15 (instead of 11) since we don't know the numerical
     // encoding of the various categories in /usr/include/ctype.h.
     const size_t __bitmasksize = 15; 
     for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
@@ -152,7 +157,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   {
     for (;__lo < __hi; ++__vec, ++__lo)
       {
-       // Generically, 15 (instead of 10) since we don't know the numerical
+       // Generically, 15 (instead of 11) since we don't know the numerical
        // encoding of the various categories in /usr/include/ctype.h.
        const size_t __bitmasksize = 15; 
        mask __m = 0;
index 043a53a..cd9604c 100644 (file)
@@ -94,6 +94,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       case graph:
        __ret = __wctype_l("graph", _M_c_locale_ctype);
        break;
+      case blank:
+       __ret = __wctype_l("blank", _M_c_locale_ctype);
+       break;
       default:
        __ret = __wmask_type();
       }
@@ -144,8 +147,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       __ret = __iswctype_l(__c, _M_wmask[5], _M_c_locale_ctype);
     else
       {
-       // Highest bitmask in ctype_base == 10, but extra in "C"
-       // library for blank.
+       // Highest bitmask in ctype_base == 11
        const size_t __bitmasksize = 11;
        for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
          if (__m & _M_bit[__bitcur])
@@ -168,8 +170,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   {
     for (; __lo < __hi; ++__vec, ++__lo)
       {
-       // Highest bitmask in ctype_base == 10, but extra in "C"
-       // library for blank.
+       // Highest bitmask in ctype_base == 11
        const size_t __bitmasksize = 11; 
        mask __m = 0;
        for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
index 012375f..de78205 100644 (file)
@@ -52,6 +52,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = _ISCNTRL;
     static const mask punct    = _ISPUNCT;
     static const mask alnum    = _ISALPHA | _ISDIGIT;
+#if __cplusplus >= 201103L
+    static const mask blank    = _ISBLANK;
+#endif
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
index 597509b..1b441a6 100644 (file)
@@ -26,9 +26,7 @@
 // ISO C++ 14882: 22.1  Locales
 //
 
-// Information as gleaned from /usr/include/ctype.h, for solaris2.5.1
-
-// Support for Solaris 2.5.1
+// Information as gleaned from /usr/include/ctype.h
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
@@ -54,6 +52,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = _C;
     static const mask punct    = _P;
     static const mask alnum    = _U | _L | _N;
+#if __cplusplus >= 201103L
+    static const mask blank    = space;
+#endif
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
index edf23e1..b77ac70 100644 (file)
@@ -54,6 +54,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = _CTYPE_C;
     static const mask punct    = _CTYPE_P;
     static const mask alnum    = _CTYPE_A | _CTYPE_D;
+    static const mask blank    = _CTYPE_B;
 #else
     // Older versions, including Free BSD 3.4, use this style of define.
     static const mask upper            = _U;
@@ -67,6 +68,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = _C;
     static const mask punct    = _P;
     static const mask alnum    = _A | _D;
+    static const mask blank    = _B;
 #endif
   };
 
index 1170e4e..5ae5789 100644 (file)
@@ -60,7 +60,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        {
 #if defined (_CTYPE_S) || defined (__istype)
          *__vec = __maskrune (*__low, upper | lower | alpha | digit | xdigit
-                              | space | print | graph | cntrl | punct | alnum);
+                              | space | print | graph | cntrl | punct | alnum
+                              | blank);
 #else
          mask __m = 0;
          if (this->is(upper, *__low)) __m |= upper;
@@ -75,6 +76,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
          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.
+         if (this->is(blank, *__low)) __m |= blank;
          *__vec = __m;
 #endif
        }
@@ -123,7 +125,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   {
     for (; __lo < __hi; ++__vec, ++__lo)
       *__vec = __maskrune (*__lo, upper | lower | alpha | digit | xdigit
-                          | space | print | graph | cntrl | punct | alnum);
+                          | space | print | graph | cntrl | punct | alnum
+                          | blank);
     return __hi;
   }
   
index a95b248..856da8e 100644 (file)
@@ -52,6 +52,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = _CTYPE_C;
     static const mask punct    = _CTYPE_P;
     static const mask alnum    = _CTYPE_A | _CTYPE_D;
+    static const mask blank    = _CTYPE_B;
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
index 984665e..8e0f078 100644 (file)
@@ -59,7 +59,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       for (;__low < __high; ++__vec, ++__low)
        {
          *__vec = __maskrune (*__low, upper | lower | alpha | digit | xdigit
-                              | space | print | graph | cntrl | punct | alnum);
+                              | space | print | graph | cntrl | punct | alnum
+                              | blank);
        }
     return __high;
   }
@@ -106,7 +107,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   {
     for (; __lo < __hi; ++__vec, ++__lo)
       *__vec = __maskrune (*__lo, upper | lower | alpha | digit | xdigit
-                          | space | print | graph | cntrl | punct | alnum);
+                          | space | print | graph | cntrl | punct | alnum
+                          | blank);
     return __hi;
   }
 
index 9bd2a18..ba6433a 100644 (file)
@@ -56,6 +56,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = _CTYPE_C;
     static const mask punct    = _CTYPE_P;
     static const mask alnum    = _CTYPE_A | _CTYPE_D;
+    static const mask blank    = _CTYPE_B;
 #else
     // Older versions, including Free BSD 3.4, use this style of define.
     static const mask upper            = _U;
@@ -69,6 +70,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = _C;
     static const mask punct    = _P;
     static const mask alnum    = _A | _D;
+    static const mask blank    = _B;
 #endif
   };
 
index 939304a..0153099 100644 (file)
@@ -60,7 +60,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        {
 #if defined (_CTYPE_S) || defined (__istype)
          *__vec = __maskrune (*__low, upper | lower | alpha | digit | xdigit
-                              | space | print | graph | cntrl | punct | alnum);
+                              | space | print | graph | cntrl | punct | alnum
+                              | blank);
 #else
          mask __m = 0;
          if (this->is(upper, *__low)) __m |= upper;
@@ -75,6 +76,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
          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.
+         if (this->is(blank, *__low)) __m |= blank;
          *__vec = __m;
 #endif
        }
@@ -123,7 +125,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   {
     for (; __lo < __hi; ++__vec, ++__lo)
       *__vec = __maskrune (*__lo, upper | lower | alpha | digit | xdigit
-                          | space | print | graph | cntrl | punct | alnum);
+                          | space | print | graph | cntrl | punct | alnum
+                          | blank);
     return __hi;
   }
 
index f441d74..6cd339f 100644 (file)
@@ -70,6 +70,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask punct    = _CTYPE_P;
     static const mask alnum    = _CTYPE_U | _CTYPE_L | _CTYPE_N;
 #endif
+#if __cplusplus >= 201103L
+    static const mask blank    = space;
+#endif
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
index 3599c95..ad9799a 100644 (file)
@@ -53,6 +53,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = _C;
     static const mask punct    = _P;
     static const mask alnum    = _U | _L | _N;
+#if __cplusplus >= 201103L
+    static const mask blank    = space;
+#endif
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
index b4befe1..1be9767 100644 (file)
@@ -51,6 +51,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask xdigit = __dj_ISXDIGIT;   // Hexadecimal numeric
     static const mask alnum = __dj_ISALPHA | __dj_ISDIGIT;  // Alphanumeric
     static const mask graph = __dj_ISALPHA | __dj_ISDIGIT | __dj_ISPUNCT;  // Graphical
+#if __cplusplus >= 201103L
+    static const mask blank    = __dj_ISBLANK;
+#endif
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
index 8a8606b..c70c03f 100644 (file)
@@ -52,6 +52,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = 1 << 8;
     static const mask punct    = 1 << 9;
     static const mask alnum    = (1 << 2) | (1 << 3);  // alpha|digit
+    static const mask blank    = 1 << 10;
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
index d150f31..31c8c57 100644 (file)
@@ -97,6 +97,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                  case graph:
                    __testis = isgraph(__c);
                    break;
+#ifdef _GLIBCXX_USE_C99_CTYPE_TR1
+                 case blank:
+                   __testis = isblank(__c);
+                   break;
+#endif
                  default:
                    __testis = false;
                    break;
@@ -117,7 +122,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
     else
       {
-       // Highest bitmask in ctype_base == 10.
+       // Highest bitmask in ctype_base == 11.
        const size_t __bitmasksize = 15; 
        for (;__low < __high; ++__vec, ++__low)
          {
index 8cd1d46..e28ed94 100644 (file)
@@ -57,6 +57,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = _IScntrl;
     static const mask punct    = _ISpunct;
     static const mask alnum    = _ISalpha | _ISdigit;
+#if __cplusplus >= 201103L
+    static const mask blank    = _ISblank;
+#endif
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
index f8b0f7c..b093ffb 100644 (file)
@@ -52,6 +52,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl     = _ISCNTRL;
     static const mask punct     = _ISPUNCT;
     static const mask alnum     = _ISALPHA | _ISDIGIT;
+#if __cplusplus >= 201103L
+    static const mask blank    = _ISBLANK;
+#endif
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
index 7803422..0780091 100644 (file)
@@ -58,6 +58,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = 1 << 8;
     static const mask punct    = 1 << 9;
     static const mask alnum    = (1 << 2) | (1 << 3);  // alpha|digit
+#if __cplusplus >= 201103L
+    static const mask blank    = 1 << 10;
+#endif
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
index 19456e0..b1b4fa0 100644 (file)
@@ -54,7 +54,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       cntrl /* ^F */,
       cntrl /* ^G */,
       cntrl /* ^H */,
-      ctype_base::mask(space | cntrl) /* tab */,
+      ctype_base::mask(space | cntrl | blank) /* tab */,
       ctype_base::mask(space | cntrl) /* LF */,
       ctype_base::mask(space | cntrl) /* ^K */,
       ctype_base::mask(space | cntrl) /* FF */,
@@ -77,7 +77,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       cntrl /* ^] */,
       cntrl /* ^^ */,
       cntrl /* ^_ */,
-      ctype_base::mask(space | print) /*   */,
+      ctype_base::mask(space | print | blank) /*   */,
       ctype_base::mask(punct | print) /* ! */,
       ctype_base::mask(punct | print) /* " */,
       ctype_base::mask(punct | print) /* # */,
index 7803422..0780091 100644 (file)
@@ -58,6 +58,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = 1 << 8;
     static const mask punct    = 1 << 9;
     static const mask alnum    = (1 << 2) | (1 << 3);  // alpha|digit
+#if __cplusplus >= 201103L
+    static const mask blank    = 1 << 10;
+#endif
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
index 19456e0..b1b4fa0 100644 (file)
@@ -54,7 +54,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       cntrl /* ^F */,
       cntrl /* ^G */,
       cntrl /* ^H */,
-      ctype_base::mask(space | cntrl) /* tab */,
+      ctype_base::mask(space | cntrl | blank) /* tab */,
       ctype_base::mask(space | cntrl) /* LF */,
       ctype_base::mask(space | cntrl) /* ^K */,
       ctype_base::mask(space | cntrl) /* FF */,
@@ -77,7 +77,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       cntrl /* ^] */,
       cntrl /* ^^ */,
       cntrl /* ^_ */,
-      ctype_base::mask(space | print) /*   */,
+      ctype_base::mask(space | print | blank) /*   */,
       ctype_base::mask(punct | print) /* ! */,
       ctype_base::mask(punct | print) /* " */,
       ctype_base::mask(punct | print) /* # */,
index 29f527d..1bf5beb 100644 (file)
 // ISO C++ 14882: 22.1  Locales
 //
   
-// Information as gleaned from /usr/include/ctype.h, for solaris2.5.1
+// Information as gleaned from /usr/include/ctype.h
 
-// Support for Solaris 2.5.1
-  
 namespace std _GLIBCXX_VISIBILITY(default)
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
@@ -54,6 +52,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = _C;
     static const mask punct    = _P;
     static const mask alnum    = _U | _L | _N;
+#if __cplusplus >= 201103L
+    static const mask blank    = space;
+#endif
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
index bf7c756..c5e1182 100644 (file)
@@ -57,6 +57,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = _BB;
     static const mask punct    = _PU;
     static const mask alnum    = _DI | _LO | _UP | _XA;
+#if __cplusplus >= 201103L
+    static const mask blank    = _SP | _XB;
+#endif
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
index c584fee..893b732 100644 (file)
@@ -54,6 +54,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = _ISCNTRL;
     static const mask punct    = _ISPUNCT;
     static const mask alnum    = _ISALPHA | _ISDIGIT;
+#if __cplusplus >= 201103L
+    static const mask blank    = _ISBLANK;
+#endif
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
index d3b2a25..2089358 100644 (file)
@@ -52,6 +52,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = _IScntrl;
     static const mask punct    = _ISpunct;
     static const mask alnum    = _ISalpha | _ISdigit;
+#if __cplusplus >= 201103L
+    static const mask blank    = _ISblank;
+#endif
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
index 39453af..86a6007 100644 (file)
@@ -59,6 +59,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = _IScntrl;
     static const mask punct    = _ISpunct;
     static const mask alnum    = _ISalpha | _ISdigit;
+#if __cplusplus >= 201103L
+    static const mask blank    = _ISblank;
+#endif
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
index bc105a2..4f92412 100644 (file)
@@ -53,6 +53,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     static const mask cntrl    = _C_CONTROL;
     static const mask punct    = _C_PUNCT;
     static const mask alnum    = _C_UPPER | _C_LOWER | _C_NUMBER;
+#if __cplusplus >= 201103L
+    static const mask blank    = _C_WHITE_SPACE;
+#endif
   };
 
 _GLIBCXX_END_NAMESPACE_VERSION
index 453bbed..234693b 100644 (file)
@@ -2590,6 +2590,14 @@ _GLIBCXX_END_NAMESPACE_LDBL
     isgraph(_CharT __c, const locale& __loc)
     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::graph, __c); }
 
+#if __cplusplus >= 201103L
+  /// Convenience interface to ctype.is(ctype_base::blank, __c).
+  template<typename _CharT>
+    inline bool
+    isblank(_CharT __c, const locale& __loc)
+    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::blank, __c); }
+#endif
+
   /// Convenience interface to ctype.toupper(__c).
   template<typename _CharT>
     inline _CharT
index f9983c9..3025c22 100644 (file)
@@ -107,6 +107,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     bool
     isgraph(_CharT, const locale&);
 
+#if __cplusplus >= 201103L
+  template<typename _CharT>
+    bool
+    isblank(_CharT, const locale&);
+#endif
+
   template<typename _CharT>
     _CharT
     toupper(_CharT, const locale&);
index 39425d4..c8507ce 100644 (file)
@@ -27,9 +27,22 @@ noinst_LTLIBRARIES = libc++11convenience.la
 
 headers =
 
+# Source files linked in via configuration/make substitution for a
+# particular host.
+host_sources = \
+       ctype_configure_char.cc \
+       ctype_members.cc
+
+ctype_configure_char.cc: ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc
+       $(LN_S) ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc . || true
+
+ctype_members.cc: ${glibcxx_srcdir}/$(CCTYPE_CC)
+       $(LN_S) ${glibcxx_srcdir}/$(CCTYPE_CC) . || true
+
 sources = \
        chrono.cc \
        condition_variable.cc \
+       ctype.cc \
        debug.cc \
        functexcept.cc \
        functional.cc \
@@ -45,7 +58,8 @@ sources = \
        shared_ptr.cc \
        snprintf_lite.cc \
        system_error.cc \
-       thread.cc
+       thread.cc \
+       ${host_sources}
 
 if ENABLE_EXTERN_TEMPLATE
 # XTEMPLATE_FLAGS = -fno-implicit-templates
index 70c6c4b..fd3e780 100644 (file)
@@ -67,18 +67,19 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 LTLIBRARIES = $(noinst_LTLIBRARIES)
 libc__11convenience_la_LIBADD =
-am__objects_1 = chrono.lo condition_variable.lo debug.lo \
+am__objects_1 = ctype_configure_char.lo ctype_members.lo
+am__objects_2 = chrono.lo condition_variable.lo ctype.lo debug.lo \
        functexcept.lo functional.lo future.lo hash_c++0x.lo \
        hashtable_c++0x.lo ios.lo limits.lo mutex.lo placeholders.lo \
        random.lo regex.lo shared_ptr.lo snprintf_lite.lo \
-       system_error.lo thread.lo
-@ENABLE_EXTERN_TEMPLATE_TRUE@am__objects_2 = ext11-inst.lo \
+       system_error.lo thread.lo $(am__objects_1)
+@ENABLE_EXTERN_TEMPLATE_TRUE@am__objects_3 = ext11-inst.lo \
 @ENABLE_EXTERN_TEMPLATE_TRUE@  fstream-inst.lo ios-inst.lo \
 @ENABLE_EXTERN_TEMPLATE_TRUE@  iostream-inst.lo istream-inst.lo \
 @ENABLE_EXTERN_TEMPLATE_TRUE@  ostream-inst.lo sstream-inst.lo \
 @ENABLE_EXTERN_TEMPLATE_TRUE@  streambuf-inst.lo string-inst.lo \
 @ENABLE_EXTERN_TEMPLATE_TRUE@  wstring-inst.lo
-am_libc__11convenience_la_OBJECTS = $(am__objects_1) $(am__objects_2)
+am_libc__11convenience_la_OBJECTS = $(am__objects_2) $(am__objects_3)
 libc__11convenience_la_OBJECTS = $(am_libc__11convenience_la_OBJECTS)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp =
@@ -314,9 +315,17 @@ AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
 # Convenience library for C++11 runtime.
 noinst_LTLIBRARIES = libc++11convenience.la
 headers = 
+
+# Source files linked in via configuration/make substitution for a
+# particular host.
+host_sources = \
+       ctype_configure_char.cc \
+       ctype_members.cc
+
 sources = \
        chrono.cc \
        condition_variable.cc \
+       ctype.cc \
        debug.cc \
        functexcept.cc \
        functional.cc \
@@ -332,7 +341,8 @@ sources = \
        shared_ptr.cc \
        snprintf_lite.cc \
        system_error.cc \
-       thread.cc
+       thread.cc \
+       ${host_sources}
 
 # XTEMPLATE_FLAGS =
 @ENABLE_EXTERN_TEMPLATE_FALSE@inst_sources = 
@@ -646,6 +656,12 @@ uninstall-am:
        pdf pdf-am ps ps-am tags uninstall uninstall-am
 
 
+ctype_configure_char.cc: ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc
+       $(LN_S) ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc . || true
+
+ctype_members.cc: ${glibcxx_srcdir}/$(CCTYPE_CC)
+       $(LN_S) ${glibcxx_srcdir}/$(CCTYPE_CC) . || true
+
 vpath % $(top_srcdir)/src/c++11
 
 # Use special rules for the hashtable.cc file so that all
similarity index 98%
rename from libstdc++-v3/src/c++98/ctype.cc
rename to libstdc++-v3/src/c++11/ctype.cc
index ffeeafc..b76962a 100644 (file)
@@ -40,6 +40,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   const ctype_base::mask ctype_base::xdigit;
   const ctype_base::mask ctype_base::alnum;
   const ctype_base::mask ctype_base::graph;
+  const ctype_base::mask ctype_base::blank;
 
   // Definitions for locale::id of standard facets that are specialized.
   locale::id ctype<char>::id;
index 6da69f8..9afe904 100644 (file)
@@ -33,8 +33,6 @@ host_sources = \
        atomicity.cc \
        codecvt_members.cc \
        collate_members.cc \
-       ctype_configure_char.cc \
-       ctype_members.cc \
        messages_members.cc \
        monetary_members.cc \
        numeric_members.cc \
@@ -46,12 +44,6 @@ codecvt_members.cc: ${glibcxx_srcdir}/$(CCODECVT_CC)
 collate_members.cc: ${glibcxx_srcdir}/$(CCOLLATE_CC)
        $(LN_S) ${glibcxx_srcdir}/$(CCOLLATE_CC) . || true
 
-ctype_configure_char.cc: ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc
-       $(LN_S) ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc . || true
-
-ctype_members.cc: ${glibcxx_srcdir}/$(CCTYPE_CC)
-       $(LN_S) ${glibcxx_srcdir}/$(CCTYPE_CC) . || true
-
 messages_members.cc: ${glibcxx_srcdir}/$(CMESSAGES_CC)
        $(LN_S) ${glibcxx_srcdir}/$(CMESSAGES_CC) . || true
 
@@ -104,7 +96,6 @@ sources = \
        mt_allocator.cc \
        codecvt.cc \
        complex_io.cc \
-       ctype.cc \
        globals_io.cc \
        hash_tr1.cc \
        hashtable_tr1.cc \
index 38f96cc..9d93792 100644 (file)
@@ -68,8 +68,8 @@ CONFIG_CLEAN_VPATH_FILES =
 LTLIBRARIES = $(noinst_LTLIBRARIES)
 libc__98convenience_la_LIBADD =
 am__objects_1 = atomicity.lo codecvt_members.lo collate_members.lo \
-       ctype_configure_char.lo ctype_members.lo messages_members.lo \
-       monetary_members.lo numeric_members.lo time_members.lo
+       messages_members.lo monetary_members.lo numeric_members.lo \
+       time_members.lo
 @ENABLE_EXTERN_TEMPLATE_TRUE@am__objects_2 = allocator-inst.lo \
 @ENABLE_EXTERN_TEMPLATE_TRUE@  concept-inst.lo ext-inst.lo \
 @ENABLE_EXTERN_TEMPLATE_TRUE@  locale-inst.lo misc-inst.lo \
@@ -78,7 +78,7 @@ am__objects_3 = parallel_settings.lo
 am__objects_4 = basic_file.lo c++locale.lo $(am__objects_2) \
        $(am__objects_3)
 am__objects_5 = bitmap_allocator.lo pool_allocator.lo mt_allocator.lo \
-       codecvt.lo complex_io.lo ctype.lo globals_io.lo hash_tr1.lo \
+       codecvt.lo complex_io.lo globals_io.lo hash_tr1.lo \
        hashtable_tr1.lo ios_failure.lo ios_init.lo ios_locale.lo \
        list.lo list-aux.lo list-aux-2.lo list_associated.lo \
        list_associated-2.lo locale.lo locale_init.lo locale_facets.lo \
@@ -328,8 +328,6 @@ host_sources = \
        atomicity.cc \
        codecvt_members.cc \
        collate_members.cc \
-       ctype_configure_char.cc \
-       ctype_members.cc \
        messages_members.cc \
        monetary_members.cc \
        numeric_members.cc \
@@ -364,7 +362,6 @@ sources = \
        mt_allocator.cc \
        codecvt.cc \
        complex_io.cc \
-       ctype.cc \
        globals_io.cc \
        hash_tr1.cc \
        hashtable_tr1.cc \
@@ -699,12 +696,6 @@ codecvt_members.cc: ${glibcxx_srcdir}/$(CCODECVT_CC)
 collate_members.cc: ${glibcxx_srcdir}/$(CCOLLATE_CC)
        $(LN_S) ${glibcxx_srcdir}/$(CCOLLATE_CC) . || true
 
-ctype_configure_char.cc: ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc
-       $(LN_S) ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc . || true
-
-ctype_members.cc: ${glibcxx_srcdir}/$(CCTYPE_CC)
-       $(LN_S) ${glibcxx_srcdir}/$(CCTYPE_CC) . || true
-
 messages_members.cc: ${glibcxx_srcdir}/$(CMESSAGES_CC)
        $(LN_S) ${glibcxx_srcdir}/$(CMESSAGES_CC) . || true
 
diff --git a/libstdc++-v3/testsuite/22_locale/classification/isblank.cc b/libstdc++-v3/testsuite/22_locale/classification/isblank.cc
new file mode 100644 (file)
index 0000000..0c7adc2
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright (C) 2014 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options " -std=gnu++11 " }
+
+// 22.3.3.1 Character classification [classification]
+
+#include <locale>
+#include <testsuite_hooks.h>
+
+typedef char char_type;
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+  VERIFY( std::isblank(' ', std::locale::classic()) );
+  VERIFY( std::isblank('\t', std::locale::classic()) );
+}
+
+void
+test02()
+{
+#ifdef _GLIBCXX_USE_WCHAR_T
+  bool test __attribute__((unused)) = true;
+  VERIFY( std::isblank(L' ', std::locale::classic()) );
+  VERIFY( std::isblank(L'\t', std::locale::classic()) );
+#endif
+}
+
+int main()
+{
+  test01();
+  test02();
+}
diff --git a/libstdc++-v3/testsuite/22_locale/ctype_base/blank.cc b/libstdc++-v3/testsuite/22_locale/ctype_base/blank.cc
new file mode 100644 (file)
index 0000000..cfd02a4
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright (C) 2014 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+
+#include <locale>
+
+void
+test01()
+{
+  const std::ctype_base::mask* blank __attribute__((unused));
+  blank = &std::ctype_base::blank;
+}