1#include <Python.h>
2#include "pyobjc-api.h"
3
4#import <Foundation/Foundation.h>
5
6
7
8@interface OC_TestSet : NSObject {}
9@end
10
11@implementation OC_TestSet
12
13+(Class)classOf:(NSObject*)value
14{
15	return [value class];
16}
17
18/* copying */
19+(id)set:(NSSet*)set copyWithZone:(NSZone*)zone
20{
21	return [[set copyWithZone:zone] autorelease];
22}
23
24+(id)set:(NSSet*)set mutableCopyWithZone:(NSZone*)zone
25{
26	return [[set mutableCopyWithZone:zone] autorelease];
27}
28
29
30/* Base set */
31
32+(NSArray*)allObjectsOfSet:(NSSet*)set
33{
34	return [set allObjects];
35}
36
37+(id)anyObjectOfSet:(NSSet*)set
38{
39	return [set anyObject];
40}
41
42+(BOOL)set:(NSSet*)set containsObject:(id)anObject
43{
44	return [set containsObject:anObject];
45}
46
47+(NSUInteger)countOfSet:(NSSet*)set
48{
49	return [set count];
50}
51
52+(NSString*)descriptionOfSet:(NSSet*)set
53{
54	return [set description];
55}
56
57+(NSString*)set:(NSSet*)set descriptionWithLocale:(id)locale
58{
59	return [set descriptionWithLocale:locale];
60}
61
62
63+(NSSet*)set:(NSSet*)set filteredSetUsingPredicate:(NSPredicate*)predicate
64{
65	return [set filteredSetUsingPredicate:predicate];
66}
67
68+(BOOL)set:(NSMutableSet*)set intersectsSet:(NSSet *)otherSet
69{
70	return [set intersectsSet:otherSet];
71}
72
73+(BOOL)set:(NSSet*)set isEqualToSet:(NSSet*)otherSet
74{
75	return [set isEqualToSet:otherSet];
76}
77
78+(BOOL)set:(NSSet*)set isSubsetOfSet:(NSSet*)otherSet
79{
80	return [set isSubsetOfSet:otherSet];
81}
82
83+(void)set:(NSSet*)set makeObjectsPerformSelector:(SEL)aSelector
84{
85	return [set makeObjectsPerformSelector:aSelector];
86}
87
88+(void)set:(NSSet*)set makeObjectsPerformSelector:(SEL)aSelector withObject:(id)anObject
89{
90	return [set makeObjectsPerformSelector:aSelector withObject:anObject];
91}
92
93+(id)set:(NSSet*)set member:(id)anObject
94{
95	return [set member:anObject];
96}
97
98+(NSEnumerator*)objectEnumeratorOfSet:(NSSet*)set
99{
100	return [set objectEnumerator];
101}
102
103+(NSSet*)set:(NSSet*)set setByAddingObject:(id)anObject
104{
105	return [set setByAddingObject:anObject];
106}
107
108+(NSSet*)set:(NSSet*)set setByAddingObjectsFromArray:(NSArray*)anObject
109{
110	return [set setByAddingObjectsFromArray:anObject];
111}
112
113+(NSSet*)set:(NSSet*)set setByAddingObjectsFromSet:(NSSet*)anObject
114{
115	return [set setByAddingObjectsFromSet:anObject];
116}
117
118+(void)set:(NSSet*)set setValue:(id)value forKey:(id)key
119{
120	[set setValue:value forKey:key];
121}
122
123+(id)set:(NSSet*)set valueForKey:(id)key
124{
125	return [set valueForKey:key];
126}
127
128/* Mutable set */
129
130+(void)set:(NSMutableSet*)set addObject:(id)anObject
131{
132	[set addObject:anObject];
133}
134
135+(void)set:(NSMutableSet*)set addObjectsFromArray:(NSArray *)anArray
136{
137	[set addObjectsFromArray:anArray];
138}
139
140+(void)set:(NSMutableSet*)set filterUsingPredicate:(NSPredicate *)predicate
141{
142	[set filterUsingPredicate:predicate];
143}
144
145+(void)set:(NSMutableSet*)set intersectSet:(NSSet *)otherSet
146{
147	[set intersectSet:otherSet];
148}
149
150+(void)set:(NSMutableSet*)set minusSet:(NSSet *)otherSet
151{
152	[set minusSet:otherSet];
153}
154
155+(void)removeAllObjecsFromSet:(NSMutableSet*)set
156{
157	[set removeAllObjects];
158}
159
160+(void)set:(NSMutableSet*)set removeObject:(id)anObject
161{
162	[set removeObject:anObject];
163}
164
165+(void)set:(NSMutableSet*)set setSet:(NSSet *)otherSet
166{
167	[set setSet:otherSet];
168}
169
170+(void)set:(NSMutableSet*)set unionSet:(NSSet *)otherSet
171{
172	[set unionSet:otherSet];
173}
174
175
176
177@end
178
179
180static PyMethodDef mod_methods[] = {
181	        { 0, 0, 0, 0 }
182};
183
184#if PY_VERSION_HEX >= 0x03000000
185
186static struct PyModuleDef mod_module = {
187	PyModuleDef_HEAD_INIT,
188	"pythonset",
189	NULL,
190	0,
191	mod_methods,
192	NULL,
193	NULL,
194	NULL,
195	NULL
196};
197
198#define INITERROR() return NULL
199#define INITDONE() return m
200
201PyObject* PyInit_pythonset(void);
202
203PyObject*
204PyInit_pythonset(void)
205
206#else
207
208#define INITERROR() return
209#define INITDONE() return
210
211void initpythonset(void);
212
213void
214initpythonset(void)
215#endif
216{
217	PyObject* m;
218
219#if PY_VERSION_HEX >= 0x03000000
220	m = PyModule_Create(&mod_module);
221#else
222	m = Py_InitModule4("pythonset", mod_methods,
223		NULL, NULL, PYTHON_API_VERSION);
224#endif
225	if (!m) {
226		INITERROR();
227	}
228
229	if (PyObjC_ImportAPI(m) < 0) {
230		INITERROR();
231	}
232
233	if (PyModule_AddObject(m, "OC_TestSet",
234	    PyObjCClass_New([OC_TestSet class])) < 0) {
235		INITERROR();
236	}
237
238	INITDONE();
239}
240