#ifndef storage_h_INCLUDED #define storage_h_INCLUDED #include #include #ifndef MAX_OBJECTS #define MAX_OBJECTS 4096 #endif #ifndef MAX_COMPONENTS #define MAX_COMPONENTS 32 #endif #define GET_COMPONENT(storage, componentType, idx) (componentType *) internal_getComponent(storage, idx, #componentType) #define REGISTER_COMPONENT(storage, componentType) internal_registerComponent(storage, #componentType, sizeof(componentType)) #define ADD_COMPONENT(storage, idx, componentType) internal_addComponent(storage, idx, #componentType) typedef unsigned int Entity; typedef struct { char *name; size_t objectSize; void **objects; } component_pair; typedef struct { unsigned int componentsStored; unsigned int objectsStored; component_pair *objects; } storage; component_pair * // NULL if pair is not found findPair(storage *this, const char *name); Entity createEntity(storage *this); // Not intended for use outside of macros void internal_registerComponent(storage *storage, char *name, size_t size); void * // NULL if component with such name is not found internal_addComponent(storage *this, Entity idx, const char *name); // Not intended for use outside of macros void * // NULL if component is not found internal_getComponent(storage *this, Entity idx, const char *name); #endif // storage_h_INCLUDED