Mercurial > hg > dmlib
diff dmres.h @ 359:59045853853d
Make resource management re-entrant.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 16 Oct 2012 21:25:46 +0300 |
parents | 4a672d96978f |
children | 3d9c044ec08d |
line wrap: on
line diff
--- a/dmres.h Tue Oct 16 21:24:48 2012 +0300 +++ b/dmres.h Tue Oct 16 21:25:46 2012 +0300 @@ -49,6 +49,7 @@ /* Typedefs and structures */ +struct DMResourceLib; struct DMResourceDataOps; struct DMResourceOps; struct DMResource; @@ -70,6 +71,7 @@ int error; // Error code struct DMResourceOps *fops; // Pointer to file handling functions struct + struct DMResourceLib *lib; struct DMResource *next, *prev; void *rdata; @@ -88,6 +90,21 @@ } DMResourceDataOps; +typedef struct DMResourceLib +{ + int flags; + char *resPath; + + DMResource *resources, *preload; + DMMutex *mutex; + +#ifdef DM_USE_PACKFS + char *packFilename; + DMPackFile *packFile; +#endif +} DMResourceLib; + + typedef struct DMResourceOps { int (*ferror)(DMResource *); @@ -108,27 +125,29 @@ /* Functions */ -int dmres_init(const char *filename, const char *path, const int flags, int (*classifier)(DMResource *)); -void dmres_close(void); +int dmres_init(DMResourceLib **lib, const char *filename, const char *path, const int flags, int (*classifier)(DMResource *)); +int dmres_close(DMResourceLib *lib); -void dmres_prune(int agems, int flags); -int dmres_preload(BOOL start, int *loaded, int *total); +void dmres_prune(DMResourceLib *lib, int agems, int flags); +int dmres_preload(DMResourceLib *lib, BOOL start, int *loaded, int *total); void dmres_flags_to_symbolic(char *str, size_t size, int flags); int dmres_symbolic_to_flags(const char *str); -int dmres_load_resfile(const char *filename); -int dmres_write_resfile(const char *filename); +int dmres_load_resfile(DMResourceLib *lib, const char *filename); +int dmres_write_resfile(DMResourceLib *lib, const char *filename); -DMResource * dmres_new(const char *filename, int flags, size_t size); +DMResource * dmres_new(DMResourceLib *lib, const char *filename, int flags, size_t size); void dmres_free(DMResource *node); -DMResource * dmres_find(const char *filename); +void dmres_insert(DMResourceLib *lib, DMResource * node); +void dmres_delete(DMResourceLib *lib, DMResource * node); +DMResource * dmres_find(DMResourceLib *lib, const char *filename); int dmres_ref(DMResource *); int dmres_unref(DMResource *); // Opening and closing resources -DMResource * dmf_open(const char *); -DMResource * dmf_open_memio(const char *, Uint8 *buf, size_t len); +DMResource * dmf_open(DMResourceLib *lib, const char *); +DMResource * dmf_create_memio(DMResourceLib *lib, const char *, Uint8 *buf, size_t len); #ifdef DM_USE_STDIO DMResource * dmf_create_stdio(const char *filename, const char *mode); DMResource * dmf_create_stdio_stream(FILE *);