refactor(1)
[carveJwlIkooP6JGAAIwe30JlM.git] / addon.h
diff --git a/addon.h b/addon.h
index 7db6588515526217f779ba8e8b7cdbfcc59af58b..949a5d0678a29a10ec7cd76c0c9d4abac977aaba 100644 (file)
--- a/addon.h
+++ b/addon.h
@@ -1,7 +1,7 @@
 #ifndef ADDON_H
 #define ADDON_H
 
-#include "common.h"
+#include "skaterift.h"
 #include "vg/vg_steam_ugc.h"
 #include "workshop_types.h"
 #include "vg/vg_mem_pool.h"
@@ -19,6 +19,7 @@
 #define CACHE_PLAYER_MAX 10
 
 typedef struct addon_reg addon_reg;
+typedef struct addon_cache_entry addon_cache_entry;
 struct {
    struct addon_reg{
       PublishedFileId_t workshop_id;
@@ -29,7 +30,7 @@ struct {
 
       char foldername[ ADDON_FOLDERNAME_MAX ];
       u32 foldername_hash;
-      void *userdata;
+      u16 cache_id;
 
       enum addon_state{
          k_addon_state_none,
@@ -42,36 +43,59 @@ struct {
    u32 registry_count;
 
    /* deffered: updates in main thread */
-   u32 registry_type_counts[k_workshop_file_type_max]; 
+   u32 registry_type_counts[k_workshop_file_type_max];
+
+   struct addon_cache{
+      struct addon_cache_entry{
+         u32 reg_index;
+         addon_reg *reg_ptr;     /* TODO: only use reg_index? */
+
+         vg_pool_node poolnode;
+
+         enum addon_cache_state{
+            k_addon_cache_state_none,
+            k_addon_cache_state_loaded,
+            k_addon_cache_state_load_request
+         }
+         state;
+      }
+      *allocs;
+      vg_pool pool;
+
+      void *items;  /* the real data */
+      size_t stride;
+   }
+   cache[k_workshop_file_type_max];
+   SDL_SpinLock sl_cache_using_resources;
+
+
+
+#if 0
+
+
 
    /* caches */
    struct cache_board{
-      enum cache_board_state{
-         k_cache_board_state_none,
-         k_cache_board_state_loaded,
-         k_cache_board_state_load_request
-      }
-      state;
       struct player_board board;
+      
       u32 reg_index;
       addon_reg *reg_ptr;
-
       vg_pool_node cachenode;
    }
    *boards;
    vg_pool board_cache;
 
    struct cache_playermodel{
-      enum cache_board_state state;
       struct player_model model;
+
       u32 reg_index;
       addon_reg *reg_ptr;
       vg_pool_node cachenode;
    }
    *playermodels;
    vg_pool playermodel_cache;
+#endif
 
-   SDL_SpinLock sl_cache;
 }
 static addon_system;
 
@@ -90,5 +114,9 @@ VG_STATIC void async_addon_reg_update( void *data, u32 size );
 VG_STATIC addon_reg *addon_mount_local_addon( const char *folder,
                                               enum workshop_file_type type,
                                               const char *content_ext );
+static u16 addon_cache_fetch( enum workshop_file_type type, u32 reg_index );
+static u16 addon_cache_alloc( enum workshop_file_type type, u32 reg_index );
+static void *addon_cache_item( enum workshop_file_type type, u16 id );
+static void *addon_cache_item_if_loaded( enum workshop_file_type type, u16 id );
 
 #endif /* ADDON_H */