Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
d8e3ffb5fe5be5a3c2bd769c30786eb2de5bc3c4
[simgrid.git] / teshsuite / xbt / mallocator / mallocator.c
1 #include "xbt/mallocator.h"
2 #include "xbt.h"
3
4 #include <stdio.h> /* snprintf */
5
6 typedef struct element {
7   int value;
8 } s_element_t;
9 typedef struct element *element_t;
10
11 element_t base_mallocator;
12
13 static void *element_mallocator_new_f(void)
14 {
15   element_t elem = xbt_new(s_element_t, 1);
16   elem->value = 0;
17   return elem;
18 }
19
20 static void element_mallocator_free_f(void *elem)
21 {
22   xbt_free(elem);
23 }
24
25 #define element_mallocator_reset_f ((void_f_pvoid_t)NULL)
26
27 static void pprint_elems(xbt_dynar_t elems) {
28   unsigned int iter;
29   element_t elem;
30   printf("Elems:");
31   xbt_dynar_foreach(elems, iter, elem) {
32     printf(" (%d,%d)", elem->value, (int)(base_mallocator-elem)/(int)sizeof(int));
33   }
34   printf("\n");
35 }
36
37 int main(int argc, char**argv)
38 {
39   xbt_mallocator_initialization_is_done(1);
40   int i = 0;
41   xbt_mallocator_t mallocator =
42     xbt_mallocator_new(65536, element_mallocator_new_f, element_mallocator_free_f, element_mallocator_reset_f);
43   xbt_dynar_t elems = xbt_dynar_new(sizeof(element_t), NULL);
44   element_t elem = NULL;
45   base_mallocator = xbt_mallocator_get(mallocator);
46
47   for (i=0; i<=10; i++) {
48     elem = xbt_mallocator_get(mallocator);
49     elem->value = i;
50     xbt_dynar_push(elems, &elem);
51   }
52   pprint_elems(elems);
53
54   for (i=0; i<=5; i++) {
55     xbt_dynar_pop(elems, &elem);
56     xbt_mallocator_release(mallocator, elem);
57   }
58   pprint_elems(elems);
59
60   xbt_dynar_remove_at(elems, 2, &elem);
61   xbt_mallocator_release(mallocator, elem);
62   pprint_elems(elems);
63
64   for (i=11; i<=15; i++) {
65     elem = xbt_mallocator_get(mallocator);
66     elem->value = i;
67     xbt_dynar_push(elems, &elem);
68   }
69   pprint_elems(elems);
70
71   return 0;
72 }