Gaia-ECS v0.9.3
A simple and powerful entity component system
Loading...
Searching...
No Matches
chunk_header.h
1#pragma once
2#include "gaia/config/config.h"
3
4#include <cstdint>
5
6#include "gaia/cnt/bitset.h"
7#include "gaia/core/utility.h"
8#include "gaia/ecs/archetype_common.h"
9#include "gaia/ecs/chunk_allocator.h"
10#include "gaia/ecs/component.h"
11#include "gaia/ecs/id.h"
12
13namespace gaia {
14 namespace ecs {
15 class World;
16 class ComponentCache;
17 struct ComponentCacheItem;
18
19 struct GAIA_API ChunkDataOffsets {
21 ChunkDataVersionOffset firstByte_Versions{};
23 ChunkDataOffset firstByte_CompEntities{};
25 ChunkDataOffset firstByte_Records{};
27 ChunkDataOffset firstByte_EntityData{};
28 };
29
30 struct GAIA_API ComponentRecord {
34 uint8_t* pData;
37 };
38
39 struct GAIA_API ChunkRecords {
41 ComponentVersion* pVersions{};
43 Entity* pCompEntities{};
45 ComponentRecord* pRecords{};
47 Entity* pEntities{};
48 };
49
50 struct GAIA_API ChunkHeader final {
51 static constexpr uint32_t MAX_COMPONENTS_BITS = 5U;
53 static constexpr uint32_t MAX_COMPONENTS = 1U << MAX_COMPONENTS_BITS;
54
57 static constexpr uint16_t MAX_CHUNK_ENTITIES = (mem_block_size(2) - 64) / sizeof(Entity);
58 static constexpr uint16_t MAX_CHUNK_ENTITIES_BITS = (uint16_t)core::count_bits(MAX_CHUNK_ENTITIES);
59
60 static constexpr uint16_t CHUNK_LIFESPAN_BITS = 4;
62 static constexpr uint16_t MAX_CHUNK_LIFESPAN = (1 << CHUNK_LIFESPAN_BITS) - 1;
63
65 const World* world;
69 uint32_t index;
71 uint16_t count;
73 uint16_t countEnabled;
75 uint16_t capacity;
76
78 uint16_t rowFirstEnabledEntity : MAX_CHUNK_ENTITIES_BITS;
80 uint16_t hasAnyCustomGenCtor : 1;
82 uint16_t hasAnyCustomUniCtor : 1;
84 uint16_t hasAnyCustomGenDtor : 1;
86 uint16_t hasAnyCustomUniDtor : 1;
88 uint16_t lifespanCountdown : CHUNK_LIFESPAN_BITS;
90 uint16_t dead : 1;
92 uint16_t unused : 11;
93
95 uint8_t genEntities;
97 uint8_t cntEntities;
99 uint32_t& worldVersion;
100
101 static inline uint32_t s_worldVersionDummy = 0;
102 ChunkHeader(): worldVersion(s_worldVersionDummy) {}
103
105 const World& wld, const ComponentCache& compCache, uint32_t chunkIndex, uint16_t cap, uint8_t genEntitiesCnt,
106 uint32_t& version):
107 world(&wld), cc(&compCache), index(chunkIndex), count(0), countEnabled(0), capacity(cap),
108 //
109 rowFirstEnabledEntity(0), hasAnyCustomGenCtor(0), hasAnyCustomUniCtor(0), hasAnyCustomGenDtor(0),
110 hasAnyCustomUniDtor(0), lifespanCountdown(0), dead(0), unused(0),
111 //
112 genEntities(genEntitiesCnt), cntEntities(0), worldVersion(version) {
113 // Make sure the alignment is right
114 GAIA_ASSERT(uintptr_t(this) % (sizeof(size_t)) == 0);
115 }
116
117 bool has_disabled_entities() const {
118 return rowFirstEnabledEntity > 0;
119 }
120
121 bool has_enabled_entities() const {
122 return countEnabled > 0;
123 }
124 };
125 } // namespace ecs
126} // namespace gaia
Cache for compile-time defined components.
Definition component_cache.h:23
Definition world.h:48
Checks if endianess was detected correctly at compile-time.
Definition bitset.h:9
Definition chunk_header.h:19
Definition chunk_header.h:50
uint32_t & worldVersion
Version of the world (stable pointer to parent world's world version)
Definition chunk_header.h:99
const ComponentCache * cc
Component cache reference.
Definition chunk_header.h:67
uint32_t index
Chunk index in its archetype list.
Definition chunk_header.h:69
uint16_t capacity
Capacity (copied from the owner archetype).
Definition chunk_header.h:75
uint16_t hasAnyCustomGenCtor
True if there's any generic component that requires custom construction.
Definition chunk_header.h:80
uint16_t dead
True if deleted, false otherwise.
Definition chunk_header.h:90
uint16_t hasAnyCustomUniDtor
True if there's any unique component that requires custom destruction.
Definition chunk_header.h:86
uint16_t hasAnyCustomGenDtor
True if there's any generic component that requires custom destruction.
Definition chunk_header.h:84
uint16_t unused
Empty space for future use.
Definition chunk_header.h:92
uint8_t cntEntities
Number of components on the archetype.
Definition chunk_header.h:97
uint8_t genEntities
Number of generic entities/components.
Definition chunk_header.h:95
uint16_t lifespanCountdown
When it hits 0 the chunk is scheduled for deletion.
Definition chunk_header.h:88
uint16_t countEnabled
Number of enabled entities in the chunk.
Definition chunk_header.h:73
const World * world
Parent world.
Definition chunk_header.h:65
uint16_t rowFirstEnabledEntity
Index of the first enabled entity in the chunk.
Definition chunk_header.h:78
uint16_t count
Total number of entities in the chunk.
Definition chunk_header.h:71
uint16_t hasAnyCustomUniCtor
True if there's any unique component that requires custom construction.
Definition chunk_header.h:82
Definition chunk_header.h:39
Definition component_cache_item.h:24
Definition chunk_header.h:30
const ComponentCacheItem * pItem
Pointer to component cache record.
Definition chunk_header.h:36
Component comp
Component id.
Definition chunk_header.h:32
uint8_t * pData
Pointer to where the first instance of the component is stored.
Definition chunk_header.h:34
Definition id.h:25
Definition id.h:225