1/* 2 * This module is used in the unittests for object identity. 3 */ 4#include "Python.h" 5#include "pyobjc-api.h" 6 7#import <Foundation/Foundation.h> 8 9@interface OC_TestVoidPointer : NSObject 10{ 11 void* value; 12} 13 14-(void*)getvalue; 15-(void)setvalue:(void*)v; 16@end 17 18@implementation OC_TestVoidPointer 19-(instancetype)init 20{ 21 self = [super init]; 22 if (self) { 23 value = NULL; 24 } 25 return self; 26} 27-(void*)getvalue 28{ 29 return value; 30} 31-(void)setvalue:(void*)v 32{ 33 value = v; 34} 35@end 36 37static PyMethodDef mod_methods[] = { 38 { 0, 0, 0, 0 } 39}; 40 41#if PY_VERSION_HEX >= 0x03000000 42 43static struct PyModuleDef mod_module = { 44 PyModuleDef_HEAD_INIT, 45 "voidpointer", 46 NULL, 47 0, 48 mod_methods, 49 NULL, 50 NULL, 51 NULL, 52 NULL 53}; 54 55#define INITERROR() return NULL 56#define INITDONE() return m 57 58PyObject* PyInit_voidpointer(void); 59 60PyObject* 61PyInit_voidpointer(void) 62 63#else 64 65#define INITERROR() return 66#define INITDONE() return 67 68void initvoidpointer(void); 69 70void 71initvoidpointer(void) 72#endif 73{ 74 PyObject* m; 75 76 77#if PY_VERSION_HEX >= 0x03000000 78 m = PyModule_Create(&mod_module); 79#else 80 m = Py_InitModule4("voidpointer", mod_methods, 81 NULL, NULL, PYTHON_API_VERSION); 82#endif 83 if (!m) { 84 INITERROR(); 85 } 86 if (PyObjC_ImportAPI(m) < 0) { 87 INITERROR(); 88 } 89 90 if (PyModule_AddObject(m, "OC_TestVoidPointer", 91 PyObjCClass_New([OC_TestVoidPointer class])) < 0){ 92 INITERROR(); 93 } 94 95 INITDONE(); 96} 97