power_play/src/resource.h

71 lines
1.7 KiB
C

#ifndef RESOURCE_H
#define RESOURCE_H
#include "sys.h"
#define RESOURCE_NAME_LEN_MAX 255
/* A resource contains data that can be retrieved globally by name.
* If enabled during compilation, resource data is embedded in the
* executable. Otherwise each resource represents a file on disk. */
struct resource {
struct string _data;
b32 _exists;
#if RESOURCES_EMBEDDED
struct string _name;
#else
struct sys_file _file;
struct sys_file_map _file_map;
u8 _name_text[RESOURCE_NAME_LEN_MAX];
u8 _name_len;
#endif
};
/* ========================== *
* Startup
* ========================== */
struct resource_startup_receipt { i32 _; };
struct resource_startup_receipt resource_startup(void);
/* ========================== *
* Open / close
* ========================== */
struct resource resource_open(struct string name);
#if RESOURCES_EMBEDDED
#define resource_close(res_ptr) (UNUSED)res_ptr
#else
void resource_close(struct resource *res_ptr);
#endif
/* ========================== *
* Data
* ========================== */
#define resource_get_data(res_ptr) (res_ptr)->_data
#define resource_exists(res_ptr) (res_ptr)->_exists
#if RESOURCES_EMBEDDED
#define resource_get_name(res_ptr) (res_ptr)->_name
#else
#define resource_get_name(res_ptr) STRING((res_ptr)->_name_len, (res_ptr)->_name_text)
#endif
/* ========================== *
* Watch
* ========================== */
#define RESOURCE_WATCH_CALLBACK_FUNC_DEF(func_name, arg_name) void func_name(struct string arg_name)
typedef RESOURCE_WATCH_CALLBACK_FUNC_DEF(resource_watch_callback, name);
#if RESOURCE_RELOADING
void resource_register_watch_callback(resource_watch_callback *callback);
#else
#define resource_register_watch_callback(callback)
#endif
#endif