$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r71402 - trunk/libs/math/example
From: pbristow_at_[hidden]
Date: 2011-04-21 13:49:41
Author: pbristow
Date: 2011-04-21 13:49:40 EDT (Thu, 21 Apr 2011)
New Revision: 71402
URL: http://svn.boost.org/trac/boost/changeset/71402
Log:
Refinements to examples to avoid temp locales
Text files modified: 
   trunk/libs/math/example/lexical_cast_nonfinite_facets.cpp |    17 +++++++++++------                       
   trunk/libs/math/example/nonfinite_legacy.cpp              |    15 +++++++++------                         
   trunk/libs/math/example/nonfinite_loopback_ok.cpp         |    18 ++++++++++++------                      
   3 files changed, 32 insertions(+), 18 deletions(-)
Modified: trunk/libs/math/example/lexical_cast_nonfinite_facets.cpp
==============================================================================
--- trunk/libs/math/example/lexical_cast_nonfinite_facets.cpp	(original)
+++ trunk/libs/math/example/lexical_cast_nonfinite_facets.cpp	2011-04-21 13:49:40 EDT (Thu, 21 Apr 2011)
@@ -66,15 +66,20 @@
   std::cout << "finite_num_facet with lexical_cast example." << std::endl;
 
   // Example of using non_finite num_put and num_get facets with lexical_cast.
-  locale old_locale;
-  locale tmp_locale(old_locale, new nonfinite_num_put<char>);
-  // Create a new temporary output locale, and add the output nonfinite_num_put facet.
+  //locale old_locale;
+  //locale tmp_locale(old_locale, new nonfinite_num_put<char>);
+  //// Create a new temporary output locale, and add the output nonfinite_num_put facet.
 
-  locale new_locale(tmp_locale, new nonfinite_num_get<char>);
+  //locale new_locale(tmp_locale, new nonfinite_num_get<char>);
   // Create a new output locale (from the tmp locale), and add the input nonfinite_num_get facet.
 
-  // Note that is necessary to do add get and put facets in two steps.
-
+  // Note that you can only add facets one at a time, 
+  // unless you chain thus:
+  
+  std::locale new_locale(std::locale(std::locale(),
+    new boost::math::nonfinite_num_put<char>),
+    new boost::math::nonfinite_num_get<char>);
+  
   locale::global(new_locale); // Newly constructed streams
   // (including those streams inside lexical_cast)
   // now use new_locale with nonfinite facets.
Modified: trunk/libs/math/example/nonfinite_legacy.cpp
==============================================================================
--- trunk/libs/math/example/nonfinite_legacy.cpp	(original)
+++ trunk/libs/math/example/nonfinite_legacy.cpp	2011-04-21 13:49:40 EDT (Thu, 21 Apr 2011)
@@ -28,6 +28,11 @@
 #include <iostream>
 using std::cout;
 using std::endl;
+
+#include <iomanip>
+using std::setfill;
+using std::setw;
+
 #include <locale>
 using std::locale;
 
@@ -40,12 +45,10 @@
 
 int main()
 {
-
-  locale old_locale;
-  locale tmp_locale(old_locale, new nonfinite_num_put<char>(legacy));
-  locale new_locale(tmp_locale, new nonfinite_num_get<char>(legacy));
-  // Note that to add two facets,  nonfinite_num_put and nonfinite_num_get,
-  // you have to add one at a time, using a temporary locale.
+  // Create a new locale with both the nonfinite facets.
+  std::locale new_locale(std::locale(std::locale(),
+    new boost::math::nonfinite_num_put<char>),
+    new boost::math::nonfinite_num_get<char>);
 
   {
     stringstream ss;
Modified: trunk/libs/math/example/nonfinite_loopback_ok.cpp
==============================================================================
--- trunk/libs/math/example/nonfinite_loopback_ok.cpp	(original)
+++ trunk/libs/math/example/nonfinite_loopback_ok.cpp	2011-04-21 13:49:40 EDT (Thu, 21 Apr 2011)
@@ -40,14 +40,20 @@
 
 int main()
 {
-  locale old_locale; // Current global locale.
+  //locale old_locale; // Current global locale.
   // Create tmp_locale and store the output nonfinite_num_put facet in it.
-  locale tmp_locale(old_locale, new nonfinite_num_put<char>);
+  //locale tmp_locale(old_locale, new nonfinite_num_put<char>);
   // Create new_locale and store the input nonfinite_num_get facet in it.
-  locale new_locale(tmp_locale, new nonfinite_num_get<char>);
-  // Seems necessary to add one facet at a time, hence need a tmp_locale.
-
-  stringstream ss; // Both input and output.
+  //locale new_locale(tmp_locale, new nonfinite_num_get<char>);
+  // Can only add one facet at a time, hence need a tmp_locale.
+  // Unless we write:
+
+  std::locale new_locale(std::locale(std::locale(std::locale(),
+    new boost::math::nonfinite_num_put<char>),
+    new boost::math::nonfinite_num_get<char>));
+  
+  stringstream ss; // Both input and output, so need both get and put facets.
+  
   ss.imbue(new_locale);
 
   double inf = numeric_limits<double>::infinity();