4 #ifndef PYROOT_OBJECTPROXY_H
5 #define PYROOT_OBJECTPROXY_H
30 enum EFlags { kNone = 0x0, kIsOwner = 0x0001, kIsReference = 0x0002, kIsValue = 0x0004, kIsSmartPtr = 0x0008 };
33 void Set(
void* address, EFlags flags = kNone )
40 void SetSmartPtr (
void* address, Cppyy::TCppType_t ptrType )
42 fFlags |= kIsSmartPtr;
44 fSmartPtrType = ptrType;
47 void* GetObject()
const
53 if ( fFlags & kIsSmartPtr ) {
55 std::vector< Cppyy::TCppMethod_t > methods = Cppyy::GetMethodsFromName( fSmartPtrType,
"operator->",
true);
56 std::vector<TParameter> args;
57 return Cppyy::CallR( methods[0], fSmartPtr, &args );
60 if ( fObject && ( fFlags & kIsReference ) )
61 return *(
reinterpret_cast< void**
>(
const_cast< void*
>( fObject ) ));
63 return const_cast< void*
>( fObject );
66 Cppyy::TCppType_t ObjectIsA()
const
69 return ((PyRootClass*)Py_TYPE(
this))->fCppType;
72 void HoldOn() { fFlags |= kIsOwner; }
73 void Release() { fFlags &= ~kIsOwner; }
80 Cppyy::TCppType_t fSmartPtrType;
88 R__EXTERN PyTypeObject ObjectProxy_Type;
90 template<
typename T >
91 inline Bool_t ObjectProxy_Check( T*
object )
93 return object && PyObject_TypeCheck(
object, &ObjectProxy_Type );
96 template<
typename T >
97 inline Bool_t ObjectProxy_CheckExact( T*
object )
99 return object && Py_TYPE(
object) == &ObjectProxy_Type;
104 void op_dealloc_nofree( ObjectProxy* );
108 #endif // !PYROOT_OBJECTPROXY_H