@@ -17,17 +17,36 @@ @implementation OFList + list { return [[[self alloc] init] autorelease]; } + ++ listWithListObjectSize: (size_t)listobj_size_ +{ + return [[[self alloc] + initWithListObjectSize: listobj_size_] autorelease]; +} - init { self = [super init]; first = NULL; last = NULL; + listobj_size = sizeof(of_list_object_t); + retain_and_release = YES; + + return self; +} + +- initWithListObjectSize: (size_t)listobj_size_; +{ + self = [super init]; + + first = NULL; + last = NULL; + listobj_size = listobj_size_; retain_and_release = YES; return self; } @@ -35,10 +54,11 @@ { self = [super init]; first = NULL; last = NULL; + listobj_size = sizeof(of_list_object_t); return self; } - (void)dealloc @@ -63,11 +83,11 @@ - (of_list_object_t*)append: (id)obj { of_list_object_t *o; - o = [self allocMemoryWithSize: sizeof(of_list_object_t)]; + o = [self allocMemoryWithSize: listobj_size]; o->object = obj; o->next = NULL; o->prev = last; if (last != NULL) @@ -85,11 +105,11 @@ - (of_list_object_t*)prepend: (id)obj { of_list_object_t *o; - o = [self allocMemoryWithSize: sizeof(of_list_object_t)]; + o = [self allocMemoryWithSize: listobj_size]; o->object = obj; o->next = first; o->prev = NULL; if (first != NULL) @@ -108,11 +128,11 @@ - (of_list_object_t*)insert: (id)obj before: (of_list_object_t*)listobj { of_list_object_t *o; - o = [self allocMemoryWithSize: sizeof(of_list_object_t)]; + o = [self allocMemoryWithSize: listobj_size]; o->object = obj; o->next = listobj; o->prev = listobj->prev; if (listobj->prev != NULL) @@ -132,11 +152,11 @@ - (of_list_object_t*)insert: (id)obj after: (of_list_object_t*)listobj { of_list_object_t *o; - o = [self allocMemoryWithSize: sizeof(of_list_object_t)]; + o = [self allocMemoryWithSize: listobj_size]; o->object = obj; o->next = listobj->next; o->prev = listobj; if (listobj->next != NULL) @@ -216,11 +236,11 @@ o = NULL; prev = NULL; @try { for (iter = first; iter != NULL; iter = iter->next) { - o = [new allocMemoryWithSize: sizeof(of_list_object_t)]; + o = [new allocMemoryWithSize: listobj_size]; o->object = iter->object; o->next = NULL; o->prev = prev; if (new->first == NULL)