X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FFormat.hh;h=f21ff0511ba33e5a523c669ca2827a57125ea125;hb=209950ee5f6898978cd68614ef339ae3531c5c53;hp=7c6e42482e5e43dae9691639c28a4f4d2276332b;hpb=cf48e83de9d4793ca5bd67d1e5acdb5b20968638;p=senf.git diff --git a/senf/Utils/Format.hh b/senf/Utils/Format.hh index 7c6e424..f21ff05 100644 --- a/senf/Utils/Format.hh +++ b/senf/Utils/Format.hh @@ -203,6 +203,57 @@ namespace format { typename boost::enable_if >::type * = 0); #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: +
+            f2 begin
+              f1
+            f2 end
+        
+ Here f1() and f2() 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(); ///< 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); }}