-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlist.c
62 lines (42 loc) · 1.56 KB
/
list.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "list.h"
#include <stdio.h>
static constexpr long mega_byte = 1 << 20;
int intcmp(const void *_a, const void *_b, void *) {
const int *lhs = _a;
const int *rhs = _b;
return (*lhs > *rhs) - (*lhs < *rhs);
}
int main(void) {
Arena arena = arena_create(mega_byte);
List list = list_create(&arena, sizeof(int), intcmp);
for (int i = 0; i < 10; i++) {
list_append(&list, &i);
}
list_insert(&list, 3, &(int){33});
list_insert(&list, -3, &(int){-33});
List clone = list_clone(&list, nullptr);
list_pop(&list, list.length / 2);
list_remove(&clone, &(int){33});
list_sort(&list, nullptr);
list_reverse(&clone);
printf("a = [");
list_for_each(item, &list) {
printf("%d, ", *(int *)item->data);
}
printf("]\n");
printf("b = [");
auto items = list_items(&clone, nullptr);
for (auto item = items; item < items + clone.length; item++) {
printf("%d, ", *(int *)item->data);
}
printf("]\n");
printf("list.get(10) = %d\n", *(int *)list_get(&list, 10));
printf("clone.get(10) = %d\n", *(int *)list_get(&clone, 10));
printf("list.index(33) = %ld\n", list_index(&list, (int[]){33}));
printf("clone.index(33) = %ld\n", list_index(&clone, (int[]){33}));
printf("list.find(33) = %p\n", list_find(&list, (int[]){33}));
printf("clone.find(33) = %p\n", list_find(&clone, (int[]){33}));
printf("list.count(33) = %ld\n", list_count(&list, (int[]){33}));
printf("clone.count(33) = %ld\n", list_count(&clone, (int[]){33}));
arena_destroy(&arena);
}