resource.h (1626B)
1 2 #ifndef RESOURCE_H 3 #define RESOURCE_H 4 5 #include "common.h" 6 7 enum refresh_status { 8 RESOURCE_DELETED, 9 REFRESH_NOT_NEEDED, 10 REFRESHED_ID 11 }; 12 13 struct resource_id { 14 u64 uuid; 15 u32 index; 16 u32 generation; 17 }; 18 19 struct resource_manager { 20 u8 *resources; 21 struct resource_id *ids; 22 u32 resource_count; 23 u32 generation; 24 u32 elem_size; 25 u32 slots_used; 26 u32 max_capacity; 27 u32 current_capacity; 28 29 const char *name; 30 }; 31 32 static inline void init_id_(struct resource_id *id) { 33 id->index = -1; 34 id->generation = -1; 35 id->uuid = -1; 36 } 37 38 static inline void null_id_(struct resource_id *id) 39 { 40 id->generation = 0; 41 id->uuid = -1; 42 id->index = -1; 43 } 44 45 static inline int is_null_id_(struct resource_id *id) 46 { 47 return id->generation == 0; 48 } 49 50 51 #define ideq(a, b) ((a)->id.uuid == (b)->id.uuid) 52 #define init_id(nt) init_id_(&((nt)->id)) 53 #define null_id(nt) null_id_(&((nt)->id)) 54 #define is_null_id(nt) is_null_id_(&((nt)->id)) 55 56 void *get_resource(struct resource_manager *r, struct resource_id *id); 57 void *get_all_resources(struct resource_manager *, u32 *count, struct resource_id **ids); 58 void destroy_resource(struct resource_manager *, struct resource_id *id); 59 void destroy_resource_manager(struct resource_manager *); 60 void *new_resource(struct resource_manager *, struct resource_id *id); 61 void print_id(struct resource_id *, int nl); 62 int is_resource_destroyed(struct resource_manager *r, struct resource_id *id); 63 64 void init_resource_manager(struct resource_manager *r, u32 elem_size, 65 u32 initial_elements, u32 max_elements, const char *name); 66 67 68 #endif /* RESOURCE_H */