#ifndef REGISTRY_H #define REGISTRY_H #define REGISTER_INIT(ns, id) [[accumulate]] void Register_##ns##_##id##_init(entity this) #define REGISTER(initfunc, ns, array, counter, id, class, fld) \ entity ns##_##id; \ REGISTER_INIT(ns, id) { } \ void Register_##ns##_##id() { \ entity this = NEW(class); \ ns##_##id = this; \ this.fld = ns##_COUNT; \ array[counter++] = this; \ Register_##ns##_##id##_init(this); \ } \ ACCUMULATE_FUNCTION(initfunc, Register_##ns##_##id) \ REGISTER_INIT(ns, id) #endif