X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/9104957deccc59e0e804215d5db498fabfd40d29..4929b7f325bed62b338613c63af15c75a185effe:/src/xbt/dict.cpp diff --git a/src/xbt/dict.cpp b/src/xbt/dict.cpp index 5184ea274e..8753f297c2 100644 --- a/src/xbt/dict.cpp +++ b/src/xbt/dict.cpp @@ -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 */