#ifndef REGISTRY_H
#define REGISTRY_H
+#include "oo.qh"
#include "util.qh"
#define REGISTER_INIT(ns, id) [[accumulate]] void Register_##ns##_##id##_init(entity this)
+#define REGISTER_INIT_POST(ns, id) [[accumulate]] void Register_##ns##_##id##_init_post(entity this)
#define REGISTER(initfunc, ns, array, counter, id, fld, inst) \
entity ns##_##id; \
REGISTER_INIT(ns, id) { } \
+ REGISTER_INIT_POST(ns, id) { } \
.entity enemy; /* internal next pointer */ \
void Register_##ns##_##id() { \
entity this = inst; \
if ( array##_last) array##_last.enemy = this; \
array##_last = this; \
Register_##ns##_##id##_init(this); \
+ Register_##ns##_##id##_init_post(this); \
} \
ACCUMULATE_FUNCTION(initfunc, Register_##ns##_##id) \
REGISTER_INIT(ns, id)