void gras_dict_free(gras_dict_t **dict);
-gras_error_t gras_dict_insert (gras_dict_t *head,
- const char *key,
- void *data,
- void_f_pvoid_t *free_ctn);
-gras_error_t gras_dict_insert_ext(gras_dict_t *head,
- const char *key,
- int key_len,
- void *data,
- void_f_pvoid_t *free_ctn);
-
-/*----[ gras_dict_retrieve ]-------------------------------------------------*/
+gras_error_t gras_dict_set (gras_dict_t *head,
+ const char *key,
+ void *data,
+ void_f_pvoid_t *free_ctn);
+gras_error_t gras_dict_set_ext(gras_dict_t *head,
+ const char *key,
+ int key_len,
+ void *data,
+ void_f_pvoid_t *free_ctn);
+
+/*----[ gras_dict_get ]------------------------------------------------------*/
/* Search the given #key#. data=NULL when not found. */
/* Returns true if anything went ok, and false on internal error. */
/*---------------------------------------------------------------------------*/
-gras_error_t gras_dict_retrieve(gras_dict_t *head,const char *key,
- /* OUT */void **data);
-gras_error_t gras_dict_retrieve_ext(gras_dict_t *head,const char *key,
- int key_len,
- /* OUT */void **data);
+gras_error_t gras_dict_get(gras_dict_t *head,const char *key,
+ /* OUT */void **data);
+gras_error_t gras_dict_get_ext(gras_dict_t *head,const char *key,
+ int key_len,
+ /* OUT */void **data);
/*----[ gras_dict_remove ]---------------------------------------------------*/
/* Remove the entry associated with the given #key#. */
/* Returns if ok. Removing a non-existant key is ok. */
/* This function does not exist. Use gras_dict_free instead. */
/*---------------------------------------------------------------------------*/
-/*----[ gras_multidict_insert ]----------------------------------------------*/
+/*----[ gras_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 */
/*---------------------------------------------------------------------------*/
-gras_error_t gras_multidict_insert(gras_dict_t **head,
- int keycount,char **key,
- void *data,void (*free_ctn)(void*));
+gras_error_t gras_multidict_set(gras_dict_t **head,
+ int keycount,char **key,
+ void *data,void (*free_ctn)(void*));
-gras_error_t gras_multidict_insert_ext(gras_dict_t **head,
- int keycount,char **key,int *key_len,
- void *data,void_f_pvoid_t *free_ctn);
+gras_error_t gras_multidict_set_ext(gras_dict_t **head,
+ int keycount,char **key,int *key_len,
+ void *data,void_f_pvoid_t *free_ctn);
-/*----[ gras_multidict_retrieve ]--------------------------------------------*/
+/*----[ gras_multidict_get ]-------------------------------------------------*/
/* Search the given #key#. data=NULL when not found. */
/* Returns true if anything went ok, and false on internal error. */
/*---------------------------------------------------------------------------*/
-gras_error_t gras_multidict_retrieve(gras_dict_t *head,
- int keycount,const char **key,
- /* OUT */void **data);
+gras_error_t gras_multidict_get(gras_dict_t *head,
+ int keycount,const char **key,
+ /* OUT */void **data);
-gras_error_t gras_multidict_retrieve_ext(gras_dict_t *head,
- int keycount,const char **key,int *key_len,
- /* OUT */void **data);
+gras_error_t gras_multidict_get_ext(gras_dict_t *head,
+ int keycount,const char **key,int *key_len,
+ /* OUT */void **data);
/*----[ gras_multidict_remove ]----------------------------------------------*/
/* Remove the entry associated with the given #key#. */
/*###########################################################################*/
typedef struct gras_dict_cursor_ gras_dict_cursor_t;
/* creator/destructor */
-gras_error_t gras_dict_cursor_new(gras_dict_t *head,
+gras_error_t gras_dict_cursor_new(const gras_dict_t *head,
/*OUT*/gras_dict_cursor_t **cursor);
void gras_dict_cursor_free(gras_dict_cursor_t *cursor);
-/* next element. Returns true if ok, and false on last entry */
-gras_error_t gras_dict_cursor_next(gras_dict_cursor_t *cursor);
/* back to first element
it is not enough to reinit the cache after an add/remove in cache*/
gras_error_t gras_dict_cursor_rewind(gras_dict_cursor_t *cursor);
-/* Get current element. The key will be overwriten over calls */
-gras_error_t gras_dict_cursor_get_key(gras_dict_cursor_t *cursor,
- /*OUT*/char **key);
-gras_error_t gras_dict_cursor_get_data(gras_dict_cursor_t *cursor,
- /*OUT*/void **data);
-
-#define gras_dict_foreach(dict,cursor) \
- for (cursor = NULL; \
- ( cursor || gras_dict_cursor_new((dict),&(cursor)) == no_error ) && \
- ( gras_dict_cursor_next(cursor) || (gras_dict_cursor_free(cursor), 0) ) ; \
- )
+
+gras_error_t gras_dict_cursor_get_key (gras_dict_cursor_t *cursor,
+ /*OUT*/char **key);
+gras_error_t gras_dict_cursor_get_data (gras_dict_cursor_t *cursor,
+ /*OUT*/void **data);
+
+
+void gras_dict_cursor_first (const gras_dict_t *dict,
+ gras_dict_cursor_t **cursor);
+void gras_dict_cursor_step (gras_dict_cursor_t *cursor);
+int gras_dict_cursor_get_or_free (gras_dict_cursor_t **cursor,
+ char **key,
+ void **data);
+#define gras_dict_foreach(dict,cursor,key,data) \
+ for (cursor=NULL, gras_dict_cursor_first((dict),&(cursor)) ; \
+ gras_dict_cursor_get_or_free(&(cursor),&(key),(void**)(&data)); \
+ gras_dict_cursor_step(cursor) )
#ifdef __cplusplus
}