#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
*
* Usage : xbt_swag_new(&obj.setA-&obj);
*/
-xbt_swag_t xbt_swag_new(size_t offset)
+XBT_INLINE xbt_swag_t xbt_swag_new(size_t offset)
{
xbt_swag_t swag = xbt_new0(s_xbt_swag_t, 1);
* kilkil a swag but not it's content. If you do not understand why
* xbt_swag_free should not free its content, don't use swags.
*/
-void xbt_swag_free(xbt_swag_t swag)
+XBT_INLINE void xbt_swag_free(xbt_swag_t swag)
{
free(swag);
}
*
* Usage : xbt_swag_init(swag,&obj.setA-&obj);
*/
-void xbt_swag_init(xbt_swag_t swag, size_t offset)
+XBT_INLINE void xbt_swag_init(xbt_swag_t swag, size_t offset)
{
swag->tail = NULL;
swag->head = NULL;
*
* insert \a obj in \a swag
*/
-void xbt_swag_insert(void *obj, xbt_swag_t swag)
+XBT_INLINE void xbt_swag_insert(void *obj, xbt_swag_t swag)
{
if (xbt_swag_belongs(obj, swag))
return;
}
- 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;
swag->tail = obj;
}
* insert (at the head... you probably had a very good reason to do
* that, I hope you know what you're doing) \a obj in \a swag
*/
-void xbt_swag_insert_at_head(void *obj, xbt_swag_t swag)
+XBT_INLINE void xbt_swag_insert_at_head(void *obj, xbt_swag_t swag)
{
if (xbt_swag_belongs(obj, swag))
return;
}
- 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;
swag->head = obj;
}
* insert (at the tail... you probably had a very good reason to do
* that, I hope you know what you're doing) \a obj in \a swag
*/
-void xbt_swag_insert_at_tail(void *obj, xbt_swag_t swag)
+XBT_INLINE void xbt_swag_insert_at_tail(void *obj, xbt_swag_t swag)
{
if (xbt_swag_belongs(obj, swag))
return;
}
- 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;
swag->tail = obj;
}
*
* removes \a obj from \a swag
*/
-void *xbt_swag_remove(void *obj, xbt_swag_t swag)
+XBT_INLINE void *xbt_swag_remove(void *obj, xbt_swag_t swag)
{
size_t offset = swag->offset;
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 */
- 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 */
- 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 */
- 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;
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;
} else {
- 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;
}
(swag->count)--;
* \param swag a swag
* \return the number of objects in \a swag
*/
-int xbt_swag_size(xbt_swag_t swag)
+XBT_INLINE int xbt_swag_size(xbt_swag_t swag)
{
return (swag->count);
}
-/**
- * \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));
-}
-
#ifdef SIMGRID_TEST