1 /* Copyright (c) 2004-2023. The SimGrid Team. All rights reserved. */
3 /* This program is free software; you can redistribute it and/or modify it
4 * under the terms of the license (GNU LGPL) which comes with this package. */
6 /* Warning, this module is done to be efficient and performs tons of cast and dirty things. So avoid using it unless
7 * you really know what you are doing. */
13 * XBT_swag: a O(1) set based on linked lists
15 * Warning, this module is done to be efficient and performs tons of cast and dirty things. So make sure you know what
16 * you are doing while using it.
17 * It is basically a fifo but with restrictions so that it can be used as a set. Any operation (add, remove, belongs)
18 * is O(1) and no call to malloc/free is done.
20 * @deprecated If you are using C++, you might want to use `boost::intrusive::set` instead.
27 * These typedefs are public so that the compiler can do his job but believe me, you don't want to try to play with
28 * those structs directly. Use them as an abstract datatype.
31 typedef struct xbt_swag_hookup {
34 } s_xbt_swag_hookup_t;
36 /* This type should be added to a type that is to be used in a swag.
38 * Whenever a new object with this struct is created, all fields have to be set to NULL
40 * Here is an example like that :
44 s_xbt_swag_hookup_t set1_hookup;
45 s_xbt_swag_hookup_t set2_hookup;
55 set1 = xbt_swag_new(xbt_swag_offset(elem, set1_hookup));
56 set2 = xbt_swag_new(xbt_swag_offset(elem, set2_hookup));
68 typedef struct xbt_swag s_xbt_swag_t;
70 #endif /* XBT_SWAG_H */