447 if (!TPython::CPPInstance_Check(pyobj)) {
457 void *
obj = TPython::CPPInstance_AsVoidPtr(pyobj);
459 if (!strcmp(tcls->GetName(),
"string")) {
460 std::string *
str = (std::string*)
obj;
461 return PyUnicode_FromString(
str->c_str());
464 TString tstring = tcls->GetName();
465 if (tstring.BeginsWith(
"pair<") ||
466 tstring.BeginsWith(
"std::pair<")) {
468 PyObject *
v0 = PyObject_GetAttrString(pyobj,
"first");
469 PyObject *v1 = PyObject_GetAttrString(pyobj,
"second");
478 if (CPyCppyy::Sequence_Check(pyobj)) {
479 if (!strcmp(tcls->GetName(),
"CLHEP::Hep3Vector")) {
488 TList *members = tcls->GetListOfDataMembers();
489 const Int_t nmembers = members->GetEntries();
491 PyObject *py_members = PyList_New(nmembers+hdr);
492 #if PYROOT_INSPECTOR_DBG
493 std::cerr <<
"==[" << tcls->GetName() <<
"]== (#mbrs:"
496 <<
" #py-sz:" << PyList_Size(py_members)
502 const Py_ssize_t nelems = PySequence_Size(pyobj);
503 #if PYROOT_INSPECTOR_DBG
504 std::cerr <<
"== sequence (" << nelems <<
")...\n";
506 PyObject *py_elems = PyList_New(nelems);
507 for (Py_ssize_t
i = 0;
i < nelems; ++
i) {
508 PyObject *itr = PySequence_GetItem(pyobj,
i);
510 PyList_SET_ITEM(py_elems,
i, itr_pyroot);
515 PyList_SET_ITEM(py_members, 0, py_elems);
516 #if PYROOT_INSPECTOR_DBG
517 std::cerr <<
"== sequence (" << nelems <<
")... content:\n"
518 << ::to_str(py_elems)
520 std::cerr <<
"== sequence (" << nelems <<
")... [done]\n";
525 for (Int_t j = 0; j<nmembers; ++j) {
526 TDataMember *mbr = (TDataMember*)(members->At(j));
527 Int_t
offset = mbr->GetOffset();
530 #if PYROOT_INSPECTOR_DBG
531 TClass *mbr_cls = TClass::GetClass(mbr->GetTypeName());
532 std::cerr <<
"==[" << j <<
"] - [" << mbr->GetTypeName() <<
"] "
533 <<
"[" << mbr->GetName()
535 <<
"[" << (mbr_cls ? mbr_cls->GetName() :
"N/A") <<
"]\n";
540 if (persistentOnly && !mbr->IsPersistent())
542 if (mbr->IsaPointer())
544 if (mbr->IsBasic()) {
545 TDataType * mbr_type = mbr->GetDataType();
546 EDataType mbr_dtype = (EDataType)mbr_type->GetType();
547 py_mbr = to_pyobj(
ptr, mbr_dtype);
548 }
else if (mbr->IsEnum()) {
549 #if PYROOT_INSPECTOR_DBG
550 std::cerr <<
"==[" << mbr->GetTypeName() <<
"]["
551 << mbr->GetDataType()->GetType() <<
"][val="
552 << (*(
int*)
ptr) <<
"]["
553 << mbr->GetName() <<
"] is an enum !!\n";
555 py_mbr = to_pyobj(
ptr, kInt_t);
557 PyObject *pyroot_obj = TPython::CPPInstance_FromVoidPtr
563 Py_XDECREF(pyroot_obj);
566 std::cerr <<
"could not create py-object of type ["
567 << mbr->GetTypeName() <<
"] !\n";
568 Py_DECREF(py_members);
573 PyTuple_SET_ITEM(py_item, 0,
574 PyUnicode_FromString(mbr->GetName()));
575 PyTuple_SET_ITEM(py_item, 1, py_mbr);
576 PyList_SET_ITEM(py_members, j+hdr, py_item);
578 #if PYROOT_INSPECTOR_DBG
579 std::cerr <<
"==[" << tcls->GetName() <<
"]== (#mbrs:"
580 << nmembers <<
")... [done]\n";