$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r60226 - trunk/boost/spirit/home/support
From: joel_at_[hidden]
Date: 2010-03-06 06:26:40
Author: djowel
Date: 2010-03-06 06:26:39 EST (Sat, 06 Mar 2010)
New Revision: 60226
URL: http://svn.boost.org/trac/boost/changeset/60226
Log:
some tweaks (casting chars)
Text files modified: 
   trunk/boost/spirit/home/support/char_class.hpp |    22 ++++++++++------------                  
   1 files changed, 10 insertions(+), 12 deletions(-)
Modified: trunk/boost/spirit/home/support/char_class.hpp
==============================================================================
--- trunk/boost/spirit/home/support/char_class.hpp	(original)
+++ trunk/boost/spirit/home/support/char_class.hpp	2010-03-06 06:26:39 EST (Sat, 06 Mar 2010)
@@ -29,32 +29,30 @@
 
 namespace boost { namespace spirit { namespace detail
 {
-    // Here's the thing... typical encodings except ASCII deals
-    // with unsigned integers > 127. ASCII uses only 127, but most
-    // char and wchar_t are signed. Thus, when you convert from, say,
-    // char with value > 127 it becomes negative (e.g. char 233 is
-    // -23). When you cast this to an unsigned int with 32 bits,
-    // you get 4294967273! The trick is to cast to an unsigned version
-    // of the source char first before casting to the target.
-    // {P.S. Don't worry about the code, the optimizer will
-    // optimize the if-else branches}
+    // Here's the thing... typical encodings (except ASCII) deal with unsigned
+    // integers > 127. ASCII uses only 127. Yet, most char and wchar_t are signed.
+    // Thus, a char with value > 127 is negative (e.g. char 233 is -23). When you
+    // cast this to an unsigned int with 32 bits, you get 4294967273!
+    //
+    // The trick is to cast to an unsigned version of the source char first
+    // before casting to the target. {P.S. Don't worry about the code, the
+    // optimizer will optimize the if-else branches}
 
     template <typename TargetChar, typename SourceChar>
     TargetChar cast_char(SourceChar ch)
     {
         if (is_signed<TargetChar>::value != is_signed<SourceChar>::value)
         {
-            typedef typename make_unsigned<SourceChar>::type USourceChar;
-            typedef typename make_signed<SourceChar>::type SSourceChar;
-
             if (is_signed<SourceChar>::value)
             {
                  // source is signed, target is unsigned
+                typedef typename make_unsigned<SourceChar>::type USourceChar;
                 return TargetChar(USourceChar(ch));
             }
             else
             {
                  // source is unsigned, target is signed
+                typedef typename make_signed<SourceChar>::type SSourceChar;
                 return TargetChar(SSourceChar(ch));
             }
         }