Flecs v3.2
A fast entity component system (ECS) for C & C++
Loading...
Searching...
No Matches
builder_i.hpp
Go to the documentation of this file.
1
6#pragma once
7
9
10namespace flecs {
11
16template<typename Base, typename ... Components>
17struct query_builder_i : filter_builder_i<Base, Components ...> {
18private:
19 using BaseClass = filter_builder_i<Base, Components ...>;
20
21public:
23 : BaseClass(nullptr)
24 , m_desc(nullptr) { }
25
26 query_builder_i(ecs_query_desc_t *desc, int32_t term_index = 0)
27 : BaseClass(&desc->filter, term_index)
28 , m_desc(desc) { }
29
48 template <typename T>
49 Base& order_by(int(*compare)(flecs::entity_t, const T*, flecs::entity_t, const T*)) {
50 ecs_order_by_action_t cmp = reinterpret_cast<ecs_order_by_action_t>(compare);
51 return this->order_by(_::cpp_type<T>::id(this->world_v()), cmp);
52 }
53
60 Base& order_by(flecs::entity_t component, int(*compare)(flecs::entity_t, const void*, flecs::entity_t, const void*)) {
61 m_desc->order_by = reinterpret_cast<ecs_order_by_action_t>(compare);
63 return *this;
64 }
65
83 template <typename T>
84 Base& group_by(uint64_t(*group_by_action)(flecs::world_t*, flecs::table_t *table, flecs::id_t id, void* ctx)) {
85 ecs_group_by_action_t action = reinterpret_cast<ecs_group_by_action_t>(group_by_action);
86 return this->group_by(_::cpp_type<T>::id(this->world_v()), action);
87 }
88
95 Base& group_by(flecs::entity_t component, uint64_t(*group_by_action)(flecs::world_t*, flecs::table_t *table, flecs::id_t id, void* ctx)) {
96 m_desc->group_by = reinterpret_cast<ecs_group_by_action_t>(group_by_action);
97 m_desc->group_by_id = component;
98 return *this;
99 }
100
106 template <typename T>
107 Base& group_by() {
108 return this->group_by(_::cpp_type<T>::id(this->world_v()), nullptr);
109 }
110
116 Base& group_by(flecs::entity_t component) {
117 return this->group_by(component, nullptr);
118 }
119
125 Base& group_by_ctx(void *ctx, ecs_ctx_free_t ctx_free = nullptr) {
126 m_desc->group_by_ctx = ctx;
127 m_desc->group_by_ctx_free = ctx_free;
128 return *this;
129 }
130
133 Base& on_group_create(ecs_group_create_action_t action) {
134 m_desc->on_group_create = action;
135 return *this;
136 }
137
140 Base& on_group_delete(ecs_group_delete_action_t action) {
141 m_desc->on_group_delete = action;
142 return *this;
143 }
144
146 Base& observable(const query_base& parent);
147
148protected:
149 virtual flecs::world_t* world_v() = 0;
150
151private:
152 operator Base&() {
153 return *static_cast<Base*>(this);
154 }
155
156 ecs_query_desc_t *m_desc;
157};
158
159}
Filter builder interface.
uint64_t(* ecs_group_by_action_t)(ecs_world_t *world, ecs_table_t *table, ecs_id_t group_id, void *ctx)
Callback used for grouping tables in a query.
Definition flecs.h:597
void(* ecs_ctx_free_t)(void *ctx)
Function to cleanup context data.
Definition flecs.h:626
int(* ecs_order_by_action_t)(ecs_entity_t e1, const void *ptr1, ecs_entity_t e2, const void *ptr2)
Callback used for comparing components.
Definition flecs.h:579
Used with ecs_query_init().
Definition flecs.h:1035
ecs_order_by_action_t order_by
Callback used for ordering query results.
Definition flecs.h:1047
ecs_id_t group_by_id
Id to be used by group_by.
Definition flecs.h:1056
ecs_group_by_action_t group_by
Callback used for grouping results.
Definition flecs.h:1063
ecs_ctx_free_t group_by_ctx_free
Function to free group_by_ctx.
Definition flecs.h:1077
void * group_by_ctx
Context to pass to group_by.
Definition flecs.h:1074
ecs_group_create_action_t on_group_create
Callback that is invoked when a new group is created.
Definition flecs.h:1067
ecs_entity_t order_by_component
Component to be used by order_by.
Definition flecs.h:1042
ecs_filter_desc_t filter
Filter for the query.
Definition flecs.h:1039
ecs_group_delete_action_t on_group_delete
Callback that is invoked when an existing group is deleted.
Definition flecs.h:1071
Component class.
Filter builder interface.
Definition builder_i.hpp:18
Query builder interface.
Definition builder_i.hpp:17
Base & group_by()
Group and sort matched tables.
Base & on_group_delete(ecs_group_delete_action_t action)
Specify on_group_delete action.
Base & group_by(flecs::entity_t component, uint64_t(*group_by_action)(flecs::world_t *, flecs::table_t *table, flecs::id_t id, void *ctx))
Group and sort matched tables.
Definition builder_i.hpp:95
Base & on_group_create(ecs_group_create_action_t action)
Specify on_group_create action.
Base & group_by(flecs::entity_t component)
Group and sort matched tables.
Base & observable(const query_base &parent)
Specify parent query (creates subquery)
Definition impl.hpp:178
Base & group_by(uint64_t(*group_by_action)(flecs::world_t *, flecs::table_t *table, flecs::id_t id, void *ctx))
Group and sort matched tables.
Definition builder_i.hpp:84
Base & order_by(int(*compare)(flecs::entity_t, const T *, flecs::entity_t, const T *))
Sort the output of a query.
Definition builder_i.hpp:49
Base & group_by_ctx(void *ctx, ecs_ctx_free_t ctx_free=nullptr)
Specify context to be passed to group_by function.
Base & order_by(flecs::entity_t component, int(*compare)(flecs::entity_t, const void *, flecs::entity_t, const void *))
Sort the output of a query.
Definition builder_i.hpp:60