$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r56054 - in sandbox/itl: boost/itl/type_traits boost/itl_xt libs/itl/example/boost_party_ libs/itl/example/interval_ libs/itl/example/man_power_ libs/itl/example/month_and_week_grid_ libs/itl/example/overlap_counter_ libs/itl/example/party_ libs/itl/example/partys_height_average_ libs/itl/example/partys_tallest_guests_ libs/itl/example/user_groups_ libs/itl_xt/example
From: afojgo_at_[hidden]
Date: 2009-09-05 17:12:53
Author: jofaber
Date: 2009-09-05 17:12:52 EDT (Sat, 05 Sep 2009)
New Revision: 56054
URL: http://svn.boost.org/trac/boost/changeset/56054
Log:
Refactoring: Simplified string conversion.
Text files modified: 
   sandbox/itl/boost/itl/type_traits/to_string.hpp                               |    62 +++++---------------------------------- 
   sandbox/itl/boost/itl_xt/var_tuple.hpp                                        |    20 ++++++++++++                            
   sandbox/itl/libs/itl/example/boost_party_/boost_party.cpp                     |     1                                         
   sandbox/itl/libs/itl/example/interval_/interval.cpp                           |    11 +++---                                  
   sandbox/itl/libs/itl/example/man_power_/man_power.cpp                         |     1                                         
   sandbox/itl/libs/itl/example/month_and_week_grid_/month_and_week_grid.cpp     |     1                                         
   sandbox/itl/libs/itl/example/overlap_counter_/overlap_counter.cpp             |     1                                         
   sandbox/itl/libs/itl/example/party_/party.cpp                                 |     1                                         
   sandbox/itl/libs/itl/example/partys_height_average_/partys_height_average.cpp |     1                                         
   sandbox/itl/libs/itl/example/partys_tallest_guests_/partys_tallest_guests.cpp |     1                                         
   sandbox/itl/libs/itl/example/user_groups_/user_groups.cpp                     |     1                                         
   sandbox/itl/libs/itl_xt/example/toytime.h                                     |    37 ++++++++---------------                 
   12 files changed, 46 insertions(+), 92 deletions(-)
Modified: sandbox/itl/boost/itl/type_traits/to_string.hpp
==============================================================================
--- sandbox/itl/boost/itl/type_traits/to_string.hpp	(original)
+++ sandbox/itl/boost/itl/type_traits/to_string.hpp	2009-09-05 17:12:52 EDT (Sat, 05 Sep 2009)
@@ -24,65 +24,19 @@
 namespace boost{ namespace itl
 {    
 
-/// static class template for the string representation of values
-/**
-    <b>value</b> serves as a base to for the representation
-    of atomic types and classes as strings.
-
-    The function <tt>toString</tt> is defined for all atomic (built in) types
-    like <tt>int, double etc.</tt>. For types other than atomic ones namely
-    classes the function template <tt>toString</tt> calls a member function
-    <tt>as_string</tt> on the class-type passed to the template.
-
-    Thereby we can implement a general string representation for template classes
-    which is independent of the template parameter being an atomic or a class type.
-    For every object, including atomic the string converter function toString can
-    be called, provides new classes implement a memberfunction <tt>as_string</tt>
-  
-    @author  Joachim Faulhaber
-*/
+/// Static class template for the string representation of values
 template <class Type>
 struct to_string
 {
-    /** String converter for all types <tt>Type</tt>
-
-        E.g.: <tt>int i=5; string s = to_string<int>::apply(i);</tt>
-    */
-    static const std::string apply(const Type&);
+    /** Converts all values of types to std::string that implement an operator << */
+    static const std::string apply(const Type& value)
+	{
+		std::stringstream repr;
+		repr << value;
+		return repr.str();
+	}
 };
 
-
-typedef char * CharPT;
-
-#define RETURN_AS_STRING(format, atomicValue) \
-    std::stringstream repr; \
-    repr << atomicValue; \
-    return repr.str();
-
-/* Alternative macro using formated sprintf output
-#define RETURN_AS_STRING(format, atomicValue) \
-    char stringRepr[512]; \
-    sprintf(stringRepr, format, atomicValue); \
-    return stringRepr;
-*/
-
-template<> inline const std::string to_string<bool>::apply(const bool& x){ return x ? "true" : "false"; }
-template<> inline const std::string to_string<char>::apply(const char& x){ RETURN_AS_STRING("%c", x); }
-template<> inline const std::string to_string<short>::apply(const short& x) { RETURN_AS_STRING("%d", x); }
-template<> inline const std::string to_string<int>::apply(const int& x) { RETURN_AS_STRING("%d", x);   }
-template<> inline const std::string to_string<long>::apply(const long& x) { RETURN_AS_STRING("%ld", x);   }
-template<> inline const std::string to_string<unsigned char>::apply(const unsigned char& x) { RETURN_AS_STRING("%uc", x);   }
-template<> inline const std::string to_string<unsigned short>::apply(const unsigned short& x) { RETURN_AS_STRING("%hu", x);   }
-template<> inline const std::string to_string<unsigned int>::apply(const unsigned int& x) { RETURN_AS_STRING("%u", x);   }
-template<> inline const std::string to_string<unsigned long>::apply(const unsigned long& x) { RETURN_AS_STRING("%lu", x);   }
-template<> inline const std::string to_string<float>::apply(const float& x) { RETURN_AS_STRING("%f", x);   }
-template<> inline const std::string to_string<double>::apply(const double& x) { RETURN_AS_STRING("%lf", x);   }
-template<> inline const std::string to_string<CharPT>::apply(const CharPT & x) { RETURN_AS_STRING("%s", x);   }
-template<> inline const std::string to_string<std::string>::apply(const std::string& x) { return x; }
-
-template <class Type>
-inline const std::string to_string<Type>::apply(const Type& x) { return x.as_string(); }
-
 }} // namespace boost itl
 
 #endif
