Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Convenient to optimize the SURF.
authoralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Fri, 31 Dec 2004 02:49:07 +0000 (02:49 +0000)
committeralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Fri, 31 Dec 2004 02:49:07 +0000 (02:49 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@703 48e7efb5-ca39-0410-a469-dd3cf9ba447f

include/xbt/swag.h
src/xbt/swag.c

index 7e6f1bd..21d40fd 100644 (file)
@@ -33,6 +33,8 @@ xbt_swag_t xbt_swag_new(size_t offset);
 void xbt_swag_free(xbt_swag_t swag);
 void xbt_swag_init(xbt_swag_t swag, size_t offset);
 void xbt_swag_insert(void *obj, xbt_swag_t swag);
 void xbt_swag_free(xbt_swag_t swag);
 void xbt_swag_init(xbt_swag_t swag, size_t offset);
 void xbt_swag_insert(void *obj, xbt_swag_t swag);
+void xbt_swag_insert_at_head(void *obj, xbt_swag_t swag);
+void xbt_swag_insert_at_tail(void *obj, xbt_swag_t swag);
 void *xbt_swag_remove(void *obj, xbt_swag_t swag);
 void *xbt_swag_extract(xbt_swag_t swag);
 int xbt_swag_size(xbt_swag_t swag);
 void *xbt_swag_remove(void *obj, xbt_swag_t swag);
 void *xbt_swag_extract(xbt_swag_t swag);
 int xbt_swag_size(xbt_swag_t swag);
index 3c2793a..c9730de 100644 (file)
@@ -63,6 +63,44 @@ void xbt_swag_insert(void *obj, xbt_swag_t swag)
   swag->tail = obj;
 }
 
   swag->tail = obj;
 }
 
+void xbt_swag_insert_at_head(void *obj, xbt_swag_t swag)
+{
+
+  if (xbt_swag_belongs(obj, swag))
+    return;
+
+  (swag->count)++;
+  if (swag->head == NULL) {
+    swag->head = obj;
+    swag->tail = obj;
+    return;
+  }
+
+  NEXT(obj, swag->offset) = swag->head;
+  PREV(NEXT(obj, swag->offset), swag->offset) = obj;
+
+  swag->head = obj;
+}
+
+void xbt_swag_insert_at_tail(void *obj, xbt_swag_t swag)
+{
+
+  if (xbt_swag_belongs(obj, swag))
+    return;
+
+  (swag->count)++;
+  if (swag->head == NULL) {
+    swag->head = obj;
+    swag->tail = obj;
+    return;
+  }
+
+  PREV(obj, swag->offset) = swag->tail;
+  NEXT(PREV(obj, swag->offset), swag->offset) = obj;
+
+  swag->tail = obj;
+}
+
 void *xbt_swag_remove(void *obj, xbt_swag_t swag)
 {
   size_t offset = swag->offset;
 void *xbt_swag_remove(void *obj, xbt_swag_t swag)
 {
   size_t offset = swag->offset;