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_ {
22 unsigned int hash_code;
27 typedef struct xbt_lib_ {
32 void_f_pvoid_t *free_f; // This is actually a table
33 xbt_libelm_t *table; // This is actually a table
37 /*####[ Prototypes ]#################################################*/
38 XBT_PUBLIC(void) xbt_lib_preinit(void);
39 XBT_PUBLIC(void) xbt_lib_postexit(void);
40 XBT_PUBLIC(xbt_lib_t) xbt_lib_new(void);
41 XBT_PUBLIC(void) xbt_lib_free(xbt_lib_t * lib);
42 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
43 XBT_PUBLIC(void) xbt_lib_set(xbt_lib_t lib, const char *name, int level, void *obj);
44 XBT_PUBLIC(void *) xbt_lib_get_or_null(xbt_lib_t lib, const char *name, int level);
45 XBT_PUBLIC(int) xbt_lib_length(xbt_lib_t lib);
46 XBT_PUBLIC(void) xbt_lib_reset(xbt_lib_t *lib);
47 XBT_PUBLIC(void) xbt_lib_cursor_step(xbt_lib_cursor_t cursor);
48 XBT_PUBLIC(int) xbt_lib_cursor_get_or_free(xbt_lib_cursor_t * cursor, char **key, void **data);
49 XBT_PUBLIC(void) xbt_lib_cursor_first(const xbt_lib_t lib, xbt_lib_cursor_t * cursor);
50 XBT_PUBLIC(unsigned int) xbt_lib_size(xbt_lib_t lib);
52 /** @def xbt_lib_foreach
54 #define xbt_lib_foreach(lib,cursor,key,data) \
55 for (cursor=NULL, xbt_lib_cursor_first((lib),&(cursor)) ; \
56 xbt_lib_cursor_get_or_free(&(cursor),(char**)&(key),(void**)(&data));\
57 xbt_lib_cursor_step(cursor) )
60 #endif /* _XBT_LIB_H */