Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[sonar] The three expressions of a "for" statement should only be concerned with...
[simgrid.git] / src / xbt / dict.cpp
index 5184ea2..8753f29 100644 (file)
@@ -89,21 +89,22 @@ static void xbt_dict_rehash(xbt_dict_t dict)
   const unsigned oldsize = dict->table_size + 1;
   unsigned newsize = oldsize * 2;
 
-  xbt_dictelm_t *currcell = (xbt_dictelm_t *) xbt_realloc((char *) dict->table, newsize * sizeof(xbt_dictelm_t));
-  memset(&currcell[oldsize], 0, oldsize * sizeof(xbt_dictelm_t));       /* zero second half */
+  xbt_dictelm_t* newtable = (xbt_dictelm_t*)xbt_realloc((char*)dict->table, newsize * sizeof(xbt_dictelm_t));
+  memset(&newtable[oldsize], 0, oldsize * sizeof(xbt_dictelm_t)); /* zero second half */
   newsize--;
   dict->table_size = newsize;
-  dict->table = currcell;
+  dict->table      = newtable;
   XBT_DEBUG("REHASH (%u->%u)", oldsize, newsize);
 
-  for (unsigned i = 0; i < oldsize; i++, currcell++) {
+  for (unsigned i = 0; i < oldsize; i++) {
+    xbt_dictelm_t* currcell = &newtable[i];
     if (*currcell == nullptr) /* empty cell */
       continue;
 
     xbt_dictelm_t *twincell = currcell + oldsize;
     xbt_dictelm_t *pprev = currcell;
     xbt_dictelm_t bucklet = *currcell;
-    for (; bucklet != nullptr; bucklet = *pprev) {
+    while (bucklet != nullptr) {
       /* Since we use "& size" instead of "%size" and since the size was doubled, each bucklet of this cell must either:
          - stay  in  cell i (ie, currcell)
          - go to the cell i+oldsize (ie, twincell) */
@@ -116,6 +117,7 @@ static void xbt_dict_rehash(xbt_dict_t dict)
       } else {
         pprev = &bucklet->next;
       }
+      bucklet = *pprev;
     }
 
     if (*currcell == nullptr) /* everything moved */