Linked list style cleanups

This commit is contained in:
Martin Willi
2011-07-06 09:43:46 +02:00
committed by Tobias Brunner
parent 629fd2f4f6
commit 75fc9d3136
+46 -47
View File
@@ -113,7 +113,7 @@ struct private_enumerator_t {
}; };
METHOD(enumerator_t, enumerate, bool, METHOD(enumerator_t, enumerate, bool,
private_enumerator_t *this, void **item) private_enumerator_t *this, void **item)
{ {
if (!this->current) if (!this->current)
{ {
@@ -132,7 +132,7 @@ METHOD(enumerator_t, enumerate, bool,
} }
METHOD(linked_list_t, create_enumerator, enumerator_t*, METHOD(linked_list_t, create_enumerator, enumerator_t*,
private_linked_list_t *this) private_linked_list_t *this)
{ {
private_enumerator_t *enumerator; private_enumerator_t *enumerator;
@@ -148,19 +148,19 @@ METHOD(linked_list_t, create_enumerator, enumerator_t*,
} }
METHOD(linked_list_t, reset_enumerator, void, METHOD(linked_list_t, reset_enumerator, void,
private_linked_list_t *this, private_enumerator_t *enumerator) private_linked_list_t *this, private_enumerator_t *enumerator)
{ {
enumerator->current = NULL; enumerator->current = NULL;
} }
METHOD(linked_list_t, get_count, int, METHOD(linked_list_t, get_count, int,
private_linked_list_t *this) private_linked_list_t *this)
{ {
return this->count; return this->count;
} }
METHOD(linked_list_t, insert_first, void, METHOD(linked_list_t, insert_first, void,
private_linked_list_t *this, void *item) private_linked_list_t *this, void *item)
{ {
element_t *element; element_t *element;
@@ -170,15 +170,11 @@ METHOD(linked_list_t, insert_first, void,
/* first entry in list */ /* first entry in list */
this->first = element; this->first = element;
this->last = element; this->last = element;
element->previous = NULL;
element->next = NULL;
} }
else else
{ {
element_t *old_first_element = this->first; element->next = this->first;
element->next = old_first_element; this->first->previous = element;
element->previous = NULL;
old_first_element->previous = element;
this->first = element; this->first = element;
} }
this->count++; this->count++;
@@ -220,7 +216,7 @@ static element_t* remove_element(private_linked_list_t *this,
} }
METHOD(linked_list_t, get_first, status_t, METHOD(linked_list_t, get_first, status_t,
private_linked_list_t *this, void **item) private_linked_list_t *this, void **item)
{ {
if (this->count == 0) if (this->count == 0)
{ {
@@ -231,7 +227,7 @@ METHOD(linked_list_t, get_first, status_t,
} }
METHOD(linked_list_t, remove_first, status_t, METHOD(linked_list_t, remove_first, status_t,
private_linked_list_t *this, void **item) private_linked_list_t *this, void **item)
{ {
if (get_first(this, item) == SUCCESS) if (get_first(this, item) == SUCCESS)
{ {
@@ -242,40 +238,39 @@ METHOD(linked_list_t, remove_first, status_t,
} }
METHOD(linked_list_t, insert_last, void, METHOD(linked_list_t, insert_last, void,
private_linked_list_t *this, void *item) private_linked_list_t *this, void *item)
{ {
element_t *element = element_create(item); element_t *element;
element = element_create(item);
if (this->count == 0) if (this->count == 0)
{ {
/* first entry in list */ /* first entry in list */
this->first = element; this->first = element;
this->last = element; this->last = element;
element->previous = NULL;
element->next = NULL;
} }
else else
{ {
element_t *old_last_element = this->last; element->previous = this->last;
element->previous = old_last_element; this->last->next = element;
element->next = NULL;
old_last_element->next = element;
this->last = element; this->last = element;
} }
this->count++; this->count++;
} }
METHOD(linked_list_t, insert_before, void, METHOD(linked_list_t, insert_before, void,
private_linked_list_t *this, private_enumerator_t *enumerator, private_linked_list_t *this, private_enumerator_t *enumerator,
void *item) void *item)
{ {
element_t *current = enumerator->current; element_t *current, *element;
current = enumerator->current;
if (!current) if (!current)
{ {
this->public.insert_last(&this->public, item); this->public.insert_last(&this->public, item);
return; return;
} }
element_t *element = element_create(item); element = element_create(item);
if (current->previous) if (current->previous)
{ {
current->previous->next = element; current->previous->next = element;
@@ -293,10 +288,11 @@ METHOD(linked_list_t, insert_before, void,
} }
METHOD(linked_list_t, replace, void*, METHOD(linked_list_t, replace, void*,
private_linked_list_t *this, private_enumerator_t *enumerator, private_linked_list_t *this, private_enumerator_t *enumerator,
void *item) void *item)
{ {
void *old = NULL; void *old = NULL;
if (enumerator->current) if (enumerator->current)
{ {
old = enumerator->current->value; old = enumerator->current->value;
@@ -306,7 +302,7 @@ METHOD(linked_list_t, replace, void*,
} }
METHOD(linked_list_t, get_last, status_t, METHOD(linked_list_t, get_last, status_t,
private_linked_list_t *this, void **item) private_linked_list_t *this, void **item)
{ {
if (this->count == 0) if (this->count == 0)
{ {
@@ -317,7 +313,7 @@ METHOD(linked_list_t, get_last, status_t,
} }
METHOD(linked_list_t, remove_last, status_t, METHOD(linked_list_t, remove_last, status_t,
private_linked_list_t *this, void **item) private_linked_list_t *this, void **item)
{ {
if (get_last(this, item) == SUCCESS) if (get_last(this, item) == SUCCESS)
{ {
@@ -328,7 +324,7 @@ METHOD(linked_list_t, remove_last, status_t,
} }
METHOD(linked_list_t, remove_, int, METHOD(linked_list_t, remove_, int,
private_linked_list_t *this, void *item, bool (*compare)(void*,void*)) private_linked_list_t *this, void *item, bool (*compare)(void*,void*))
{ {
element_t *current = this->first; element_t *current = this->first;
int removed = 0; int removed = 0;
@@ -363,8 +359,8 @@ METHOD(linked_list_t, remove_at, void,
} }
METHOD(linked_list_t, find_first, status_t, METHOD(linked_list_t, find_first, status_t,
private_linked_list_t *this, linked_list_match_t match, private_linked_list_t *this, linked_list_match_t match,
void **item, void *d1, void *d2, void *d3, void *d4, void *d5) void **item, void *d1, void *d2, void *d3, void *d4, void *d5)
{ {
element_t *current = this->first; element_t *current = this->first;
@@ -385,8 +381,8 @@ METHOD(linked_list_t, find_first, status_t,
} }
METHOD(linked_list_t, find_last, status_t, METHOD(linked_list_t, find_last, status_t,
private_linked_list_t *this, linked_list_match_t match, private_linked_list_t *this, linked_list_match_t match,
void **item, void *d1, void *d2, void *d3, void *d4, void *d5) void **item, void *d1, void *d2, void *d3, void *d4, void *d5)
{ {
element_t *current = this->last; element_t *current = this->last;
@@ -407,22 +403,23 @@ METHOD(linked_list_t, find_last, status_t,
} }
METHOD(linked_list_t, invoke_offset, void, METHOD(linked_list_t, invoke_offset, void,
private_linked_list_t *this, size_t offset, private_linked_list_t *this, size_t offset,
void *d1, void *d2, void *d3, void *d4, void *d5) void *d1, void *d2, void *d3, void *d4, void *d5)
{ {
element_t *current = this->first; element_t *current = this->first;
linked_list_invoke_t *method;
while (current) while (current)
{ {
linked_list_invoke_t *method = current->value + offset; method = current->value + offset;
(*method)(current->value, d1, d2, d3, d4, d5); (*method)(current->value, d1, d2, d3, d4, d5);
current = current->next; current = current->next;
} }
} }
METHOD(linked_list_t, invoke_function, void, METHOD(linked_list_t, invoke_function, void,
private_linked_list_t *this, linked_list_invoke_t fn, private_linked_list_t *this, linked_list_invoke_t fn,
void *d1, void *d2, void *d3, void *d4, void *d5) void *d1, void *d2, void *d3, void *d4, void *d5)
{ {
element_t *current = this->first; element_t *current = this->first;
@@ -434,11 +431,12 @@ METHOD(linked_list_t, invoke_function, void,
} }
METHOD(linked_list_t, clone_offset, linked_list_t*, METHOD(linked_list_t, clone_offset, linked_list_t*,
private_linked_list_t *this, size_t offset) private_linked_list_t *this, size_t offset)
{ {
linked_list_t *clone = linked_list_create();
element_t *current = this->first; element_t *current = this->first;
linked_list_t *clone;
clone = linked_list_create();
while (current) while (current)
{ {
void* (**method)(void*) = current->value + offset; void* (**method)(void*) = current->value + offset;
@@ -450,24 +448,25 @@ METHOD(linked_list_t, clone_offset, linked_list_t*,
} }
METHOD(linked_list_t, clone_function, linked_list_t*, METHOD(linked_list_t, clone_function, linked_list_t*,
private_linked_list_t *this, void* (*fn)(void*)) private_linked_list_t *this, void* (*fn)(void*))
{ {
linked_list_t *clone = linked_list_create();
element_t *current = this->first; element_t *current = this->first;
linked_list_t *clone;
clone = linked_list_create();
while (current) while (current)
{ {
clone->insert_last(clone, fn(current->value)); clone->insert_last(clone, fn(current->value));
current = current->next; current = current->next;
} }
return clone; return clone;
} }
METHOD(linked_list_t, destroy, void, METHOD(linked_list_t, destroy, void,
private_linked_list_t *this) private_linked_list_t *this)
{ {
void *value; void *value;
/* Remove all list items before destroying list */ /* Remove all list items before destroying list */
while (remove_first(this, &value) == SUCCESS) while (remove_first(this, &value) == SUCCESS)
{ {
@@ -478,7 +477,7 @@ METHOD(linked_list_t, destroy, void,
} }
METHOD(linked_list_t, destroy_offset, void, METHOD(linked_list_t, destroy_offset, void,
private_linked_list_t *this, size_t offset) private_linked_list_t *this, size_t offset)
{ {
element_t *current = this->first, *next; element_t *current = this->first, *next;
@@ -494,7 +493,7 @@ METHOD(linked_list_t, destroy_offset, void,
} }
METHOD(linked_list_t, destroy_function, void, METHOD(linked_list_t, destroy_function, void,
private_linked_list_t *this, void (*fn)(void*)) private_linked_list_t *this, void (*fn)(void*))
{ {
element_t *current = this->first, *next; element_t *current = this->first, *next;