list_node_t* list_pop_front( list_t* list )
{
list_node_t* node = list->head;
- if(node){
+ if(node)
+ {
mem_retain(node);
list_delete_node(list, node);
}
list_node_t* list_pop_back( list_t* list )
{
list_node_t* node = list->tail;
- if(node){
+ if(node)
+ {
mem_retain(node);
list_delete_node(list, node);
}
{
list_node_t* new_node = NULL;
list_node_t* prev = (index > 0 ? list_at(list, index-1) : NULL);
- if(prev || index == 0) new_node = list_insert_after(list, prev, contents);
- else mem_release(contents);
+ if(prev || index == 0)
+ new_node = list_insert_after(list, prev, contents);
+ else
+ mem_release(contents);
return new_node;
}
new_node->prev = node;
new_node->next = next;
//node's next ptr or list's head
- if(node) node->next = new_node;
- else list->head = new_node;
+ if(node)
+ node->next = new_node;
+ else
+ list->head = new_node;
//next's prev ptr or list's tail
- if(next) next->prev = new_node;
- else list->tail = new_node;
+ if(next)
+ next->prev = new_node;
+ else
+ list->tail = new_node;
return new_node;
}
-list_node_t* list_delete( list_t* list, size_t index)
+void list_delete( list_t* list, size_t index)
{
- list_node_t* node = list_at(list, index);
- list_node_t* next = node ? node->next : NULL;
- list_delete_node(list, node);
- return next; //TODO: this return is stoopid. why is this happening?
- //this function should be one line and return void:
- //list_delete_node(list, list_at(list, index));
+ list_delete_node(list, list_at(list, index));
}
void list_delete_node(list_t* list, list_node_t* node)
{
if(NULL != list && NULL != node)
{
- if(NULL != node->prev) node->prev->next = node->next;
- else list->head = node->next;
- if(NULL != node->next) node->next->prev = node->prev;
- else list->tail = node->prev;
+ if(NULL != node->prev)
+ node->prev->next = node->next;
+ else
+ list->head = node->next;
+ if(NULL != node->next)
+ node->next->prev = node->prev;
+ else
+ list->tail = node->prev;
node->next = NULL;
node->prev = NULL;
mem_release(node);
void list_clear(list_t* list)
{
list_node_t* node = list->tail;
- while(NULL != node){
+ while(NULL != node)
+ {
list_node_t* p = node->prev;
node->prev = NULL;
node->next = NULL;
TEST(Verify_delete_does_nothing_if_list_is_empty)
{
list_t* list = list_new();
- CHECK( NULL == list_delete( list, 0) );
+ list_delete(list, 0);
mem_release( list );
}
list_t* list = list_new();
list_node_t* doomed = list_push_back(list, mem_box(0x1234));
mem_retain(doomed);
- CHECK( NULL == list_delete( list, 0) );
+ list_delete(list, 0);
CHECK( list->head == NULL );
CHECK( list->tail == NULL );
CHECK( 1 == mem_num_references(doomed) );
list_node_t* doomed = list_push_back(list, mem_box(0x1234));
list_node_t* node1 = list_push_back(list, mem_box(0x1235));
mem_retain(doomed);
- CHECK( node1 == list_delete( list, 0) );
+ list_delete( list, 0);
CHECK( list->head == node1 );
CHECK( list->tail == node1 );
CHECK( NULL == node1->next );
list_node_t* doomed = list_push_back(list, mem_box(0x1235));
list_node_t* node2 = list_push_back(list, mem_box(0x1236));
mem_retain(doomed);
- CHECK( node2 == list_delete( list, 1) );
+ list_delete( list, 1);
CHECK( 2 == list_size( list ) );
CHECK( list->head == node1 );
CHECK( list->tail == node2 );
list_node_t* node1 = list_push_back(list,mem_box(0x1234));
list_node_t* doomed = list_push_back(list,mem_box(0x1235));
mem_retain(doomed);
- CHECK( NULL == list_delete( list, 1) );
+ list_delete( list, 1);
CHECK( list->head == node1 );
CHECK( list->tail == node1 );
CHECK( NULL == node1->next );