Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Destructor should be virtual.
[simgrid.git] / include / xbt / dict.h
index 1dc5685..4f2a88c 100644 (file)
@@ -1,6 +1,6 @@
 /* xbt/dict.h -- api to a generic dictionary                                */
 
-/* Copyright (c) 2004-2011. The SimGrid Team.
+/* Copyright (c) 2004-2013. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
@@ -24,7 +24,9 @@ SG_BEGIN_DECL()
  *  functionality than an hash table.
  *
  *  Here is a little example of use:
- *  \verbatim xbt_dict_t mydict = xbt_dict_new();
+
+\verbatim
+ xbt_dict_t mydict = xbt_dict_new();
  char buff[512];
 
  sprintf(buff,"some very precious data");
@@ -43,7 +45,19 @@ SG_BEGIN_DECL()
  */
 
   /** \brief Dictionary data type (opaque structure) */
+
 typedef struct s_xbt_dict *xbt_dict_t;
+typedef struct s_xbt_dictelm *xbt_dictelm_t;
+typedef struct s_xbt_dictelm {
+  char *key;
+  int key_len;
+  unsigned int hash_code;
+
+  void *content;
+
+  xbt_dictelm_t next;
+} s_xbt_dictelm_t;
+
 XBT_PUBLIC(xbt_dict_t) xbt_dict_new(void);
 XBT_PUBLIC(xbt_dict_t) xbt_dict_new_homogeneous(void_f_pvoid_t free_ctn);
 XBT_PUBLIC(void) xbt_dict_free(xbt_dict_t * dict);
@@ -63,6 +77,8 @@ XBT_PUBLIC(void) xbt_dict_set(xbt_dict_t dict, const char *key, void *data,
 XBT_PUBLIC(void *) xbt_dict_get(xbt_dict_t dict, const char *key);
 XBT_PUBLIC(void *) xbt_dict_get_or_null(xbt_dict_t dict, const char *key);
 XBT_PUBLIC(char *) xbt_dict_get_key(xbt_dict_t dict, const void *data);
+XBT_PUBLIC(xbt_dictelm_t) xbt_dict_get_elm(xbt_dict_t dict, const char *key);
+XBT_PUBLIC(xbt_dictelm_t) xbt_dict_get_elm_or_null(xbt_dict_t dict, const char *key);
 
 XBT_PUBLIC(void) xbt_dict_remove(xbt_dict_t dict, const char *key);
 XBT_PUBLIC(void) xbt_dict_reset(xbt_dict_t dict);
@@ -121,13 +137,23 @@ XBT_PUBLIC(void) xbt_dicti_remove(xbt_dict_t dict, uintptr_t key);
  *  @{ */
 
   /** @brief Cursor on dictionaries (opaque type) */
+struct s_xbt_dict_cursor {
+  xbt_dictelm_t current;
+  int line;
+  xbt_dict_t dict;
+};
 typedef struct s_xbt_dict_cursor *xbt_dict_cursor_t;
+
+static inline xbt_dictelm_t xbt_dict_cursor_get_elm(xbt_dict_cursor_t cursor) {
+  return cursor->current;
+}
+
 XBT_PUBLIC(xbt_dict_cursor_t) xbt_dict_cursor_new(const xbt_dict_t dict);
 XBT_PUBLIC(void) xbt_dict_cursor_free(xbt_dict_cursor_t * cursor);
 
 XBT_PUBLIC(void) xbt_dict_cursor_rewind(xbt_dict_cursor_t cursor);
 
-
+xbt_dictelm_t xbt_dict_cursor_get_elm(xbt_dict_cursor_t cursor);
 XBT_PUBLIC(char *) xbt_dict_cursor_get_key(xbt_dict_cursor_t cursor);
 XBT_PUBLIC(void *) xbt_dict_cursor_get_data(xbt_dict_cursor_t cursor);
 XBT_PUBLIC(void) xbt_dict_cursor_set_data(xbt_dict_cursor_t cursor,