#ifndef ASSET_CACHE_H #define ASSET_CACHE_H #include "sys.h" #include "util.h" enum asset_status { ASSET_STATUS_NONE, ASSET_STATUS_UNINITIALIZED, /* TODO: ASSET_STATUS_QUEUED? */ ASSET_STATUS_LOADING, ASSET_STATUS_READY }; struct asset { /* Managed via asset_cache_touch */ u64 hash; struct string key; struct snc_counter counter; /* Managed via asset_cache_mark_x functions */ enum asset_status status; /* Accessed via asset_cache_get_data */ void *store_data; }; struct asset_cache_store { struct arena *arena; /* Internal */ struct snc_lock lock; }; struct asset_cache_startup_receipt { i32 _; }; struct asset_cache_startup_receipt asset_cache_startup(void); struct asset *asset_cache_touch(struct string key, u64 hash, b32 *is_first_touch); void asset_cache_mark_loading(struct asset *asset); void asset_cache_mark_ready(struct asset *asset, void *store_data); void asset_cache_wait(struct asset *asset); void *asset_cache_get_store_data(struct asset *asset); struct asset_cache_store asset_cache_store_open(void); void asset_cache_store_close(struct asset_cache_store *store); u64 asset_cache_hash(struct string key); #endif