Modified: sandbox/itl/boost/itl_xt/var_tuple.hpp
==============================================================================
--- sandbox/itl/boost/itl_xt/var_tuple.hpp	(original)
+++ sandbox/itl/boost/itl_xt/var_tuple.hpp	2009-09-05 17:12:52 EDT (Sat, 05 Sep 2009)
@@ -152,6 +152,26 @@
     }
 
 
+	//==============================================================================
+	//= Representation
+	//==============================================================================
+
+	template<class CharType, class CharTraits, int varCountV>
+	std::basic_ostream<CharType, CharTraits>& operator <<
+	  (std::basic_ostream<CharType, CharTraits> &stream, var_tuple<varCountV> const& tuple)
+	{
+        stream << "(";
+        for(int idx = 0; idx < varCountV-1; idx++)
+            stream << tuple[idx] << ",";
+
+        if(varCountV==0) 
+			return stream << ")";
+        else 
+			return stream << tuple[varCountV-1] << ")";
+	}
+
+
+
 }} // namespace itl boost
 
 
Modified: sandbox/itl/libs/itl/example/boost_party_/boost_party.cpp
==============================================================================
--- sandbox/itl/libs/itl/example/boost_party_/boost_party.cpp	(original)
+++ sandbox/itl/libs/itl/example/boost_party_/boost_party.cpp	2009-09-05 17:12:52 EDT (Sat, 05 Sep 2009)
@@ -51,7 +51,6 @@
 // and a few lines of adapter code.
 #include <boost/itl/ptime.hpp> 
 
-#include <boost/itl/type_traits/to_string.hpp>
 #include <boost/itl/interval_map.hpp>
 
 using namespace std;
Modified: sandbox/itl/libs/itl/example/interval_/interval.cpp
==============================================================================
--- sandbox/itl/libs/itl/example/interval_/interval.cpp	(original)
+++ sandbox/itl/libs/itl/example/interval_/interval.cpp	2009-09-05 17:12:52 EDT (Sat, 05 Sep 2009)
@@ -21,7 +21,6 @@
 #include <iostream>
 #include <string>
 #include <math.h>
-#include <boost/itl/type_traits/to_string.hpp>
 #include <boost/itl/interval.hpp>
 #include "../toytime.hpp"
 
