/* dict - a generic dictionary, variation over hash table */
-/* Copyright (c) 2004-2020. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2004-2022. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "xbt/dict.h"
#include "dict_private.h"
#include "simgrid/Exception.hpp"
-#include "src/xbt_modinter.h"
#include "xbt/ex.h"
#include "xbt/log.h"
#include "xbt/mallocator.h"
#include "xbt/str.h"
#include "xbt/string.hpp"
+#include "xbt/xbt_modinter.h"
#include <cstdio>
#include <cstring>
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 */
+ auto* newtable = static_cast<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) */
} else {
pprev = &bucklet->next;
}
+ bucklet = *pprev;
}
if (*currcell == nullptr) /* everything moved */