$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r60313 - trunk/libs/spirit/example/qi/scheme
From: joel_at_[hidden]
Date: 2010-03-07 11:09:51
Author: djowel
Date: 2010-03-07 11:09:50 EST (Sun, 07 Mar 2010)
New Revision: 60313
URL: http://svn.boost.org/trac/boost/changeset/60313
Log:
removed printing from utree API. printing should be user defined.
Text files modified: 
   trunk/libs/spirit/example/qi/scheme/utree.hpp      |    53 ----------------------                  
   trunk/libs/spirit/example/qi/scheme/utree_test.cpp |    93 ++++++++++++++++++++++++++++++++------- 
   2 files changed, 76 insertions(+), 70 deletions(-)
Modified: trunk/libs/spirit/example/qi/scheme/utree.hpp
==============================================================================
--- trunk/libs/spirit/example/qi/scheme/utree.hpp	(original)
+++ trunk/libs/spirit/example/qi/scheme/utree.hpp	2010-03-07 11:09:50 EST (Sun, 07 Mar 2010)
@@ -276,7 +276,6 @@
         };
     };
 
-    std::ostream& operator<<(std::ostream& out, utree const& val);
     bool operator==(utree const& a, utree const& b);
     bool operator<(utree const& a, utree const& b);
     bool operator!=(utree const& a, utree const& b);
@@ -588,52 +587,6 @@
         return bind_impl<F, X>(f, x);
     }
 
-    struct utree_print
-    {
-        typedef void result_type;
-        std::ostream& out;
-        utree_print(std::ostream& out)
-          : out(out) {}
-
-        void operator()(utree::nil) const
-        {
-            out << "nil";
-        }
-
-        template <typename T>
-        void operator()(T val) const
-        {
-            out << val;
-        }
-
-        void operator()(bool b) const
-        {
-            out << (b?"true":"false");
-        }
-
-        template <typename Iterator>
-        void operator()(boost::iterator_range<Iterator> const& range) const
-        {
-            // This code works for both strings and lists
-            typedef typename boost::iterator_range<Iterator>::const_iterator iterator;
-            bool const is_string = boost::is_pointer<Iterator>::value;
-            char const start = is_string ? '"' : '[';
-            char const end = is_string ? '"' : ']';
-
-            out << start;
-            for (iterator i = range.begin(); i != range.end(); ++i)
-            {
-                if (!is_string)
-                {
-                    if (i != range.begin())
-                        out << ", ";
-                }
-                out << *i;
-            }
-            out << end;
-        }
-    };
-
     struct utree_is_equal
     {
         typedef bool result_type;
@@ -966,12 +919,6 @@
         return detail::index_impl::apply(l.first, i);
     }
 
-    inline std::ostream& operator<<(std::ostream& out, utree const& val)
-    {
-        utree::visit(val, detail::utree_print(out));
-        return out;
-    }
-
     inline bool operator==(utree const& a, utree const& b)
     {
         return utree::visit(a, b, detail::utree_is_equal());
Modified: trunk/libs/spirit/example/qi/scheme/utree_test.cpp
==============================================================================
--- trunk/libs/spirit/example/qi/scheme/utree_test.cpp	(original)
+++ trunk/libs/spirit/example/qi/scheme/utree_test.cpp	2010-03-07 11:09:50 EST (Sun, 07 Mar 2010)
@@ -1,6 +1,65 @@
 #include "utree.hpp"
 #include <iostream>
 
+namespace
+{
+    void print(scheme::utree const& val, bool no_endl = false);
+    void print(char ch, bool ignored)
+    {
+        std::cout << ch;
+    }
+
+    struct simple_print
+    {
+        typedef void result_type;
+
+        void operator()(scheme::utree::nil) const
+        {
+            std::cout << "nil";
+        }
+
+        template <typename T>
+        void operator()(T val) const
+        {
+            std::cout << val;
+        }
+
+        void operator()(bool b) const
+        {
+            std::cout << (b?"true":"false");
+        }
+
+        template <typename Iterator>
+        void operator()(boost::iterator_range<Iterator> const& range) const
+        {
+            // This code works for both strings and lists
+            typedef typename boost::iterator_range<Iterator>::const_iterator iterator;
+            bool const is_string = boost::is_pointer<Iterator>::value;
+            char const start = is_string ? '"' : '(';
+            char const end = is_string ? '"' : ')';
+
+            std::cout << start;
+            for (iterator i = range.begin(); i != range.end(); ++i)
+            {
+                if (!is_string)
+                {
+                    if (i != range.begin())
+                        std::cout << ", ";
+                }
+                print(*i, true);
+            }
+            std::cout << end;
+        }
+    };
+
+    inline void print(scheme::utree const& val, bool no_endl)
+    {
+        scheme::utree::visit(val, simple_print());
+        if (!no_endl)
+            std::cout << std::endl;
+    }
+}
+
 int main()
 {
     using scheme::utree;
@@ -13,33 +72,33 @@
 
     {
         utree val;
-        std::cout << val << std::endl;
+        print(val);
     }
 
     {
         utree val(true);
-        std::cout << val << std::endl;
+        print(val);
     }
 
     {
         utree val(123);
-        std::cout << val << std::endl;
+        print(val);
     }
 
     {
         utree val(123.456);
-        std::cout << val << std::endl;
+        print(val);
     }
 
     {
         utree val("Hello, World");
-        std::cout << val << std::endl;
+        print(val);
         utree val2;
         val2 = val;
-        std::cout << val2 << std::endl;
+        print(val2);
         utree val3("Hello, World. Chuckie is back!!!");
         val = val3;
-        std::cout << val << std::endl;
+        print(val);
 
         utree val4("Apple");
         utree val5("Apple");
@@ -57,32 +116,32 @@
         val2.push_back(123.456);
         val2.push_back("Mah Doggie");
         val.push_back(val2);
-        std::cout << val << std::endl;
-        std::cout << val.front() << std::endl;
+        print(val);
+        print(val.front());
 
         utree val3;
         val3.swap(val);
-        std::cout << val << std::endl;
+        print(val);
         val3.swap(val);
-        std::cout << val << std::endl;
+        print(val);
         val.push_back("Ba Ba Black Sheep");
-        std::cout << val << std::endl;
+        print(val);
         val.pop_front();
-        std::cout << val << std::endl;
+        print(val);
         utree::iterator i = val.begin();
         ++++i;
         val.insert(i, "Right in the middle");
         BOOST_ASSERT(val.size() == 4);
-        std::cout << val << std::endl;
+        print(val);
         val.pop_back();
-        std::cout << val << std::endl;
+        print(val);
         BOOST_ASSERT(val.size() == 3);
         val.erase(val.end());
-        std::cout << val << std::endl;
+        print(val);
         BOOST_ASSERT(val.size() == 2);
 
         val.insert(val.begin(), val2.begin(), val2.end());
-        std::cout << val << std::endl;
+        print(val);
     }
 
     {