Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r71185 - branches/release/boost
From: marshall_at_[hidden]
Date: 2011-04-11 09:21:17


Author: marshall
Date: 2011-04-11 09:21:15 EDT (Mon, 11 Apr 2011)
New Revision: 71185
URL: http://svn.boost.org/trac/boost/changeset/71185

Log:
Merge tokenizer fixes to release. Fixes #4649
Properties modified:
   branches/release/boost/token_functions.hpp (contents, props changed)
Text files modified:
   branches/release/boost/token_functions.hpp | 40 ++++++++++++++++++++++++++++++++--------
   1 files changed, 32 insertions(+), 8 deletions(-)

Modified: branches/release/boost/token_functions.hpp
==============================================================================
--- branches/release/boost/token_functions.hpp (original)
+++ branches/release/boost/token_functions.hpp 2011-04-11 09:21:15 EDT (Mon, 11 Apr 2011)
@@ -209,6 +209,36 @@
   // Assuming that the conditional will always get optimized out in the function
   // implementations, argument types are not a problem since both forms of character classifiers
   // expect an int.
+
+#if !defined(BOOST_NO_CWCTYPE)
+ template<typename traits, int N>
+ struct traits_extension_details : public traits {
+ typedef typename traits::char_type char_type;
+ static bool isspace(char_type c)
+ {
+ return std::iswspace(c) != 0;
+ }
+ static bool ispunct(char_type c)
+ {
+ return std::iswpunct(c) != 0;
+ }
+ };
+
+ template<typename traits>
+ struct traits_extension_details<traits, 1> : public traits {
+ typedef typename traits::char_type char_type;
+ static bool isspace(char_type c)
+ {
+ return std::isspace(c) != 0;
+ }
+ static bool ispunct(char_type c)
+ {
+ return std::ispunct(c) != 0;
+ }
+ };
+#endif
+
+
   // In case there is no cwctype header, we implement the checks manually.
   // We make use of the fact that the tested categories should fit in ASCII.
   template<typename traits>
@@ -217,10 +247,7 @@
     static bool isspace(char_type c)
     {
 #if !defined(BOOST_NO_CWCTYPE)
- if (sizeof(char_type) == 1)
- return std::isspace(static_cast<int>(c)) != 0;
- else
- return std::iswspace(static_cast<std::wint_t>(c)) != 0;
+ return traits_extension_details<traits, sizeof(char_type)>::isspace(c);
 #else
       return static_cast< unsigned >(c) <= 255 && std::isspace(c) != 0;
 #endif
@@ -229,10 +256,7 @@
     static bool ispunct(char_type c)
     {
 #if !defined(BOOST_NO_CWCTYPE)
- if (sizeof(char_type) == 1)
- return std::ispunct(static_cast<int>(c)) != 0;
- else
- return std::iswpunct(static_cast<std::wint_t>(c)) != 0;
+ return traits_extension_details<traits, sizeof(char_type)>::ispunct(c);
 #else
       return static_cast< unsigned >(c) <= 255 && std::ispunct(c) != 0;
 #endif


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk