2626#include < boost/property_tree/ptree.hpp>
2727#include < boost/functional/hash.hpp>
2828#include < functional>
29+ #include < format>
2930#ifdef NDEBUG
3031#undef NDEBUG
3132#endif
@@ -35,16 +36,25 @@ using namespace o2::conf;
3536
3637// ----------------------------------------------------------------------
3738
38- std::string ParamDataMember::toString (std::string const & prefix, bool showProv) const
39+ std::string ParamDataMember::toString (std::string const & prefix, bool showProv, size_t padding ) const
3940{
40- std::string nil = " <null>" ;
41-
41+ const std::string label = prefix + " ." + name + " : " + value;
4242 std::ostringstream out;
43- out << prefix << " . " << name << " : " << value ;
43+ out << label ;
4444
4545 if (showProv) {
46- std::string prov = (provenance.compare (" " ) == 0 ? nil : provenance);
47- out << " \t\t [ " + prov + " ]" ;
46+ std::string prov = (provenance.compare (" " ) == 0 ? " <null>" : provenance);
47+ if (padding) {
48+ size_t len = label.size () - prefix.size () - 5 ; // 4 four the extra chars + 1 for the maxpad
49+ if (len < padding) {
50+ out << std::string (padding - len, ' ' );
51+ } else {
52+ out << ' ' ;
53+ }
54+ out << " [ " + prov + " ]" ;
55+ } else {
56+ out << " \t\t [ " + prov + " ]" ;
57+ }
4858 }
4959 return out.str ();
5060}
@@ -308,23 +318,40 @@ void _ParamHelper::fillKeyValuesImpl(std::string const& mainkey, TClass* cl, voi
308318
309319// ----------------------------------------------------------------------
310320
311- void _ParamHelper::printMembersImpl (std::string const & mainkey, std::vector<ParamDataMember> const * members, bool showProv, bool useLogger)
321+ void _ParamHelper::printMembersImpl (std::string const & mainkey, std::vector<ParamDataMember> const * members, bool showProv, bool useLogger, bool withPadding, bool showHash )
312322{
313323
314- _ParamHelper::outputMembersImpl (std::cout, mainkey, members, showProv, useLogger);
324+ _ParamHelper::outputMembersImpl (std::cout, mainkey, members, showProv, useLogger, withPadding, showHash );
315325}
316326
317- void _ParamHelper::outputMembersImpl (std::ostream& out, std::string const & mainkey, std::vector<ParamDataMember> const * members, bool showProv, bool useLogger)
327+ void _ParamHelper::outputMembersImpl (std::ostream& out, std::string const & mainkey, std::vector<ParamDataMember> const * members, bool showProv, bool useLogger, bool withPadding, bool showHash )
318328{
319329 if (members == nullptr ) {
320330 return ;
321331 }
322332
333+ size_t maxpad{0 };
334+ if (withPadding) {
335+ for (auto & member : *members) {
336+ maxpad = std::max (maxpad, member.name .size () + member.value .size ());
337+ }
338+ }
339+
340+ if (showHash) {
341+ std::string shash = std::format (" {:07x}" , getHashImpl (mainkey, members));
342+ shash = shash.substr (0 , 7 );
343+ if (useLogger) {
344+ LOG (info) << mainkey << " [Hash#" << shash << " ]" ;
345+ } else {
346+ out << mainkey << " [Hash#" << shash << " ]\n " ;
347+ }
348+ }
349+
323350 for (auto & member : *members) {
324351 if (useLogger) {
325- LOG (info) << member.toString (mainkey, showProv);
352+ LOG (info) << member.toString (mainkey, showProv, maxpad );
326353 } else {
327- out << member.toString (mainkey, showProv) << " \n " ;
354+ out << member.toString (mainkey, showProv, maxpad ) << " \n " ;
328355 }
329356 }
330357}
0 commit comments