power_play/src/asset_cache.h

54 lines
1.2 KiB
C

#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