-
-/*####[ Multi cache functions ]##############################################*/
-/* The are cache of cache of data. Any function there works the same way */
-/* than their simple cache counterpart. */
-/*###############################"###########################################*/
-
-/*----[ xbt_multidict_free ]------------------------------------------------*/
-/* This function does not exist. Use xbt_dict_free instead. */
-/*---------------------------------------------------------------------------*/
-
-/*----[ xbt_multidict_set ]-------------------------------------------------*/
-/* Insert the data in the structure under the #keycount# #key#s. */
-/* The key are destroyed in the process. Think to strdup it before. */
-/* Returns if it was ok or not */
-/*---------------------------------------------------------------------------*/
-xbt_error_t xbt_multidict_set(xbt_dict_t *head,
- int keycount,char **key,
- void *data,void (*free_ctn)(void*));
-
-xbt_error_t xbt_multidict_set_ext(xbt_dict_t *head,
- int keycount,char **key,int *key_len,
- void *data,void_f_pvoid_t *free_ctn);
-
-/*----[ xbt_multidict_get ]-------------------------------------------------*/
-/* Search the given #key#. data=NULL when not found. */
-/* Returns true if anything went ok, and false on internal error. */
-/*---------------------------------------------------------------------------*/
-xbt_error_t xbt_multidict_get(xbt_dict_t head,
- int keycount,const char **key,
- /* OUT */void **data);
-
-xbt_error_t xbt_multidict_get_ext(xbt_dict_t head,
- int keycount,const char **key,int *key_len,
- /* OUT */void **data);
-
-/*----[ xbt_multidict_remove ]----------------------------------------------*/
-/* Remove the entry associated with the given #key#. */
-/* Returns if ok. Removing a non-existant key is ok. */
-/*---------------------------------------------------------------------------*/
-xbt_error_t xbt_multidict_remove(xbt_dict_t head,
- int keycount,const char **key);
-
-xbt_error_t xbt_multidict_remove_ext(xbt_dict_t head,
- int keycount,const char **key,int *key_len);
-
-/*####[ Cache cursor functions ]#############################################*/
-/* To traverse (simple) caches */
-/* Don't add or remove entries to the cache while traversing !!! */
-/*###########################################################################*/
-typedef struct xbt_dict_cursor_ *xbt_dict_cursor_t;
-/* creator/destructor */
-xbt_dict_cursor_t xbt_dict_cursor_new(const xbt_dict_t head);
-void xbt_dict_cursor_free(xbt_dict_cursor_t *cursor);
-
-/* back to first element
- it is not enough to reinit the cache after an add/remove in cache*/
-void xbt_dict_cursor_rewind(xbt_dict_cursor_t cursor);
-
-
-xbt_error_t xbt_dict_cursor_get_key (xbt_dict_cursor_t cursor,
- /*OUT*/char **key);
-xbt_error_t xbt_dict_cursor_get_data (xbt_dict_cursor_t cursor,
- /*OUT*/void **data);
-
-void xbt_dict_cursor_first (const xbt_dict_t dict,
- xbt_dict_cursor_t *cursor);
-void xbt_dict_cursor_step (xbt_dict_cursor_t cursor);
-int xbt_dict_cursor_get_or_free (xbt_dict_cursor_t *cursor,
- char **key,
- void **data);
-#define xbt_dict_foreach(dict,cursor,key,data) \
- for (cursor=NULL, xbt_dict_cursor_first((dict),&(cursor)) ; \
- xbt_dict_cursor_get_or_free(&(cursor),&(key),(void**)(&data));\
- xbt_dict_cursor_step(cursor) )
-
-#ifdef __cplusplus
-}