30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
__memchunks_size = 0;
}
return self;
}
- free
{
size_t i;
for (i = 0; i < __memchunks_size; i++)
free(__memchunks[i]);
if (__memchunks != NULL)
free(__memchunks);
free(self);
return nil;
|
|
|
|
|
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
__memchunks_size = 0;
}
return self;
}
- free
{
void **iter = __memchunks + __memchunks_size;
while (iter-- > __memchunks)
free(*iter);
if (__memchunks != NULL)
free(__memchunks);
free(self);
return nil;
|
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
memsize = nitems * size;
return [self getMemWithSize: memsize];
}
- (void*)resizeMem: (void*)ptr
toSize: (size_t)size
{
size_t i;
if (ptr == NULL)
return [self getMemWithSize: size];
if (size == 0) {
[self freeMem: ptr];
return NULL;
}
for (i = 0; i < __memchunks_size; i++) {
if (__memchunks[i] == ptr) {
if ((ptr = realloc(ptr, size)) == NULL)
[[OFNoMemException newWithObject: self
andSize: size] raise];
__memchunks[i] = ptr;
return ptr;
}
}
[[OFMemNotPartOfObjException newWithObject: self
andPointer: ptr] raise];
return NULL; /* never reached, but makes gcc happy */
|
|
>
|
>
|
|
|
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
memsize = nitems * size;
return [self getMemWithSize: memsize];
}
- (void*)resizeMem: (void*)ptr
toSize: (size_t)size
{
void **iter;
if (ptr == NULL)
return [self getMemWithSize: size];
if (size == 0) {
[self freeMem: ptr];
return NULL;
}
iter = __memchunks + __memchunks_size;
while (iter-- > __memchunks) {
if (*iter == ptr) {
if ((ptr = realloc(ptr, size)) == NULL)
[[OFNoMemException newWithObject: self
andSize: size] raise];
*iter = ptr;
return ptr;
}
}
[[OFMemNotPartOfObjException newWithObject: self
andPointer: ptr] raise];
return NULL; /* never reached, but makes gcc happy */
|
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
memsize = nitems * size;
return [self resizeMem: ptr
toSize: memsize];
}
- freeMem: (void*)ptr;
{
void *last, **memchunks;
size_t i, memchunks_size;
for (i = 0; i < __memchunks_size; i++) {
if (__memchunks[i] == ptr) {
memchunks_size = __memchunks_size - 1;
last = __memchunks[memchunks_size];
if (__memchunks_size == 0 ||
memchunks_size > SIZE_MAX / sizeof(void*))
[[OFOutOfRangeException newWithObject: self]
raise];
|
|
>
|
>
>
>
>
|
|
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
memsize = nitems * size;
return [self resizeMem: ptr
toSize: memsize];
}
- freeMem: (void*)ptr;
{
void **iter, *last, **memchunks;
size_t i, memchunks_size;
iter = __memchunks + __memchunks_size;
i = __memchunks_size;
while (iter-- > __memchunks) {
i--;
if (*iter == ptr) {
memchunks_size = __memchunks_size - 1;
last = __memchunks[memchunks_size];
if (__memchunks_size == 0 ||
memchunks_size > SIZE_MAX / sizeof(void*))
[[OFOutOfRangeException newWithObject: self]
raise];
|