11 #ifndef ROOT_RDFDISPLAYER
12 #define ROOT_RDFDISPLAYER
29 std::string PrettyPrintAddr(
const void *
const addr);
31 class RDisplayElement {
33 enum class PrintingAction { ToBePrinted, ToBeIgnored, ToBeDotted };
34 std::string fRepresentation;
35 PrintingAction fPrintingAction;
38 RDisplayElement(
const std::string &representation);
44 bool IsIgnore()
const;
46 const std::string &GetRepresentation()
const;
66 friend class ROOT::Internal::RDF::DisplayHelper;
68 using VecStr_t = std::vector<std::string>;
69 using DElement_t = ROOT::Internal::RDF::RDisplayElement;
70 static constexpr
char fgSeparator =
' ';
71 static constexpr
unsigned fgMaxWidth = 80;
74 std::vector<bool> fIsCollection;
76 std::vector<std::vector<DElement_t>> fTable;
77 std::vector<unsigned short> fWidths;
79 VecStr_t fRepresentations;
80 std::vector<VecStr_t> fCollectionsRepresentations;
86 size_t fCurrentRow = 0;
88 size_t fCurrentColumn = 0;
99 template <typename T, typename std::enable_if<!ROOT::TypeTraits::IsContainer<T>::value,
int>::type = 0>
100 bool AddInterpreterString(std::stringstream &stream, T &element,
const int &index)
102 stream <<
"*((std::string*)" << ROOT::Internal::RDF::PrettyPrintAddr(&(fRepresentations[index]))
103 <<
") = cling::printValue((" << fTypes[index] <<
"*)" << ROOT::Internal::RDF::PrettyPrintAddr(&element) <<
");";
115 template <typename T, typename std::enable_if<ROOT::TypeTraits::IsContainer<T>::value,
int>::type = 0>
116 bool AddInterpreterString(std::stringstream &stream, T &collection,
const int &index)
118 size_t collectionSize = std::distance(std::begin(collection), std::end(collection));
120 fCollectionsRepresentations[index] = VecStr_t(collectionSize);
126 TClassEdit::GetSplit(fTypes[index].c_str(), output, nestedLoc);
129 for (
size_t i = 0; i < collectionSize; ++i) {
130 stream <<
"*((std::string*)" << ROOT::Internal::RDF::PrettyPrintAddr(&(fCollectionsRepresentations[index][i]))
131 <<
") = cling::printValue((" << output[1] <<
"*)" << ROOT::Internal::RDF::PrettyPrintAddr(&(collection[i])) <<
");";
138 void AddToRow(
const std::string &stringEle);
145 void AddCollectionToRow(
const VecStr_t &collection);
155 size_t GetNColumnsToShorten()
const;
159 template <
typename... Columns>
160 void AddRow(Columns... columns)
162 std::stringstream calc;
165 fIsCollection = {AddInterpreterString(calc, columns, columnIndex++)...};
168 ROOT::Internal::RDF::InterpreterCalc(calc.str(),
"Display");
171 for (
size_t i = 0; i < fNColumns; ++i) {
172 if (fIsCollection[i]) {
173 AddCollectionToRow(fCollectionsRepresentations[i]);
175 AddToRow(fRepresentations[i]);
184 bool HasNext() {
return fEntries > 0; }
186 void EnsureCurrentColumnWidth(
size_t w);
194 RDisplay(
const VecStr_t &columnNames,
const VecStr_t &types,
int entries);
205 std::string AsString()
const;