46 static std::map<ULong64_t, void *> declIDPrinterMap;
51 return PyObject_Repr(self);
57 if (0 == declIDPrinterMap.size()) {
58 std::string printerCode =
"namespace ROOT::Internal::Pythonizations::ValuePrinters"
60 " template<class T, ULong64_t> std::string ValuePrinter(void *obj)"
62 " return cling::printValue((T *)obj);"
70 std::string printResult;
72 if (
const auto classID =
GetClassID(className.c_str())) {
79 auto &printerFuncrPtr = declIDPrinterMap[classID];
81 if (!printerFuncrPtr) {
82 std::string printFuncName =
"ROOT::Internal::Pythonizations::ValuePrinters::ValuePrinter<" + className +
", " +
83 std::to_string(classID) +
">";
84 printerFuncrPtr = (
void *)
gInterpreter->Calc(printFuncName.c_str());
86 printResult = ((std::string(*)(
void *))printerFuncrPtr)(cppObj);
89 printResult =
gInterpreter->ToString(className.c_str(), cppObj);
92 if (printResult.find(
"@0x") == 0) {
94 return PyObject_Repr(self);
96 return PyUnicode_FromString(printResult.c_str());
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.