@@ -38,17 +37,17 @@
     interval<string> city_interval = interval<string>::leftopen("Barcelona", "Boston");
     interval<Time>   time_interval = interval<Time>::open(Time(monday,8,30), Time(monday,17,20));
 
-    cout << "Interval<int>: "    << int_interval.as_string() << endl;
-    cout << "Interval<double>: " << sqrt_interval.as_string() << " does " 
+    cout << "Interval<int>: "    << int_interval  << endl;
+    cout << "Interval<double>: " << sqrt_interval << " does " 
                                  << string(sqrt_interval.contains(sqrt(2.0))?"":"NOT") 
                                  << " contain sqrt(2)" << endl;
-    cout << "Interval<string>: " << city_interval.as_string() << " does "  
+    cout << "Interval<string>: " << city_interval << " does "  
                                  << string(city_interval.contains("Barcelona")?"":"NOT") 
                                  << " contain 'Barcelona'" << endl;
-    cout << "Interval<string>: " << city_interval.as_string() << " does "  
+    cout << "Interval<string>: " << city_interval << " does "  
                                  << string(city_interval.contains("Berlin")?"":"NOT") 
                                  << " contain 'Berlin'" << endl;
-    cout << "Interval<Time>: " << time_interval.as_string() << endl;
+    cout << "Interval<Time>: "   << time_interval << endl;
 
     return 0;
 }
Modified: sandbox/itl/libs/itl/example/man_power_/man_power.cpp
==============================================================================
--- sandbox/itl/libs/itl/example/man_power_/man_power.cpp	(original)
+++ sandbox/itl/libs/itl/example/man_power_/man_power.cpp	2009-09-05 17:12:52 EDT (Sat, 05 Sep 2009)
@@ -29,7 +29,6 @@
 // and a few lines of adapter code.
 #include <boost/itl/gregorian.hpp> 
 
-#include <boost/itl/type_traits/to_string.hpp>
 #include <boost/itl/interval_map.hpp>
 
 using namespace std;
Modified: sandbox/itl/libs/itl/example/month_and_week_grid_/month_and_week_grid.cpp
==============================================================================
--- sandbox/itl/libs/itl/example/month_and_week_grid_/month_and_week_grid.cpp	(original)
+++ sandbox/itl/libs/itl/example/month_and_week_grid_/month_and_week_grid.cpp	2009-09-05 17:12:52 EDT (Sat, 05 Sep 2009)
@@ -34,7 +34,6 @@
 // and a few lines of adapter code.
 #include <boost/itl/gregorian.hpp> 
 
-#include <boost/itl/type_traits/to_string.hpp>
 #include <boost/itl/split_interval_map.hpp>
 
 using namespace std;
Modified: sandbox/itl/libs/itl/example/overlap_counter_/overlap_counter.cpp
==============================================================================
--- sandbox/itl/libs/itl/example/overlap_counter_/overlap_counter.cpp	(original)
+++ sandbox/itl/libs/itl/example/overlap_counter_/overlap_counter.cpp	2009-09-05 17:12:52 EDT (Sat, 05 Sep 2009)
@@ -26,7 +26,6 @@
 //[example_overlap_counter
 #include <stdio.h>
 #include <iostream>
-#include <boost/itl/type_traits/to_string.hpp>
 #include <boost/itl/split_interval_map.hpp>
 
 using namespace std;
Modified: sandbox/itl/libs/itl/example/party_/party.cpp
==============================================================================
--- sandbox/itl/libs/itl/example/party_/party.cpp	(original)
+++ sandbox/itl/libs/itl/example/party_/party.cpp	2009-09-05 17:12:52 EDT (Sat, 05 Sep 2009)
@@ -10,7 +10,6 @@
 +-----------------------------------------------------------------------------*/
 #include <stdio.h>
 #include <iostream>
-#include <boost/itl/type_traits/to_string.hpp>
 #include <boost/itl/interval_map.hpp>
 #include "../toytime.hpp"
 
