︙ | | | ︙ | |
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#endif
#ifdef OF_ATOMIC_OPS
# import "atomic.h"
#else
# import "threading.h"
#endif
struct pre_ivar {
void **memchunks;
size_t memchunks_size;
int32_t retain_count; /* int32_t because atomic ops use int32_t */
#ifndef OF_ATOMIC_OPS
of_spinlock_t retain_spinlock;
|
>
>
>
>
>
>
>
|
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#endif
#ifdef OF_ATOMIC_OPS
# import "atomic.h"
#else
# import "threading.h"
#endif
/* A few macros to reduce #ifdefs */
#ifndef OF_APPLE_RUNTIME
# define class_getInstanceSize class_get_instance_size
# define class_getName class_get_name
# define class_getSuperclass class_get_super_class
#endif
struct pre_ivar {
void **memchunks;
size_t memchunks_size;
int32_t retain_count; /* int32_t because atomic ops use int32_t */
#ifndef OF_ATOMIC_OPS
of_spinlock_t retain_spinlock;
|
︙ | | | ︙ | |
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
+ (void)initialize
{
}
+ alloc
{
OFObject *instance;
#ifdef OF_APPLE_RUNTIME
size_t isize = class_getInstanceSize(self);
#else
size_t isize = class_get_instance_size(self);
#endif
if ((instance = malloc(isize + PRE_IVAR_ALIGN)) == NULL) {
alloc_failed_exception.isa = [OFAllocFailedException class];
@throw (OFAllocFailedException*)&alloc_failed_exception;
}
((struct pre_ivar*)instance)->memchunks = NULL;
|
<
<
<
<
|
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
+ (void)initialize
{
}
+ alloc
{
OFObject *instance;
size_t isize = class_getInstanceSize(self);
if ((instance = malloc(isize + PRE_IVAR_ALIGN)) == NULL) {
alloc_failed_exception.isa = [OFAllocFailedException class];
@throw (OFAllocFailedException*)&alloc_failed_exception;
}
((struct pre_ivar*)instance)->memchunks = NULL;
|
︙ | | | ︙ | |
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
|
+ (Class)class
{
return self;
}
+ (const char*)className
{
#ifdef OF_APPLE_RUNTIME
return class_getName(self);
#else
return class_get_class_name(self);
#endif
}
+ (BOOL)isSubclassOfClass: (Class)class
{
Class iter;
#ifdef OF_APPLE_RUNTIME
for (iter = self; iter != Nil; iter = class_getSuperclass(iter))
#else
for (iter = self; iter != Nil; iter = class_get_super_class(iter))
#endif
if (iter == class)
return YES;
return NO;
}
+ (Class)superclass
{
#ifdef OF_APPLE_RUNTIME
return class_getSuperclass(self);
#else
return class_get_super_class(self);
#endif
}
+ (BOOL)instancesRespondToSelector: (SEL)selector
{
#ifdef OF_APPLE_RUNTIME
return class_respondsToSelector(self, selector);
#else
|
<
<
<
<
<
<
<
<
<
<
<
<
|
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
|
+ (Class)class
{
return self;
}
+ (const char*)className
{
return class_getName(self);
}
+ (BOOL)isSubclassOfClass: (Class)class
{
Class iter;
for (iter = self; iter != Nil; iter = class_getSuperclass(iter))
if (iter == class)
return YES;
return NO;
}
+ (Class)superclass
{
return class_getSuperclass(self);
}
+ (BOOL)instancesRespondToSelector: (SEL)selector
{
#ifdef OF_APPLE_RUNTIME
return class_respondsToSelector(self, selector);
#else
|
︙ | | | ︙ | |
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
|
#endif
}
- (BOOL)isKindOfClass: (Class)class
{
Class iter;
#ifdef OF_APPLE_RUNTIME
for (iter = isa; iter != Nil; iter = class_getSuperclass(iter))
#else
for (iter = isa; iter != Nil; iter = class_get_super_class(iter))
#endif
if (iter == class)
return YES;
return NO;
}
- (BOOL)respondsToSelector: (SEL)selector
|
<
<
<
<
|
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
|
#endif
}
- (BOOL)isKindOfClass: (Class)class
{
Class iter;
for (iter = isa; iter != Nil; iter = class_getSuperclass(iter))
if (iter == class)
return YES;
return NO;
}
- (BOOL)respondsToSelector: (SEL)selector
|
︙ | | | ︙ | |