#ifndef CORE_COMPONENTS_H #define CORE_COMPONENTS_H #include "core/HashMap.h" #include "core/List.h" typedef size_t CoreEntity; typedef struct { CoreHashMap entityToIndex; List indexToEntity; List components; } CoreComponents; typedef struct { CoreEntity entity; void* component; } CoreComponentNode; typedef struct { const CoreEntity* indexToEntity; const CoreEntity* indexToEntityEnd; void* component; void* componentEnd; size_t componentSize; CoreComponentNode node; } CoreComponentIterator; void coreInitComponents(CoreComponents* c, size_t componentSize); void coreDestroyComponents(CoreComponents* c); void* coreGetOrAddComponent(CoreComponents* c, CoreEntity e); void* coreSearchComponent(CoreComponents* c, CoreEntity e); bool coreRemoveComponent(CoreComponents* c, CoreEntity e); void coreInitComponentIterator(CoreComponentIterator* ci, CoreComponents* c); bool coreHasNextComponentNode(CoreComponentIterator* ci); CoreComponentNode* coreNextComponentNode(CoreComponentIterator* ci); void* coreGetComponentsStart(CoreComponents* c); void* coreGetComponentsEnd(CoreComponents* c); #ifdef IMPORT_CORE #define Entity CoreEntity #define Components CoreComponents #define ComponentNode CoreComponentNode #define ComponentIterator CoreComponentIterator #define initComponents coreInitComponents #define destroyComponents coreDestroyComponents #define getOrAddComponent coreGetOrAddComponent #define searchComponent coreSearchComponent #define removeComponent coreRemoveComponent #define initComponentIterator coreInitComponentIterator #define hasNextComponentNode coreHasNextComponentNode #define nextComponentNode coreNextComponentNode #define getComponentsStart coreGetComponentsStart #define getComponentsEnd coreGetComponentsEnd #endif #endif