Modified: sandbox/itl/libs/itl/example/partys_height_average_/partys_height_average.cpp
==============================================================================
--- sandbox/itl/libs/itl/example/partys_height_average_/partys_height_average.cpp	(original)
+++ sandbox/itl/libs/itl/example/partys_height_average_/partys_height_average.cpp	2009-09-05 17:12:52 EDT (Sat, 05 Sep 2009)
@@ -27,7 +27,6 @@
 // and a few lines of adapter code.
 #include <boost/itl/ptime.hpp> 
 
-#include <boost/itl/type_traits/to_string.hpp>
 #include <boost/itl/interval_map.hpp>
 #include <boost/itl/split_interval_map.hpp>
 
Modified: sandbox/itl/libs/itl/example/partys_tallest_guests_/partys_tallest_guests.cpp
==============================================================================
--- sandbox/itl/libs/itl/example/partys_tallest_guests_/partys_tallest_guests.cpp	(original)
+++ sandbox/itl/libs/itl/example/partys_tallest_guests_/partys_tallest_guests.cpp	2009-09-05 17:12:52 EDT (Sat, 05 Sep 2009)
@@ -31,7 +31,6 @@
 // and a few lines of adapter code.
 #include <boost/itl/ptime.hpp> 
 
-#include <boost/itl/type_traits/to_string.hpp>
 #include <boost/itl/interval_map.hpp>
 #include <boost/itl/split_interval_map.hpp>
 
Modified: sandbox/itl/libs/itl/example/user_groups_/user_groups.cpp
==============================================================================
--- sandbox/itl/libs/itl/example/user_groups_/user_groups.cpp	(original)
+++ sandbox/itl/libs/itl/example/user_groups_/user_groups.cpp	2009-09-05 17:12:52 EDT (Sat, 05 Sep 2009)
@@ -38,7 +38,6 @@
 // and a few lines of adapter code.
 #include <boost/itl/gregorian.hpp> 
 
-#include <boost/itl/type_traits/to_string.hpp>
 #include <boost/itl/split_interval_map.hpp>
 
 using namespace std;
Modified: sandbox/itl/libs/itl_xt/example/toytime.h
==============================================================================
--- sandbox/itl/libs/itl_xt/example/toytime.h	(original)
+++ sandbox/itl/libs/itl_xt/example/toytime.h	2009-09-05 17:12:52 EDT (Sat, 05 Sep 2009)
@@ -1,29 +1,11 @@
-/*-----------------------------------------------------------------------------+    
+/*-----------------------------------------------------------------------------+
+Copyright (c) 2007-2009: Joachim Faulhaber
++------------------------------------------------------------------------------+
 Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
 +------------------------------------------------------------------------------+
-Boost Software License - Version 1.0 - August 17th, 2003
-
-Permission is hereby granted, free of charge, to any person or organization
-obtaining a copy of the software and accompanying documentation covered by
-this license (the "Software") to use, reproduce, display, distribute,
-execute, and transmit the Software, and to prepare derivative works of the
-Software, and to permit third-parties to whom the Software is furnished to
-do so, all subject to the following:
-
-The copyright notices in the Software and this entire statement, including
-the above license grant, this restriction and the following disclaimer,
-must be included in all copies of the Software, in whole or in part, and
-all derivative works of the Software, unless such copies or derivative
-works are solely in the form of machine-executable object code generated by
-a source language processor.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
-FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
+   Distributed under the Boost Software License, Version 1.0.
+      (See accompanying file LICENCE.txt or copy at
+           http://www.boost.org/LICENSE_1_0.txt)
 +-----------------------------------------------------------------------------*/
 
 namespace boost{namespace itl
@@ -71,5 +53,12 @@
 bool operator == (const Time& x1, const Time& x2) { return x1.asInt() == x2.asInt(); } 
 bool operator <= (const Time& x1, const Time& x2) { return x1.asInt() <= x2.asInt(); } 
 
+template<class CharType, class CharTraits>
+std::basic_ostream<CharType, CharTraits>& operator <<
+  (std::basic_ostream<CharType, CharTraits> &stream, Time const& time)
+{
+    return stream << time.as_string();
+}
+
 }} // namespace itl boost