list_at
This commit is contained in:
parent
21132d5c2c
commit
a2bfa2361d
3 changed files with 14 additions and 2 deletions
9
list.c
9
list.c
|
|
@ -55,3 +55,12 @@ void list_remove(list_t* list, list_node_t* node)
|
|||
list->count--;
|
||||
cu_free(node);
|
||||
}
|
||||
|
||||
list_node_t* list_at(list_t* list, uint idx)
|
||||
{
|
||||
list_node_t* node = list->first;
|
||||
if (!idx) return node;
|
||||
else if (idx >= list->count) return NULL;
|
||||
while (idx--) node = node->next;
|
||||
return node;
|
||||
}
|
||||
|
|
|
|||
1
list.h
1
list.h
|
|
@ -25,6 +25,7 @@ void list_clear(list_t* list);
|
|||
|
||||
void list_add(list_t* list, uint size, void* data);
|
||||
void list_remove(list_t* list, list_node_t* node);
|
||||
list_node_t* list_at(list_t* list, uint idx);
|
||||
|
||||
#define CU_LIST_FOREACH(list) \
|
||||
for(list_node_t* i = (list)->first; i; i = i->next)
|
||||
|
|
|
|||
6
test.c
6
test.c
|
|
@ -11,13 +11,15 @@ int main()
|
|||
srand(time(NULL));
|
||||
for (uint i = 0; i < 5; i++)
|
||||
{
|
||||
uint num = rand();
|
||||
uint num = i;//rand();
|
||||
list_add(&list, sizeof(uint), &num);
|
||||
}
|
||||
list_remove(&list, list_at(&list, 2));
|
||||
|
||||
CU_LIST_FOREACH(&list)
|
||||
{
|
||||
printf("%p\t%d\n", i, LIST_NODE_VALUE(i, uint));
|
||||
printf("%p\t%p\t%p\t%d\n", i->prev, i, i->next,
|
||||
LIST_NODE_VALUE(i, uint));
|
||||
}
|
||||
|
||||
list_clear(&list);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue