4 #define MAX_FILL_PERCENT 80
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;
13 struct xbt_lib_cursor_ {
19 typedef struct xbt_libelm_ {
23 unsigned int hash_code;
28 typedef struct xbt_lib_ {
33 void_f_pvoid_t *free_f; // This is actually a table
34 xbt_libelm_t *table; // This is actually a table
38 /*####[ Prototypes ]#################################################*/
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);
53 /** @def xbt_lib_foreach
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) )
61 #endif /* _XBT_LIB_H */