Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
476532bb69b039495e336e5d8ea510387ff17eb5
[simgrid.git] / include / xbt / lib.h
1 #ifndef _XBT_LIB_H
2 #define _XBT_LIB_H
3
4 #define MAX_FILL_PERCENT 80
5
6 SG_BEGIN_DECL()
7
8 typedef struct xbt_lib_ *xbt_lib_t;
9 typedef struct xbt_libelm_ *xbt_libelm_t;
10 typedef struct xbt_lib_cursor_ *xbt_lib_cursor_t;
11 typedef struct xbt_lib_cursor_ s_xbt_lib_cursor_t;
12
13 struct xbt_lib_cursor_ {
14   xbt_libelm_t current;
15   int line;
16   xbt_lib_t lib;
17 };
18
19 typedef struct xbt_libelm_ {
20   char *key;
21   // key_len ???
22   int key_len;
23   unsigned int hash_code;
24   xbt_libelm_t next;
25   void *content;
26 } s_xbt_libelm_t;
27
28 typedef struct xbt_lib_ {
29   int table_size;
30   int count;
31   int fill;
32   int levels;
33   void_f_pvoid_t *free_f; // This is actually a table
34   xbt_libelm_t *table;    // This is actually a table
35 } s_xbt_lib_t;
36
37
38 /*####[ Prototypes ]#################################################*/
39  //lib.c
40 XBT_PUBLIC(void) xbt_lib_preinit(void);
41 XBT_PUBLIC(void) xbt_lib_postexit(void);
42 XBT_PUBLIC(xbt_lib_t) xbt_lib_new(void);
43 XBT_PUBLIC(void) xbt_lib_free(xbt_lib_t * lib);
44 XBT_PUBLIC(int) xbt_lib_add_level(xbt_lib_t lib, void_f_pvoid_t free_f); // Une fois qu'on a inséré un objet, on ne peut plus ajouter de niveau
45 XBT_PUBLIC(void) xbt_lib_set(xbt_lib_t lib, const char *name, int level, void *obj);
46 XBT_PUBLIC(void *) xbt_lib_get_or_null(xbt_lib_t lib, const char *name, int level);
47 XBT_PUBLIC(int) xbt_lib_length(xbt_lib_t lib);
48 XBT_PUBLIC(void) xbt_lib_reset(xbt_lib_t *lib);
49 XBT_PUBLIC(void) xbt_lib_cursor_step(xbt_lib_cursor_t cursor);
50 XBT_PUBLIC(int) xbt_lib_cursor_get_or_free(xbt_lib_cursor_t * cursor, char **key, void **data);
51 XBT_PUBLIC(void) xbt_lib_cursor_first(const xbt_lib_t lib, xbt_lib_cursor_t * cursor);
52
53 /** @def xbt_lib_foreach
54     @hideinitializer */
55 #  define xbt_lib_foreach(lib,cursor,key,data)                       \
56   for (cursor=NULL, xbt_lib_cursor_first((lib),&(cursor)) ;        \
57        xbt_lib_cursor_get_or_free(&(cursor),(char**)&(key),(void**)(&data));\
58        xbt_lib_cursor_step(cursor) )
59
60 SG_END_DECL()
61 #endif                          /* _XBT_LIB_H */