Flecs v3.2
A fast entity component system (ECS) for C & C++
Loading...
Searching...
No Matches
iter.hpp
Go to the documentation of this file.
1
6#pragma once
7
8namespace flecs
9{
10
11inline flecs::entity iter::system() const {
12 return flecs::entity(m_iter->world, m_iter->system);
13}
14
15inline flecs::entity iter::event() const {
16 return flecs::entity(m_iter->world, m_iter->event);
17}
18
19inline flecs::id iter::event_id() const {
20 return flecs::id(m_iter->world, m_iter->event_id);
21}
22
23inline flecs::world iter::world() const {
24 return flecs::world(m_iter->world);
25}
26
27inline flecs::entity iter::entity(size_t row) const {
28 ecs_assert(row < static_cast<size_t>(m_iter->count),
29 ECS_COLUMN_INDEX_OUT_OF_RANGE, NULL);
30 return flecs::entity(m_iter->world, m_iter->entities[row]);
31}
32
33inline flecs::entity iter::src(int32_t index) const {
34 return flecs::entity(m_iter->world, ecs_field_src(m_iter, index));
35}
36
37inline flecs::id iter::id(int32_t index) const {
38 return flecs::id(m_iter->world, ecs_field_id(m_iter, index));
39}
40
41inline flecs::id iter::pair(int32_t index) const {
42 flecs::id_t id = ecs_field_id(m_iter, index);
43 ecs_check(ECS_HAS_ID_FLAG(id, PAIR), ECS_INVALID_PARAMETER, NULL);
44 return flecs::id(m_iter->world, id);
45error:
46 return flecs::id();
47}
48
49inline flecs::type iter::type() const {
50 return flecs::type(m_iter->world, ecs_table_get_type(m_iter->table));
51}
52
53inline flecs::table iter::table() const {
54 return flecs::table(m_iter->real_world, m_iter->table);
55}
56
57inline flecs::table_range iter::range() const {
58 return flecs::table_range(m_iter->real_world, m_iter->table,
59 m_iter->offset, m_iter->count);
60}
61
62template <typename T, typename A,
63 typename std::enable_if<std::is_const<T>::value, void>::type*>
64inline flecs::field<A> iter::field(int32_t index) const {
65 ecs_assert(!(m_iter->flags & EcsIterCppEach), ECS_INVALID_OPERATION,
66 "cannot .field from .each, use .field_at<const %s>(%d, row) instead",
67 _::type_name<T>(), index);
68 return get_field<A>(index);
69}
70
71template <typename T, typename A,
72 typename std::enable_if<
73 std::is_const<T>::value == false, void>::type*>
74inline flecs::field<A> iter::field(int32_t index) const {
75 ecs_assert(!(m_iter->flags & EcsIterCppEach), ECS_INVALID_OPERATION,
76 "cannot .field from .each, use .field_at<%s>(%d, row) instead",
77 _::type_name<T>(), index);
78 ecs_assert(!ecs_field_is_readonly(m_iter, index),
79 ECS_ACCESS_VIOLATION, NULL);
80 return get_field<A>(index);
81}
82
83#ifdef FLECS_RULES
84inline flecs::entity iter::get_var(int var_id) const {
85 ecs_assert(var_id != -1, ECS_INVALID_PARAMETER, 0);
86 return flecs::entity(m_iter->world, ecs_iter_get_var(m_iter, var_id));
87}
88
92inline flecs::entity iter::get_var(const char *name) const {
93 ecs_rule_iter_t *rit = &m_iter->priv.iter.rule;
94 const flecs::rule_t *r = rit->rule;
95 int var_id = ecs_rule_find_var(r, name);
96 ecs_assert(var_id != -1, ECS_INVALID_PARAMETER, name);
97 return flecs::entity(m_iter->world, ecs_iter_get_var(m_iter, var_id));
98}
99#endif
100
101} // namespace flecs
#define ecs_assert(condition, error_code,...)
Assert.
Definition log.h:351
#define ecs_check(condition, error_code,...)
Check.
Definition log.h:398
FLECS_API int32_t ecs_rule_find_var(const ecs_rule_t *rule, const char *name)
Find variable index.
ecs_id_t ecs_field_id(const ecs_iter_t *it, int32_t index)
Return id matched for field.
bool ecs_field_is_readonly(const ecs_iter_t *it, int32_t index)
Test whether the field is readonly.
ecs_entity_t ecs_iter_get_var(ecs_iter_t *it, int32_t var_id)
Get value of iterator variable as entity.
ecs_entity_t ecs_field_src(const ecs_iter_t *it, int32_t index)
Return field source.
const ecs_type_t * ecs_table_get_type(const ecs_table_t *table)
Get type for table.
Entity.
Definition entity.hpp:30
Wrapper class around a field.
Definition field.hpp:61
Class that wraps around a flecs::id_t.
Definition decl.hpp:27
flecs::id id(int32_t index) const
Obtain id matched for field.
Definition iter.hpp:37
flecs::entity src(int32_t index) const
Obtain field source (0 if This).
Definition iter.hpp:33
flecs::field< A > field(int32_t index) const
Get readonly access to field data.
Definition iter.hpp:64
flecs::entity entity(size_t row) const
Obtain mutable handle to entity being iterated over.
Definition iter.hpp:27
flecs::id pair(int32_t index) const
Obtain pair id matched for field.
Definition iter.hpp:41
flecs::entity get_var(int var_id) const
Get value of variable by id.
Definition iter.hpp:84
Type class.
Definition type.hpp:21
The world.
Definition world.hpp:132