* Here is a little example of use:
\verbatim
- xbt_dict_t mydict = xbt_dict_new();
+ xbt_dict_t mydict = xbt_dict_new_homogeneous(free);
char buff[512];
sprintf(buff,"some very precious data");
- xbt_dict_set(mydict,"my data", strdup(buff), free);
+ xbt_dict_set(mydict,"my data", strdup(buff), NULL);
sprintf(buff,"another good stuff");
- xbt_dict_set(mydict,"my data", strdup(buff), free); // previous data gets erased (and freed) by second add
+ xbt_dict_set(mydict,"my data", strdup(buff), NULL); // previous data gets erased (and freed) by second add
\endverbatim
*/
* \brief Constructor
* \param free_ctn function to call with (\a data as argument) when \a data is removed from the dictionary
* \return pointer to the destination
- * \see xbt_dict_new(), xbt_dict_free()
+ * \see xbt_dict_free()
*
* Creates and initialize a new dictionary with a default hashtable size.
* The dictionary is homogeneous: each element share the same free function.
dict->table = xbt_new0(xbt_dictelm_t, dict->table_size + 1);
dict->count = 0;
dict->fill = 0;
- dict->homogeneous = 1;
return dict;
}
* \param key the key to set the new data
* \param key_len the size of the \a key
* \param data the data to add in the dict
- * \param free_ctn function to call with (\a data as argument) when \a data is removed from the dictionary. This param
- * will only be considered when the dict was instantiated with xbt_dict_new() and not xbt_dict_new_homogeneous()
+ * \param free_ctn unused parameter (kept for compatibility)
*
* Set the \a data in the structure under the \a key, which can be any kind of data, as long as its length is provided
* in \a key_len.
*/
-void xbt_dict_set_ext(xbt_dict_t dict, const char *key, int key_len, void *data, void_f_pvoid_t free_ctn)
+void xbt_dict_set_ext(xbt_dict_t dict, const char* key, int key_len, void* data,
+ XBT_ATTRIB_UNUSED void_f_pvoid_t free_ctn)
{
unsigned int hash_code = xbt_str_hash_ext(key, key_len);
xbt_dictelm_t current;
xbt_dictelm_t previous = nullptr;
- xbt_assert(not free_ctn, "Cannot set an individual free function in homogeneous dicts.");
XBT_CDEBUG(xbt_dict, "ADD %.*s hash = %u, size = %d, & = %u", key_len, key, hash_code,
dict->table_size, hash_code & dict->table_size);
current = dict->table[hash_code & dict->table_size];
XBT_CDEBUG(xbt_dict, "Replace %.*s by %.*s under key %.*s",
key_len, (char *) current->content, key_len, (char *) data, key_len, (char *) key);
/* there is already an element with the same key: overwrite it */
- xbt_dictelm_set_data(dict, current, data, free_ctn);
+ xbt_dictelm_set_data(dict, current, data);
}
}
* \param dict the dict
* \param key the key to set the new data
* \param data the data to add in the dict
- * \param free_ctn function to call with (\a data as argument) when \a data is removed from the dictionary. This param
- * will only be considered when the dict was instantiated with xbt_dict_new() and not xbt_dict_new_homogeneous()
+ * \param free_ctn unused parameter (kept for compatibility)
*
* set the \a data in the structure under the \a key, which is anull terminated string.
*/
/* dict_cursor - iterators over dictionaries */
-/* Copyright (c) 2004-2017. The SimGrid Team.
+/* Copyright (c) 2004-2018. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* @brief Set current data
* @param cursor the cursor
* @param data the new data
- * @param free_ctn the function to free the new data
+ * @param free_ctn unused parameter (kept for compatibility)
*/
-inline void xbt_dict_cursor_set_data(xbt_dict_cursor_t cursor, void *data, void_f_pvoid_t free_ctn)
+inline void xbt_dict_cursor_set_data(xbt_dict_cursor_t cursor, void* data, XBT_ATTRIB_UNUSED void_f_pvoid_t free_ctn)
{
__cursor_not_null(cursor);
- xbt_dictelm_set_data(cursor->dict, cursor->current, data, free_ctn);
+ xbt_dictelm_set_data(cursor->dict, cursor->current, data);
}
/* dict - a generic dictionary, variation over hash table */
-/* Copyright (c) 2004-2017. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2004-2018. 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. */
}
}
-void xbt_dictelm_set_data(xbt_dict_t dict, xbt_dictelm_t element, void *data, void_f_pvoid_t free_ctn)
+void xbt_dictelm_set_data(xbt_dict_t dict, xbt_dictelm_t element, void* data)
{
- void_f_pvoid_t free_f;
- free_f = dict->free_f;
- xbt_assert(!free_ctn, "Cannot set an individual free function in homogeneous dicts.");
-
+ void_f_pvoid_t free_f = dict->free_f;
if (free_f && element->content)
free_f(element->content);
/* dict_elm - elements of generic dictionnaries */
/* This file is not to be loaded from anywhere but dict.cpp */
-/* Copyright (c) 2004-2017. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2004-2018. 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. */
int table_size;
int count;
int fill;
- int homogeneous;
} s_xbt_dict_t;
typedef struct s_xbt_dict_cursor s_xbt_dict_cursor_t;
/*####[ Function prototypes ]################################################*/
XBT_PRIVATE xbt_dictelm_t xbt_dictelm_new(const char* key, int key_len, unsigned int hash_code, void* content);
XBT_PRIVATE void xbt_dictelm_free(xbt_dict_t dict, xbt_dictelm_t element);
-XBT_PRIVATE void xbt_dictelm_set_data(xbt_dict_t dict, xbt_dictelm_t element, void *data, void_f_pvoid_t free_ctn);
+XBT_PRIVATE void xbt_dictelm_set_data(xbt_dict_t dict, xbt_dictelm_t element, void* data);
SG_END_DECL()