power_play/src/asset_cache.h

61 lines
1.4 KiB
C

#ifndef ASSET_CACHE_H
#define ASSET_CACHE_H
#include "sys.h"
#include "work.h"
#include "util.h"
struct work_startup_receipt;
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;
/* Managed via asset_cache_set_work */
struct work_handle work;
struct sync_flag work_ready_sf;
/* Managed via asset_cache_mark_x functions */
enum asset_status status;
struct sync_flag asset_ready_sf;
/* Accessed via asset_cache_get_data */
void *store_data;
};
struct asset_cache_store {
struct arena *arena;
/* Internal */
struct sys_lock lock;
};
struct asset_cache_startup_receipt { i32 _; };
struct asset_cache_startup_receipt asset_cache_startup(struct work_startup_receipt *work_sr);
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_set_work(struct asset *asset, struct work_handle *handle);
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