polyadvent

A game engine from scratch in C
git clone git://jb55.com/polyadvent
Log | Files | Refs | README

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 */