+void *xbt_swag_extract(xbt_swag_t swag)
+{
+ size_t offset = swag->offset;
+ void *obj = NULL;
+
+ if ((!swag) || (!(swag->head)))
+ return NULL;
+
+ obj = swag->head;
+
+ if (swag->head == swag->tail) { /* special case */
+ swag->head = swag->tail = NULL;
+ } else {
+ swag->head = NEXT(obj, offset);
+ PREV(swag->head, offset) = NULL;
+ NEXT(obj, offset) = NULL;
+ }
+ (swag->count)--;
+
+ return obj;
+}
+