Utils: added documentation for format::IndentHelper
tho [Thu, 1 Apr 2010 15:10:36 +0000 (15:10 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1590 270642c3-0616-0410-b53a-bc976706d245

senf/PPI/ActiveFeeder.test.cc
senf/Utils/Format.cci
senf/Utils/Format.hh
senf/Utils/Format.test.cc

index 4418d55..54d0472 100644 (file)
@@ -32,7 +32,6 @@
 #include "Setup.hh"
 #include "CloneSource.hh"
 #include <senf/Scheduler/Scheduler.hh>
-#include <senf/Utils/membind.hh>
 
 #include <senf/Utils/auto_unit_test.hh>
 #include <boost/test/test_tools.hpp>
@@ -44,14 +43,10 @@ namespace ppi = senf::ppi;
 namespace module = senf::ppi::module;
 namespace scheduler = senf::scheduler;
 
-namespace {
-    void timeout() {
-        scheduler::terminate();
-    }
-    
+namespace {   
     void run(senf::ClockService::clock_type t) {
-        scheduler::TimerEvent timeoutTimer ("timeoutTimer", &timeout,
-                senf::ClockService::now() + t);
+        scheduler::TimerEvent timeout(
+                "test-timeout", &scheduler::terminate, scheduler::now() + t);
         ppi::run();
     }
 }
index ff8f87b..c74c184 100644 (file)
@@ -30,6 +30,9 @@
 #define prefix_ inline
 ///////////////////////////////cci.p///////////////////////////////////////
 
+///////////////////////////////////////////////////////////////////////////
+// senf::format::eng
+
 prefix_ senf::format::eng::eng(float v, float d)
     : v_ (v), d_ (d), haveWidth_ (false), width_ (0), havePrecision_ (false), precision_ (0),
       haveFill_ (false), fill_ (' '), mask_ (), flags_ ()
@@ -150,13 +153,44 @@ prefix_ senf::format::eng const & senf::format::eng::right()
     return *this;
 }
 
+///////////////////////////////////////////////////////////////////////////
+// senf::format::IndentHelper
+
+prefix_ senf::format::IndentHelper::IndentHelper()
+    : instance_level(1) 
+{
+    ++static_level; 
+}
+
+prefix_ senf::format::IndentHelper::~IndentHelper()
+{
+    static_level -= instance_level; 
+}
+
+prefix_ void senf::format::IndentHelper::increase()
+{
+    ++static_level; 
+    ++instance_level; 
+}
+
+prefix_ unsigned int senf::format::IndentHelper::level() 
+    const
+{ 
+    return static_level; 
+}
+
 prefix_ std::ostream & senf::format::operator<<(std::ostream & os, senf::format::IndentHelper const & indent)
 {
-    for (unsigned int i = 0; i < indent.static_level; ++i)
+    for (unsigned int i=0, j=indent.level(); i<j; ++i)
         os << "  ";
     return os;
 }
 
+
+
+
+
+
 ///////////////////////////////cci.e///////////////////////////////////////
 #undef prefix_
 
index 180c39e..f21ff05 100644 (file)
@@ -204,18 +204,55 @@ namespace format {
 
 #endif
     
+    /** \brief Helper class to easily achieve indent levels
+       
+        This class helps to achieve indent levels across function calls. Every instance 
+        increases the static indent level. On destruction the level is decreased to the level
+        before the instance.
+        The following example illustrates the use of this class:
+        \code
+            void f1() {
+                senf::format::IndentHelper indent;
+                std::cout << indent << "f1\n";
+            }
+            void f2() {
+                senf::format::IndentHelper indent;
+                std::cout << indent << "f2 begin\n";
+                f1();
+                std::cout << indent << "f2 end\n";
+            }
+            f2()
+        \endcode 
+        Output:
+        <pre>
+            f2 begin
+              f1
+            f2 end
+        </pre>
+        Here <tt>f1()</tt> and <tt>f2()</tt> don't need to know to current indent level, 
+        they just increase the level by instantiating IndentHelper.
+    
+        \ingroup senf_utils_format
+     */
     class IndentHelper
     {
         static unsigned int static_level;
-
         unsigned int instance_level;
     public:
-        IndentHelper () : instance_level(1) { ++static_level; }
-        ~IndentHelper () { static_level -= instance_level; }
-        void increase() { ++static_level; ++instance_level; }
-
-        friend std::ostream & operator<<(std::ostream & os, IndentHelper const & indent);
+        
+        IndentHelper();                 ///< Construct new IndentHelper instance
+                                        /**< The static indent level is increased by one. */
+        ~IndentHelper();                ///< Destruct IndentHelper instance
+                                        /**< The static indent level will be decreased to the
+                                             level before the instance. */
+        void increase();                ///< Increase the indent level
+                                        /**< The indent level of the instance is increases by one. */
+        unsigned int level() const;     ///< return the current indent level
     };
+    
+    /** \brief Output indent to given ostream
+        \related IndentHelper
+     */
     std::ostream & operator<<(std::ostream & os, IndentHelper const & indent);
 
 }}
index ece8647..8dd4bae 100644 (file)
@@ -149,6 +149,31 @@ SENF_AUTO_UNIT_TEST(dumpint)
 #   undef CheckFormat
 }
 
+namespace {
+    void f1(std::ostream & os) {
+        senf::format::IndentHelper indent;
+        os << indent << "f1\n";
+    }
+    void f2(std::ostream & os) {
+        senf::format::IndentHelper indent;
+        os << indent << "f2_1\n";
+        f1( os);
+        os << indent << "f2_2\n";
+        indent.increase();
+        os << indent << "f2_3\n";
+    }
+}
+SENF_AUTO_UNIT_TEST(indent)
+{
+    std::stringstream ss;
+    f2(ss);
+    BOOST_CHECK_EQUAL( ss.str(), 
+            "  f2_1\n"
+            "    f1\n"
+            "  f2_2\n"
+            "    f2_3\n");
+}
+
 ///////////////////////////////cc.e////////////////////////////////////////
 #undef prefix_