2#include "gaia/config/config.h"
6#include "gaia/core/span.h"
7#include "gaia/ecs/command_buffer_fwd.h"
8#include "gaia/ecs/id_fwd.h"
9#include "gaia/ecs/query_fwd.h"
16 struct ComponentCacheItem;
17 struct EntityContainer;
22 const ComponentCache& comp_cache(
const World& world);
23 ComponentCache& comp_cache_mut(World& world);
29 const ComponentCacheItem& comp_cache_add(World& world);
33 const EntityContainer& fetch(
const World& world, Entity entity);
34 EntityContainer& fetch_mut(World& world, Entity entity);
36 void del(World& world, Entity entity);
38 Entity entity_from_id(
const World& world, EntityId
id);
39 Entity id_entity(
const World& world, Entity
id);
40 Entity pair_rel(
const World& world, Entity pair);
41 Entity pair_tgt(
const World& world, Entity pair);
47 bool valid(
const World& world, Entity entity);
49 bool is(
const World& world, Entity entity, Entity baseEntity);
50 bool is_base(
const World& world, Entity entity);
52 Archetype* archetype_from_entity(
const World& world, Entity entity);
54 util::str_view entity_name(
const World& world, Entity entity);
55 util::str_view entity_name(
const World& world, EntityId entityId);
56 Entity target(
const World& world, Entity entity, Entity relation);
60 world_for_each_target(
const World& world, Entity entity, Entity relation,
void* ctx,
void (*func)(
void*, Entity));
61 Entity world_pair_target_if_alive(
const World& world, Entity pair);
62 bool world_entity_enabled(
const World& world, Entity entity);
63 bool world_entity_enabled_hierarchy(
const World& world, Entity entity, Entity relation);
64 uint32_t world_enabled_hierarchy_version(
const World& world);
68 uint32_t world_archetype_delete_version(
const World& world);
72 uint32_t world_version(
const World& world);
77 uint32_t world_rel_version(
const World& world, Entity relation);
79 bool world_relation_is_non_fragmenting(
const World& world, Entity relation);
81 bool world_relation_is_hierarchy(
const World& world, Entity relation);
83 bool world_relation_is_fragmenting(
const World& world, Entity relation);
85 bool world_relation_is_fragmenting_hierarchy(
const World& world, Entity relation);
87 bool world_relation_supports_depth_order(
const World& world, Entity relation);
89 bool world_relation_depth_order_prunes_disabled_subtrees(
const World& world, Entity relation);
91 decltype(
auto) world_query_entity_arg_by_id(World& world, Entity entity, Entity
id);
95 template <
typename Func>
96 void as_relations_trav(
const World& world, Entity target, Func func);
97 template <
typename Func>
98 bool as_relations_trav_if(
const World& world, Entity target, Func func);
99 template <
typename Func>
100 void as_targets_trav(
const World& world, Entity relation, Func func);
101 template <
typename Func>
102 bool as_targets_trav_if(
const World& world, Entity relation, Func func);
103 template <
typename Func>
104 void targets_trav(
const World& world, Entity relation, Entity source, Func func);
105 template <
typename Func>
106 bool targets_trav_if(
const World& world, Entity relation, Entity source, Func func);
107 const cnt::darray<Entity>& targets_trav_cache(
const World& world, Entity relation, Entity source);
108 template <
typename Func>
109 void sources(
const World& world, Entity relation, Entity target, Func func);
110 template <
typename Func>
111 void sources_if(
const World& world, Entity relation, Entity target, Func func);
112 const cnt::darray<Entity>& sources_bfs_trav_cache(
const World& world, Entity relation, Entity rootTarget);
113 template <
typename Func>
114 void sources_bfs(
const World& world, Entity relation, Entity rootTarget, Func func);
115 template <
typename Func>
116 bool sources_bfs_if(
const World& world, Entity relation, Entity rootTarget, Func func);
119 QuerySerBuffer& query_buffer(World& world, QueryId& serId);
120 void query_buffer_reset(World& world, QueryId& serId);
122 Entity expr_to_entity(
const World& world, va_list& args, std::span<const char> exprRaw);
124 GroupId group_by_func_default(
const World& world,
const Archetype& archetype, Entity groupBy);
128 void lock(World& world);
129 void unlock(World& world);
130 bool locked(
const World& world);
132#if GAIA_OBSERVERS_ENABLED
139 void world_defer_on_set_begin(World& world, uint32_t slotCount);
140 void world_defer_on_set_end(World& world);
153 inline static constexpr uint32_t BadDeferSlot = (uint32_t)-1;
155 void world_defer_sort_inv_begin(World& world, uint32_t slotCount);
156 void world_defer_sort_inv_end(World& world);
160 void world_defer_parallel_begin(World& world, uint32_t itemCount);
161 void world_defer_parallel_end(World& world);
168 GAIA_NODISCARD
inline uint32_t& defer_slot_ref() {
169 static thread_local uint32_t s_slot = BadDeferSlot;
174 GAIA_NODISCARD
inline uint32_t defer_slot() {
175 return defer_slot_ref();
183 explicit DeferSlotScope(uint32_t slot): m_prev(defer_slot_ref()) {
184 defer_slot_ref() = slot;
187 defer_slot_ref() = m_prev;
200 void commit_cmd_buffer_st(
World& world);
201 void commit_cmd_buffer_mt(
World& world);
Binds the calling thread to a work-item deferral slot for the lifetime of the scope.
Definition api.h:179
Owns entities, components, archetypes, queries, observers, and systems.
Definition world.h:80
Buffer for deferred execution of some operations on entities.
Definition command_buffer.h:52