+ * function to output the data. If NULL, data won't be displayed.
+ */
+
+void xbt_dict_dump(xbt_dict_t dict,
+ void_f_pvoid_t output) {
+ int i;
+ xbt_dictelm_t element;
+ printf("Dict %p:\n", dict);
+ if (dict != NULL) {
+ for (i = 0; i < dict->table_size; i++) {
+ element = dict->table[i];
+ if (element) {
+ printf("[\n");
+ while (element != NULL) {
+ printf(" %s -> ", element->key);
+ if (output != NULL) {
+ (*output)(element->content);
+ }
+ printf("\n");
+ element = element->next;
+ }
+ printf("]\n");
+ } else {
+ printf("[]\n");
+ }
+ }
+ }
+}
+
+xbt_dynar_t all_sizes = NULL;
+/** @brief shows some debugging info about the bucklet repartition */
+void xbt_dict_dump_sizes(xbt_dict_t dict) {
+
+ int i;
+ unsigned int count;
+ unsigned int size;
+ xbt_dictelm_t element;
+ xbt_dynar_t sizes = xbt_dynar_new(sizeof(int),NULL);
+
+ printf("Dict %p: %d bucklets, %d used cells (of %d) ", dict, dict->count, dict->fill,dict->table_size);
+ if (dict != NULL) {
+ for (i = 0; i < dict->table_size; i++) {
+ element = dict->table[i];
+ size = 0;
+ if (element) {
+ while (element != NULL) {
+ size ++;
+ element = element->next;
+ }
+ }
+ if (xbt_dynar_length(sizes) <= size) {
+ int prevsize = 1;
+ xbt_dynar_set(sizes,size,&prevsize);
+ } else {
+ int prevsize;
+ xbt_dynar_get_cpy(sizes,size,&prevsize);
+ prevsize++;
+ xbt_dynar_set(sizes,size,&prevsize);
+ }
+ }
+ if (!all_sizes)
+ all_sizes = xbt_dynar_new(sizeof(int), NULL);
+
+ xbt_dynar_foreach(sizes,count,size) {
+ /* Copy values of this one into all_sizes */
+ int prevcount;
+ if (xbt_dynar_length(all_sizes) <= count) {
+ prevcount = size;
+ xbt_dynar_set(all_sizes,count,&prevcount);
+ } else {
+ xbt_dynar_get_cpy(all_sizes,count,&prevcount);
+ prevcount += size;
+ xbt_dynar_set(all_sizes,count,&prevcount);
+ }
+
+ /* Report current sizes */
+ if (count==0)
+ continue;
+ if (size==0)
+ continue;
+ printf("%delm x %u cells; ",count,size);
+ }
+ }
+ printf("\n");
+ xbt_dynar_free(&sizes);
+}
+
+/**
+ * Destroy the dict mallocators.
+ * This is an internal XBT function called by xbt_exit().