template <class T>
std::string dumpint(T const & v,
typename boost::enable_if<boost::is_unsigned<T> >::type * = 0);
+
+ template <class T>
+ std::string dumpint(T const & v,
+ typename boost::enable_if<boost::is_signed<typename T::value_type> >::type * = 0);
+
+ template <class T>
+ std::string dumpint(T const & v,
+ typename boost::enable_if<boost::is_unsigned<typename T::value_type> >::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:
+ <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(); ///< 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);
}}