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 *);