changeset 27:21c14afbf63d

Modularize the resource system a bit.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 29 Sep 2012 06:00:26 +0300
parents 2f463a59d732
children 920fb22cffcf
files dmres.c
diffstat 1 files changed, 56 insertions(+), 44 deletions(-) [+]
line wrap: on
line diff
--- a/dmres.c	Sat Sep 29 05:29:38 2012 +0300
+++ b/dmres.c	Sat Sep 29 06:00:26 2012 +0300
@@ -32,33 +32,57 @@
 
 DMResource *dmres_new(const char *filename, int flags, size_t size)
 {
-    DMResource *res = dmMalloc0(sizeof(DMResource));
-    if (res == NULL)
+    DMResource *node = dmMalloc0(sizeof(DMResource));
+    if (node == NULL)
         return NULL;
     
-    res->filename = dm_strdup(filename);
-    res->flags = flags;
-    res->dataSize = size;
+    node->filename = dm_strdup(filename);
+    node->flags = flags;
+    node->dataSize = size;
     
-    return res;
+    return node;
+}
+
+
+void dmres_free_res_data(DMResource *node)
+{
+    if (node->rdata != NULL &&
+        node->rops != NULL &&
+        node->rops->free != NULL)
+    {
+        node->rops->free(node);
+    }
+
+    node->rdata = NULL;
+    node->flags &= !DMF_LOADED_RES;
 }
 
 
-void dmres_free(DMResource *res)
+void dmres_free_raw_data(DMResource *node)
+{
+    dmFree(node->data);
+    node->data = NULL;
+    node->flags &= !DMF_LOADED_RAW;
+}
+
+
+void dmres_purge_raw_data(DMResource *node)
 {
-    if (res != NULL)
+    if ((node->flags & DMF_PRELOAD_RAW) == 0 &&
+        (node->flags & DMF_LOADED_RAW) &&
+        node->data != NULL)
+        dmres_free_raw_data(node);
+}
+
+
+void dmres_free(DMResource *node)
+{
+    if (node != NULL)
     {
-        if (res->rdata != NULL &&
-            res->rops != NULL &&
-            res->rops->free != NULL)
-        {
-            res->rops->free(res);
-            res->rdata = NULL;
-        }
-
-        dmFree(res->filename);
-        dmFree(res->data);
-        dmFree(res);
+        dmres_free_res_data(node);
+        dmres_free_raw_data(node);
+        dmFree(node->filename);
+        dmFree(node);
     }
 }
 
@@ -690,24 +714,24 @@
 }
 
 
-int dmres_ref(DMResource *res)
+int dmres_ref(DMResource *node)
 {
     DMRES_LOCK();
-    res->atime = time(NULL);
-    res->refcount++;
+    node->atime = time(NULL);
+    node->refcount++;
     DMRES_UNLOCK();
 
-    return res->refcount;
+    return node->refcount;
 }
 
 
-int dmres_unref(DMResource *res)
+int dmres_unref(DMResource *node)
 {
     DMRES_LOCK();
-    res->refcount--;
+    node->refcount--;
     DMRES_UNLOCK();
 
-    return res->refcount;
+    return node->refcount;
 }
 
 
@@ -920,7 +944,8 @@
     if (dfPreload != NULL)
     {
         // Check if the raw resource wants to be preloaded
-        if (((dfPreload->flags & DMF_PRELOAD_RAW) || (dfResFlags & DRF_PRELOAD_ALL)) &&
+        if (((dfPreload->flags & DMF_PRELOAD_RAW) ||
+             (dfResFlags & DRF_PRELOAD_ALL)) &&
             (dfPreload->flags & DMF_LOADED_RAW) == 0)
         {
             dmf_init_fops(dfPreload);
@@ -938,7 +963,8 @@
         }
 
         // Preload actual resource, if requested
-        if (((dfPreload->flags & DMF_PRELOAD_RES) || (dfResFlags & DRF_PRELOAD_RES)) &&
+        if (((dfPreload->flags & DMF_PRELOAD_RES) ||
+             (dfResFlags & DRF_PRELOAD_RES)) &&
             (dfPreload->flags & DMF_LOADED_RES) == 0 &&
             dfPreload->rops != NULL &&
             dfPreload->rops->load != NULL)
@@ -983,22 +1009,8 @@
                 ((flags & DMPRUNE_MTIME) &&
                 currtime - node->mtime >= agems))
             {
-                // Check if resource data is loaded
-                if (node->rdata != NULL &&
-                    node->rops != NULL &&
-                    node->rops->free != NULL)
-                {
-                    node->rops->free(node);
-                    node->flags &= !DMF_LOADED_RES;
-                }
-                
-                // Check if raw data is loaded
-                if (node->flags & DMF_LOADED_RAW)
-                {
-                    dmFree(node->data);
-                    node->data = NULL;
-                    node->flags &= !DMF_LOADED_RAW;
-                }    
+                dmres_free_res_data(node);
+                dmres_free_raw_data(node);
             }
         }
     }