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