F4MP/f4mp_originalcode/thirdparty/zpl/code/source/event.c
Jous99 37b16f1547 code upload
codigo original de f4mp y tilted para referencias
2026-01-06 18:45:00 +01:00

57 lines
1.5 KiB
C

// file: source/event.c
////////////////////////////////////////////////////////////////
//
// Event Handler
//
//
#ifdef ZPL_EDITOR
#include <zpl.h>
#endif
ZPL_BEGIN_C_DECLS
ZPL_TABLE_DEFINE(zpl_event_pool, zpl_event_pool_, zpl_event_block);
void zpl_event_init(zpl_event_pool *pool, zpl_allocator alloc) { zpl_event_pool_init(pool, alloc); }
void zpl_event_destroy(zpl_event_pool *pool) {
for (zpl_isize i = 0; i < zpl_array_count(pool->entries); ++i) {
zpl_event_block *block = &pool->entries[i].value;
if (block) { zpl_array_free(*block); }
}
zpl_event_pool_destroy(pool);
}
zpl_u64 zpl_event_add(zpl_event_pool *pool, zpl_u64 slot, zpl_event_cb cb) {
zpl_event_block *block = zpl_event_pool_get(pool, slot);
if (!block) {
zpl_event_block arr;
zpl_array_init(arr, zpl_heap_allocator( ));
zpl_event_pool_set(pool, slot, arr);
block = zpl_event_pool_get(pool, slot);
}
zpl_u64 offset = zpl_array_count(block);
zpl_array_append(*block, cb);
return offset;
}
void zpl_event_remove(zpl_event_pool *pool, zpl_u64 slot, zpl_u64 index) {
zpl_event_block *block = zpl_event_pool_get(pool, slot);
if (block) { zpl_array_remove_at(*block, (zpl_isize)index); }
}
void zpl_event_trigger(zpl_event_pool *pool, zpl_u64 slot, zpl_event_data evt) {
zpl_event_block *block = zpl_event_pool_get(pool, slot);
if (block) {
for (zpl_isize i = 0; i < zpl_array_count(*block); ++i) { (*block)[i](evt); }
}
}
ZPL_END_C_DECLS