You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
969 B
Objective-C
56 lines
969 B
Objective-C
#import "YSZone.h"
|
|
|
|
static YSZone *zone_list = 0;
|
|
|
|
static void *default_malloc(YSZone *zone, size_t size) {
|
|
void *mem;
|
|
|
|
mem = malloc(size);
|
|
if (mem != NULL) {
|
|
return mem;
|
|
}
|
|
|
|
//raise oom exception
|
|
|
|
return 0;
|
|
}
|
|
|
|
static void default_free(YSZone *zone, void *ptr) {
|
|
free(ptr);
|
|
}
|
|
|
|
static YSZone default_zone = {
|
|
default_malloc, default_free,
|
|
};
|
|
|
|
YSZone *YSDefaultMallocZone(void) {
|
|
return &default_zone;
|
|
}
|
|
|
|
YSZone *YSZoneFromPointer(void *ptr) {
|
|
YSZone *zone;
|
|
|
|
if (ptr == 0)
|
|
return 0;
|
|
|
|
if (zone_list == 0)
|
|
return &default_zone;
|
|
|
|
//mutex lock
|
|
|
|
for (zone = zone_list; zone != 0; zone = zone->next) {
|
|
if ( (zone->lookup)(zone, ptr) == 1 ) { break; }
|
|
}
|
|
|
|
//mutex unlock
|
|
|
|
return (zone == 0) ? &default_zone : zone;
|
|
}
|
|
|
|
void *YSZoneMalloc(YSZone *zone, YSUInteger size) {
|
|
if (!zone) {
|
|
zone = YSDefaultMallocZone();
|
|
}
|
|
|
|
return (zone->malloc)(zone, size);
|
|
} |