Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
follow the lastest macro renaming in xbt_ex
[simgrid.git] / testsuite / xbt / swag_usage.c
1 /*      $Id$     */
2
3 /* A simple example to demonstrate the use of swags */
4
5 /* Copyright (c) 2004 Arnaud Legrand. All rights reserved.                  */
6
7 /* This program is free software; you can redistribute it and/or modify it
8  * under the terms of the license (GNU LGPL) which comes with this package. */
9
10 #include <stdlib.h>
11 #include <stdio.h>
12 #include "xbt/swag.h"
13
14 typedef struct {
15   s_xbt_swag_hookup_t setA;
16   s_xbt_swag_hookup_t setB;
17   const char *name;
18 } shmurtz, s_shmurtz_t, *shmurtz_t;
19
20 int main(void)
21 {
22   shmurtz_t obj1, obj2, obj;
23   xbt_swag_t setA,setB;
24
25   obj1 = calloc(1,sizeof(s_shmurtz_t));
26   obj2 = calloc(1,sizeof(s_shmurtz_t));
27
28   obj1->name="Obj 1";
29   obj2->name="Obj 2";
30
31   printf("%p %p %d\n",obj1,&(obj1->setB),
32          (char *)&(obj1->setB) - (char *)obj1);
33
34   setA = xbt_swag_new(xbt_swag_offset(*obj1,setA));
35   setB = xbt_swag_new(xbt_swag_offset(*obj1,setB));
36
37   xbt_swag_insert(obj1, setA);
38   xbt_swag_insert(obj1, setB);
39   xbt_swag_insert(obj2, setA);
40   xbt_swag_insert(obj2, setB);
41
42   xbt_swag_remove(obj1, setB);
43   /*  xbt_swag_remove(obj2, setB);*/
44
45   xbt_swag_foreach(obj,setA) {
46     printf("\t%s\n",obj->name);
47   }
48
49   xbt_swag_foreach(obj,setB) {
50     printf("\t%s\n",obj->name);
51   }
52
53   printf("Belongs : %d\n", xbt_swag_belongs(obj2,setB));
54
55   printf("%d %d\n", xbt_swag_size(setA),xbt_swag_size(setB));
56   return 0;
57 }