Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
ops, wasn't compilable under windows
[simgrid.git] / src / xbt / dynar.c
index 5cfc493..7a567b9 100644 (file)
@@ -40,13 +40,13 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_dyn,xbt,"Dynamic arrays");
            xbt_assert1(dynar->used,              \
                        "dynar %p contains nothing",(void*)dynar)
 
-static _XBT_INLINE 
+static XBT_INLINE 
 void _xbt_clear_mem(void * const ptr,
                     const unsigned long length) {
   memset(ptr, 0, length);
 }
 
-static _XBT_INLINE
+static XBT_INLINE
 void
 _xbt_dynar_expand(xbt_dynar_t const dynar,
                    const int          nb) {
@@ -80,7 +80,7 @@ _xbt_dynar_expand(xbt_dynar_t const dynar,
   }
 }
 
-static _XBT_INLINE
+static XBT_INLINE
 void *
 _xbt_dynar_elm(const xbt_dynar_t  dynar,
                const unsigned long idx) {
@@ -90,7 +90,7 @@ _xbt_dynar_elm(const xbt_dynar_t  dynar,
   return data + idx*elmsize;
 }
 
-static _XBT_INLINE
+static XBT_INLINE
 void
 _xbt_dynar_get_elm(void  * const       dst,
                     const xbt_dynar_t  dynar,
@@ -100,7 +100,7 @@ _xbt_dynar_get_elm(void  * const       dst,
   memcpy(dst, elm, dynar->elmsize);
 }
 
-static _XBT_INLINE
+static XBT_INLINE
 void
 _xbt_dynar_put_elm(const xbt_dynar_t  dynar,
                     const unsigned long idx,
@@ -381,6 +381,10 @@ xbt_dynar_insert_at(xbt_dynar_t  const dynar,
  *
  * Get the Nth element of a dynar, removing it from the dynar and moving
  * all subsequent values to one position left in the dynar.
+ * 
+ * If the object argument of this function is a non-null pointer, the removed 
+ * element is copied to this address. If not, the element is freed using the 
+ * free_f function passed at dynar creation.
  */
 void
 xbt_dynar_remove_at(xbt_dynar_t  const dynar,
@@ -428,7 +432,7 @@ xbt_dynar_search(xbt_dynar_t  const dynar,
                 void        *const elem) {
   int it;
    
-  for (it=0; it< dynar->size; it++) 
+  for (it=0; it< dynar->used; it++) 
     if (!memcmp(_xbt_dynar_elm(dynar, it),elem,dynar->elmsize))
       return it;
 
@@ -593,25 +597,8 @@ xbt_dynar_cursor_get(const xbt_dynar_t dynar,
  */
 void xbt_dynar_cursor_rm(xbt_dynar_t dynar,
                          int          * const cursor) {
-  void *dst;
-
-  if (dynar->elmsize > sizeof(void*)) {
-    DEBUG0("Elements too big to fit into a pointer");
-    if (dynar->free_f) {
-      dst=xbt_malloc(dynar->elmsize);
-      xbt_dynar_remove_at(dynar,(*cursor)--,dst);
-      (dynar->free_f)(dst);
-      free(dst);
-    } else {
-      DEBUG0("Ok, we dont care about the element without free function");
-      xbt_dynar_remove_at(dynar,(*cursor)--,NULL);
-    }
-      
-  } else {
-    xbt_dynar_remove_at(dynar,(*cursor)--,&dst);
-    if (dynar->free_f)
-      (dynar->free_f)(dst);
-  }
+  
+  xbt_dynar_remove_at(dynar,(*cursor)--,NULL);
 }
 
 #ifdef SIMGRID_TEST