61 lines
1.5 KiB
C
61 lines
1.5 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_rw_mutex *rw_mutex;
|
|
};
|
|
|
|
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
|