68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
extern struct stret of_forward_stret(id, SEL, ...);
#else
# define of_forward of_method_not_found
# define of_forward_stret of_method_not_found_stret
#endif
struct pre_ivar {
int32_t retainCount;
struct pre_mem *firstMem, *lastMem;
#if !defined(OF_HAVE_ATOMIC_OPS) && defined(OF_HAVE_THREADS)
of_spinlock_t retainCountSpinlock;
#endif
};
struct pre_mem {
struct pre_mem *prev, *next;
id owner;
};
|
|
<
>
|
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
extern struct stret of_forward_stret(id, SEL, ...);
#else
# define of_forward of_method_not_found
# define of_forward_stret of_method_not_found_stret
#endif
struct pre_ivar {
int retainCount;
#if !defined(OF_HAVE_ATOMIC_OPS) && defined(OF_HAVE_THREADS)
of_spinlock_t retainCountSpinlock;
#endif
struct pre_mem *firstMem, *lastMem;
};
struct pre_mem {
struct pre_mem *prev, *next;
id owner;
};
|
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
|
@throw [OFNotImplementedException exceptionWithSelector: selector
object: self];
}
- retain
{
#if defined(OF_HAVE_ATOMIC_OPS)
of_atomic_inc_32(&PRE_IVARS->retainCount);
#else
OF_ENSURE(of_spinlock_lock(&PRE_IVARS->retainCountSpinlock));
PRE_IVARS->retainCount++;
OF_ENSURE(of_spinlock_unlock(&PRE_IVARS->retainCountSpinlock));
#endif
return self;
}
- (unsigned int)retainCount
{
assert(PRE_IVARS->retainCount >= 0);
return PRE_IVARS->retainCount;
}
- (void)release
{
#if defined(OF_HAVE_ATOMIC_OPS)
if (of_atomic_dec_32(&PRE_IVARS->retainCount) <= 0)
[self dealloc];
#else
size_t c;
OF_ENSURE(of_spinlock_lock(&PRE_IVARS->retainCountSpinlock));
c = --PRE_IVARS->retainCount;
OF_ENSURE(of_spinlock_unlock(&PRE_IVARS->retainCountSpinlock));
|
|
|
|
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
|
@throw [OFNotImplementedException exceptionWithSelector: selector
object: self];
}
- retain
{
#if defined(OF_HAVE_ATOMIC_OPS)
of_atomic_int_inc(&PRE_IVARS->retainCount);
#else
OF_ENSURE(of_spinlock_lock(&PRE_IVARS->retainCountSpinlock));
PRE_IVARS->retainCount++;
OF_ENSURE(of_spinlock_unlock(&PRE_IVARS->retainCountSpinlock));
#endif
return self;
}
- (unsigned int)retainCount
{
assert(PRE_IVARS->retainCount >= 0);
return PRE_IVARS->retainCount;
}
- (void)release
{
#if defined(OF_HAVE_ATOMIC_OPS)
if (of_atomic_int_dec(&PRE_IVARS->retainCount) <= 0)
[self dealloc];
#else
size_t c;
OF_ENSURE(of_spinlock_lock(&PRE_IVARS->retainCountSpinlock));
c = --PRE_IVARS->retainCount;
OF_ENSURE(of_spinlock_unlock(&PRE_IVARS->retainCountSpinlock));
|