1#ifndef PyObjC_OBJC_OBJECT_H
2#define PyObjC_OBJC_OBJECT_H
3
4#define PyObjCObject_kDEFAULT 0x00
5#define PyObjCObject_kUNINITIALIZED 	0x01
6#define PyObjCObject_kCLASSIC 		0x02
7#define PyObjCObject_kDEALLOC_HELPER	0x04
8#define PyObjCObject_kSHOULD_NOT_RELEASE      0x08
9#define PyObjCObject_kMAGIC_COOKIE      0x10
10#define PyObjCObject_kCFOBJECT      0x20
11#define PyObjCObject_kBLOCK      0x40
12
13typedef struct {
14	PyObject_HEAD
15	__strong id objc_object;
16	int 	    flags;
17} PyObjCObject;
18
19typedef struct {
20	PyObject_HEAD
21	__strong id objc_object;
22	int 	    flags;
23	PyObjCMethodSignature* signature;
24} PyObjCBlockObject;
25
26
27extern PyObjCClassObject PyObjCObject_Type;
28#define PyObjCObject_Check(obj) PyObject_TypeCheck(obj, (PyTypeObject*)&PyObjCObject_Type)
29
30PyObject* PyObjCObject_New(id objc_object, int flags, int retain);
31PyObject* PyObjCObject_FindSelector(PyObject* cls, SEL selector);
32id 	  PyObjCObject_GetObject(PyObject* object);
33void 	  PyObjCObject_ClearObject(PyObject* object);
34#define   PyObjCObject_GetObject(object) (((PyObjCObject*)(object))->objc_object)
35void _PyObjCObject_FreeDeallocHelper(PyObject* obj);
36PyObject* _PyObjCObject_NewDeallocHelper(id objc_object);
37#define PyObjCObject_GetFlags(object) (((PyObjCObject*)(object))->flags)
38#define PyObjCObject_IsClassic(object) (PyObjCObject_GetFlags(object) & PyObjCObject_kCLASSIC)
39#define PyObjCObject_IsBlock(object) (PyObjCObject_GetFlags(object) & PyObjCObject_kBLOCK)
40#define PyObjCObject_GetBlock(object) (((PyObjCBlockObject*)(object))->signature)
41#define PyObjCObject_SET_BLOCK(object, value) (((PyObjCBlockObject*)(object))->signature = (value))
42
43PyObject* PyObjCObject_NewTransient(id objc_object, int* cookie);
44void PyObjCObject_ReleaseTransient(PyObject* proxy, int cookie);
45
46#endif /* PyObjC_OBJC_OBJECT_H */
47