432 if (!TPython::CPPInstance_Check(pyobj)) {
442 void *
obj = TPython::CPPInstance_AsVoidPtr(pyobj);
444 if (!strcmp(tcls->GetName(),
"string")) {
445 std::string *
str = (std::string*)
obj;
446 return PyUnicode_FromString(
str->c_str());
449 TString tstring = tcls->GetName();
450 if (tstring.BeginsWith(
"pair<") ||
451 tstring.BeginsWith(
"std::pair<")) {
453 PyObject *
v0 = PyObject_GetAttrString(pyobj,
"first");
454 PyObject *v1 = PyObject_GetAttrString(pyobj,
"second");
463 if (is_sequence(pyobj)) {
464 if (!strcmp(tcls->GetName(),
"CLHEP::Hep3Vector")) {
473 TList *members = tcls->GetListOfDataMembers();
474 const Int_t nmembers = members->GetEntries();
476 PyObject *py_members = PyList_New(nmembers+hdr);
477 #if PYROOT_INSPECTOR_DBG
478 std::cerr <<
"==[" << tcls->GetName() <<
"]== (#mbrs:"
481 <<
" #py-sz:" << PyList_Size(py_members)
487 const Py_ssize_t nelems = PySequence_Size(pyobj);
488 #if PYROOT_INSPECTOR_DBG
489 std::cerr <<
"== sequence (" << nelems <<
")...\n";
491 PyObject *py_elems = PyList_New(nelems);
492 for (Py_ssize_t
i = 0;
i < nelems; ++
i) {
493 PyObject *itr = PySequence_GetItem(pyobj,
i);
495 PyList_SET_ITEM(py_elems,
i, itr_pyroot);
500 PyList_SET_ITEM(py_members, 0, py_elems);
501 #if PYROOT_INSPECTOR_DBG
502 std::cerr <<
"== sequence (" << nelems <<
")... content:\n"
503 << ::to_str(py_elems)
505 std::cerr <<
"== sequence (" << nelems <<
")... [done]\n";
510 for (Int_t j = 0; j<nmembers; ++j) {
511 TDataMember *mbr = (TDataMember*)(members->At(j));
512 Int_t
offset = mbr->GetOffset();
515 #if PYROOT_INSPECTOR_DBG
516 TClass *mbr_cls = TClass::GetClass(mbr->GetTypeName());
517 std::cerr <<
"==[" << j <<
"] - [" << mbr->GetTypeName() <<
"] "
518 <<
"[" << mbr->GetName()
520 <<
"[" << (mbr_cls ? mbr_cls->GetName() :
"N/A") <<
"]\n";
525 if (persistentOnly && !mbr->IsPersistent())
527 if (mbr->IsaPointer())
529 if (mbr->IsBasic()) {
530 TDataType * mbr_type = mbr->GetDataType();
531 EDataType mbr_dtype = (EDataType)mbr_type->GetType();
532 py_mbr = to_pyobj(ptr, mbr_dtype);
533 }
else if (mbr->IsEnum()) {
534 #if PYROOT_INSPECTOR_DBG
535 std::cerr <<
"==[" << mbr->GetTypeName() <<
"]["
536 << mbr->GetDataType()->GetType() <<
"][val="
537 << (*(
int*)ptr) <<
"]["
538 << mbr->GetName() <<
"] is an enum !!\n";
540 py_mbr = to_pyobj(ptr, kInt_t);
542 PyObject *pyroot_obj = TPython::CPPInstance_FromVoidPtr
548 Py_XDECREF(pyroot_obj);
551 std::cerr <<
"could not create py-object of type ["
552 << mbr->GetTypeName() <<
"] !\n";
553 Py_DECREF(py_members);
558 PyTuple_SET_ITEM(py_item, 0,
559 PyUnicode_FromString(mbr->GetName()));
560 PyTuple_SET_ITEM(py_item, 1, py_mbr);
561 PyList_SET_ITEM(py_members, j+hdr, py_item);
563 #if PYROOT_INSPECTOR_DBG
564 std::cerr <<
"==[" << tcls->GetName() <<
"]== (#mbrs:"
565 << nmembers <<
")... [done]\n";