30 void ROOT::Experimental::RPrintVisitor::SetDeepestLevel(
int d) {
32 fFlagForVerticalLines.resize(d - 1);
35 void ROOT::Experimental::RPrintVisitor::SetNumFields(
int n) {
37 SetAvailableSpaceForStrings();
40 std::string ROOT::Experimental::RPrintVisitor::MakeKeyString(
const Detail::RFieldBase &field,
int level)
42 std::string result{
""};
45 result += std::to_string(field.GetLevelInfo().GetOrder());
47 if (field.GetLevelInfo().GetOrder() == field.GetLevelInfo().GetNumSiblings()) { fFlagForVerticalLines.at(level-2) =
false;
49 fFlagForVerticalLines.at(level-2) =
true;
51 for(
int i = 0; i < level-2; ++i) {
52 if (fFlagForVerticalLines.at(i)) {
58 result +=
"|__Field ";
59 result += RNTupleFormatter::HierarchialFieldOrder(field);
64 std::string ROOT::Experimental::RPrintVisitor::MakeValueString(
const Detail::RFieldBase &field)
66 std::string nameAndType{field.GetName() +
" (" + field.GetType() +
")"};
71 void ROOT::Experimental::RPrintVisitor::VisitField(
const Detail::RFieldBase &field,
int level)
75 for (
int i = 0; i < fWidth; ++i) {
76 fOutput << fFrameSymbol;
80 fOutput << fFrameSymbol <<
' ';
81 fOutput << RNTupleFormatter::FitString(MakeKeyString(field, level), fAvailableSpaceKeyString);
83 fOutput << RNTupleFormatter::FitString(MakeValueString(field), fAvailableSpaceValueString);
84 fOutput << fFrameSymbol << std::endl;
90 void ROOT::Experimental::RPrepareVisitor::VisitField(
const Detail::RFieldBase &,
int level)
93 if (level > fDeepestLevel)
94 fDeepestLevel = level;
100 std::string ROOT::Experimental::RNTupleFormatter::FitString(
const std::string &str,
int availableSpace) {
101 int strSize{
static_cast<int>(str.size())};
102 if (strSize <= availableSpace)
103 return str + std::string(availableSpace - strSize,
' ');
104 else if (availableSpace < 3)
105 return std::string(availableSpace,
'.');
106 return std::string(str, 0, availableSpace - 3) +
"...";
110 std::string ROOT::Experimental::RNTupleFormatter::HierarchialFieldOrder(
const ROOT::Experimental::Detail::RFieldBase &field)
112 std::string hierarchialOrder{std::to_string(field.GetLevelInfo().GetOrder())};
113 const ROOT::Experimental::Detail::RFieldBase* parentPtr{field.GetParent()};
115 while (parentPtr && (parentPtr->GetLevelInfo().GetOrder() != -1)) {
116 hierarchialOrder = std::to_string(parentPtr->GetLevelInfo().GetOrder()) +
"." + hierarchialOrder;
117 parentPtr = parentPtr->GetParent();
119 return hierarchialOrder;