X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FFormat.hh;h=f21ff0511ba33e5a523c669ca2827a57125ea125;hb=209950ee5f6898978cd68614ef339ae3531c5c53;hp=7e0b36487e30fe78796303d27871ce59d58c7af4;hpb=c9d8ba8de7801af854581eb9e175d7b4f19ece3d;p=senf.git diff --git a/senf/Utils/Format.hh b/senf/Utils/Format.hh index 7e0b364..f21ff05 100644 --- a/senf/Utils/Format.hh +++ b/senf/Utils/Format.hh @@ -193,8 +193,67 @@ namespace format { template std::string dumpint(T const & v, typename boost::enable_if >::type * = 0); + + template + std::string dumpint(T const & v, + typename boost::enable_if >::type * = 0); + + template + std::string dumpint(T const & v, + 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); }}