+/**< A typical swag */
+/* @} */
+
+/** @defgroup XBT_swag_func SWAG functions
+ * @ingroup XBT_swag
+
+ * @{
+ */
+
+XBT_PUBLIC(xbt_swag_t) xbt_swag_new(size_t offset);
+XBT_PUBLIC(void) xbt_swag_free(xbt_swag_t swag);
+XBT_PUBLIC(void) xbt_swag_init(xbt_swag_t swag, size_t offset);
+
+/**
+ * \brief Makes a swag empty.
+ * \param swag a swag
+ * @hideinitializer
+ */
+#define xbt_swag_reset(swag) do {} while(xbt_swag_extract(swag))
+
+/**
+ * \param obj the objet to insert in the swag
+ * \param swag a swag
+ * @hideinitializer
+ *
+ * insert \a obj in \a swag
+ */
+#define xbt_swag_insert(obj, swag) xbt_swag_insert_at_tail(obj, swag)
+
+XBT_PUBLIC(void) xbt_swag_insert_at_head(void *obj, xbt_swag_t swag);
+XBT_PUBLIC(void) xbt_swag_insert_at_tail(void *obj, xbt_swag_t swag);
+XBT_PUBLIC(void *) xbt_swag_remove(void *obj, xbt_swag_t swag);
+XBT_PUBLIC(void *) xbt_swag_extract(xbt_swag_t swag);
+XBT_PUBLIC(int) xbt_swag_size(xbt_swag_t swag);