git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6618
48e7efb5-ca39-0410-a469-
dd3cf9ba447f
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);
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);
-XBT_PUBLIC(int) xbt_swag_belongs(void *obj, xbt_swag_t swag);
- static XBT_INLINE void *xbt_swag_getFirst(xbt_swag_t swag)
+#define xbt_swag_getNext(obj,offset) (((xbt_swag_hookup_t)(((char *) (obj)) + (offset)))->prev)
+#define xbt_swag_getPrev(obj,offset) (((xbt_swag_hookup_t)(((char *) (obj)) + (offset)))->next)
+
+static XBT_INLINE int xbt_swag_belongs(void *obj, xbt_swag_t swag) {
+ return ((xbt_swag_getNext(obj, swag->offset)) || (xbt_swag_getPrev(obj, swag->offset))
+ || (swag->head == obj));
+}
+
+static XBT_INLINE void *xbt_swag_getFirst(xbt_swag_t swag)
-#define xbt_swag_getNext(obj,offset) (((xbt_swag_hookup_t)(((char *) (obj)) + (offset)))->prev)
-#define xbt_swag_getPrev(obj,offset) (((xbt_swag_hookup_t)(((char *) (obj)) + (offset)))->next)
/**
* \brief Offset computation
/**
* \brief Offset computation
#include "xbt/log.h"
#include "xbt/swag.h"
#include "xbt/log.h"
#include "xbt/swag.h"
-#define PREV(obj,offset) xbt_swag_getPrev(obj,offset)
-#define NEXT(obj,offset) xbt_swag_getNext(obj,offset)
-
/** Creates a new swag.
* \param offset where the hookup is located in the structure
/** Creates a new swag.
* \param offset where the hookup is located in the structure
- PREV(obj, swag->offset) = swag->tail;
- NEXT(PREV(obj, swag->offset), swag->offset) = obj;
+ xbt_swag_getPrev(obj, swag->offset) = swag->tail;
+ xbt_swag_getNext(xbt_swag_getPrev(obj, swag->offset), swag->offset) = obj;
- NEXT(obj, swag->offset) = swag->head;
- PREV(NEXT(obj, swag->offset), swag->offset) = obj;
+ xbt_swag_getNext(obj, swag->offset) = swag->head;
+ xbt_swag_getPrev(xbt_swag_getNext(obj, swag->offset), swag->offset) = obj;
- PREV(obj, swag->offset) = swag->tail;
- NEXT(PREV(obj, swag->offset), swag->offset) = obj;
+ xbt_swag_getPrev(obj, swag->offset) = swag->tail;
+ xbt_swag_getNext(xbt_swag_getPrev(obj, swag->offset), swag->offset) = obj;
return NULL;
swag->head = NULL;
swag->tail = NULL;
return NULL;
swag->head = NULL;
swag->tail = NULL;
- NEXT(obj, offset) = PREV(obj, offset) = NULL;
+ xbt_swag_getNext(obj, offset) = xbt_swag_getPrev(obj, offset) = NULL;
} else if (obj == swag->head) { /* It's the head */
} else if (obj == swag->head) { /* It's the head */
- swag->head = NEXT(obj, offset);
- PREV(swag->head, offset) = NULL;
- NEXT(obj, offset) = NULL;
+ swag->head = xbt_swag_getNext(obj, offset);
+ xbt_swag_getPrev(swag->head, offset) = NULL;
+ xbt_swag_getNext(obj, offset) = NULL;
} else if (obj == swag->tail) { /* It's the tail */
} else if (obj == swag->tail) { /* It's the tail */
- swag->tail = PREV(obj, offset);
- NEXT(swag->tail, offset) = NULL;
- PREV(obj, offset) = NULL;
+ swag->tail = xbt_swag_getPrev(obj, offset);
+ xbt_swag_getNext(swag->tail, offset) = NULL;
+ xbt_swag_getPrev(obj, offset) = NULL;
} else { /* It's in the middle */
} else { /* It's in the middle */
- NEXT(PREV(obj, offset), offset) = NEXT(obj, offset);
- PREV(NEXT(obj, offset), offset) = PREV(obj, offset);
- PREV(obj, offset) = NEXT(obj, offset) = NULL;
+ xbt_swag_getNext(xbt_swag_getPrev(obj, offset), offset) = xbt_swag_getNext(obj, offset);
+ xbt_swag_getPrev(xbt_swag_getNext(obj, offset), offset) = xbt_swag_getPrev(obj, offset);
+ xbt_swag_getPrev(obj, offset) = xbt_swag_getNext(obj, offset) = NULL;
}
(swag->count)--;
return obj;
}
(swag->count)--;
return obj;
if (swag->head == swag->tail) { /* special case */
swag->head = swag->tail = NULL;
if (swag->head == swag->tail) { /* special case */
swag->head = swag->tail = NULL;
- PREV(obj, offset) = NEXT(obj, offset) = NULL;
+ xbt_swag_getPrev(obj, offset) = xbt_swag_getNext(obj, offset) = NULL;
- swag->head = NEXT(obj, offset);
- PREV(swag->head, offset) = NULL;
- NEXT(obj, offset) = NULL;
+ swag->head = xbt_swag_getNext(obj, offset);
+ xbt_swag_getPrev(swag->head, offset) = NULL;
+ xbt_swag_getNext(obj, offset) = NULL;
-/**
- * \param obj an object
- * \param swag a swag
- * \return 1 if \a obj is in the \a swag and 0 otherwise
- */
-int xbt_swag_belongs(void *obj, xbt_swag_t swag)
-{
- return ((NEXT(obj, swag->offset)) || (PREV(obj, swag->offset))
- || (swag->head == obj));
-}
-