Flecs v3.2
A fast entity component system (ECS) for C & C++
Loading...
Searching...
No Matches
flecs::query_builder_i< Base, Components > Struct Template Referenceabstract

Query builder interface. More...

#include <builder_i.hpp>

Inheritance diagram for flecs::query_builder_i< Base, Components >:
[legend]

Public Member Functions

 query_builder_i (ecs_query_desc_t *desc, int32_t term_index=0)
 
template<typename T >
Base & order_by (int(*compare)(flecs::entity_t, const T *, flecs::entity_t, const T *))
 Sort the output of a query.
 
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.
 
template<typename T >
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.
 
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.
 
template<typename T >
Base & group_by ()
 Group and sort matched tables.
 
Base & group_by (flecs::entity_t component)
 Group and sort matched tables.
 
Base & group_by_ctx (void *ctx, ecs_ctx_free_t ctx_free=nullptr)
 Specify context to be passed to group_by function.
 
Base & on_group_create (ecs_group_create_action_t action)
 Specify on_group_create action.
 
Base & on_group_delete (ecs_group_delete_action_t action)
 Specify on_group_delete action.
 
Base & observable (const query_base &parent)
 Specify parent query (creates subquery)
 
- Public Member Functions inherited from flecs::filter_builder_i< Base, Components ... >
 filter_builder_i (ecs_filter_desc_t *desc, int32_t term_index=0)
 
Base & instanced ()
 
Base & filter_flags (ecs_flags32_t flags)
 
Base & expr (const char *expr)
 
Base & with (Args &&... args)
 
Base & with (Args &&... args)
 
Base & with ()
 
Base & without (Args &&... args)
 
Base & without (Args &&... args)
 
Base & without ()
 
Base & write ()
 
Base & write (Args &&... args)
 
Base & write (Args &&... args)
 
Base & write ()
 
Base & read ()
 
Base & read (Args &&... args)
 
Base & read (Args &&... args)
 
Base & read ()
 
Base & scope_open ()
 
Base & scope_close ()
 
Base & term ()
 
Base & term ()
 
Base & term (id_t id)
 
Base & term (const char *name)
 
Base & term (const char *first, const char *second)
 
Base & term (entity_t r, entity_t o)
 
Base & term (entity_t r, const char *o)
 
Base & term (id_t o)
 
Base & term (const char *second)
 
Base & term ()
 
Base & term (E value)
 
Base & term (flecs::term &term)
 
Base & term (flecs::term &&term)
 
Base & term_at (int32_t term_index)
 
Base & arg (int32_t term_index)
 
- Public Member Functions inherited from flecs::term_builder_i< Base >
 term_builder_i (ecs_term_t *term_ptr)
 
Base & term (id_t id)
 
Base & src ()
 
Base & first ()
 
Base & second ()
 
Base & src (flecs::entity_t id)
 
template<typename T >
Base & src ()
 
Base & src (const char *name)
 
Base & first (flecs::entity_t id)
 
template<typename T >
Base & first ()
 
Base & first (const char *name)
 
Base & second (flecs::entity_t id)
 
template<typename T >
Base & second ()
 
Base & second (const char *name)
 
Base & role (id_t role)
 Set role of term.
 
Base & inout (flecs::inout_kind_t inout)
 Set read/write access of term.
 
Base & inout_stage (flecs::inout_kind_t inout)
 Set read/write access for stage.
 
Base & write ()
 Short for inout_stage(flecs::Out).
 
Base & read ()
 Short for inout_stage(flecs::In).
 
Base & read_write ()
 Short for inout_stage(flecs::InOut).
 
Base & in ()
 Short for inout(flecs::In)
 
Base & out ()
 Short for inout(flecs::Out)
 
Base & inout ()
 Short for inout(flecs::InOut)
 
Base & inout_none ()
 Short for inout(flecs::In)
 
Base & oper (flecs::oper_kind_t oper)
 Set operator of term.
 
Base & and_ ()
 
Base & or_ ()
 
Base & not_ ()
 
Base & optional ()
 
Base & and_from ()
 
Base & or_from ()
 
Base & not_from ()
 
Base & singleton ()
 Match singleton.
 
Base & filter ()
 
- Public Member Functions inherited from flecs::term_id_builder_i< Base >
Base & self ()
 
Base & up (flecs::entity_t trav=0)
 
template<typename Trav >
Base & up ()
 
Base & cascade (flecs::entity_t trav=0)
 
template<typename Trav >
Base & cascade ()
 
Base & desc ()
 
Base & parent ()
 
Base & trav (flecs::entity_t trav, flecs::flags32_t flags=0)
 
Base & id (flecs::entity_t id)
 
Base & entity (flecs::entity_t entity)
 
Base & name (const char *name)
 
Base & var (const char *var_name)
 
Base & flags (flecs::flags32_t flags)
 

Protected Member Functions

virtual flecs::world_t * world_v ()=0
 
- Protected Member Functions inherited from flecs::term_builder_i< Base >
void set_term (ecs_term_t *term)
 

Additional Inherited Members

- Public Attributes inherited from flecs::term_builder_i< Base >
ecs_term_tm_term
 
- Public Attributes inherited from flecs::term_id_builder_i< Base >
ecs_term_id_tm_term_id
 
- Protected Attributes inherited from flecs::filter_builder_i< Base, Components ... >
int32_t m_term_index
 
int32_t m_expr_count
 

Detailed Description

template<typename Base, typename ... Components>
struct flecs::query_builder_i< Base, Components >

Query builder interface.

Definition at line 17 of file builder_i.hpp.

Constructor & Destructor Documentation

◆ query_builder_i() [1/2]

template<typename Base , typename ... Components>
flecs::query_builder_i< Base, Components >::query_builder_i ( )
inline

Definition at line 22 of file builder_i.hpp.

◆ query_builder_i() [2/2]

template<typename Base , typename ... Components>
flecs::query_builder_i< Base, Components >::query_builder_i ( ecs_query_desc_t * desc,
int32_t term_index = 0 )
inline

Definition at line 26 of file builder_i.hpp.

Member Function Documentation

◆ group_by() [1/4]

template<typename Base , typename ... Components>
template<typename T >
Base & flecs::query_builder_i< Base, Components >::group_by ( )
inline

Group and sort matched tables.

Same as group_by<T>, but with default group_by action.

Template Parameters
TThe component used to determine the group rank.

Definition at line 107 of file builder_i.hpp.

◆ group_by() [2/4]

template<typename Base , typename ... Components>
Base & flecs::query_builder_i< Base, Components >::group_by ( flecs::entity_t component)
inline

Group and sort matched tables.

Same as group_by, but with default group_by action.

Parameters
componentThe component used to determine the group rank.

Definition at line 116 of file builder_i.hpp.

◆ group_by() [3/4]

template<typename Base , typename ... Components>
Base & flecs::query_builder_i< Base, Components >::group_by ( flecs::entity_t component,
uint64_t(*)(flecs::world_t *, flecs::table_t *table, flecs::id_t id, void *ctx) group_by_action )
inline

Group and sort matched tables.

Same as group_by<T>, but with component identifier.

Parameters
componentThe component used to determine the group rank.
group_by_actionCallback that determines group id for table.

Definition at line 95 of file builder_i.hpp.

◆ group_by() [4/4]

template<typename Base , typename ... Components>
template<typename T >
Base & flecs::query_builder_i< Base, Components >::group_by ( uint64_t(*)(flecs::world_t *, flecs::table_t *table, flecs::id_t id, void *ctx) group_by_action)
inline

Group and sort matched tables.

Similar to ecs_query_order_by(), but instead of sorting individual entities, this operation only sorts matched tables. This can be useful of a query needs to enforce a certain iteration order upon the tables it is iterating, for example by giving a certain component or tag a higher priority.

The sorting function assigns a "rank" to each type, which is then used to sort the tables. Tables with higher ranks will appear later in the iteration.

Resorting happens when a query iterator is obtained, and only if the set of matched tables for a query has changed. If table sorting is enabled together with entity sorting, table sorting takes precedence, and entities will be sorted within each set of tables that are assigned the same rank.

Template Parameters
TThe component used to determine the group rank.
Parameters
group_by_actionCallback that determines group id for table.

Definition at line 84 of file builder_i.hpp.

◆ group_by_ctx()

template<typename Base , typename ... Components>
Base & flecs::query_builder_i< Base, Components >::group_by_ctx ( void * ctx,
ecs_ctx_free_t ctx_free = nullptr )
inline

Specify context to be passed to group_by function.

Parameters
ctxContext to pass to group_by function.
ctx_freeFunction to cleanup context (called when query is deleted).

Definition at line 125 of file builder_i.hpp.

◆ observable()

template<typename Base , typename ... Components>
Base & flecs::query_builder_i< Base, Components >::observable ( const query_base & parent)
inline

Specify parent query (creates subquery)

Definition at line 178 of file impl.hpp.

◆ on_group_create()

template<typename Base , typename ... Components>
Base & flecs::query_builder_i< Base, Components >::on_group_create ( ecs_group_create_action_t action)
inline

Specify on_group_create action.

Definition at line 133 of file builder_i.hpp.

◆ on_group_delete()

template<typename Base , typename ... Components>
Base & flecs::query_builder_i< Base, Components >::on_group_delete ( ecs_group_delete_action_t action)
inline

Specify on_group_delete action.

Definition at line 140 of file builder_i.hpp.

◆ order_by() [1/2]

template<typename Base , typename ... Components>
Base & flecs::query_builder_i< Base, Components >::order_by ( flecs::entity_t component,
int(*)(flecs::entity_t, const void *, flecs::entity_t, const void *) compare )
inline

Sort the output of a query.

Same as order_by<T>, but with component identifier.

Parameters
componentThe component used to sort.
compareThe compare function used to sort the components.

Definition at line 60 of file builder_i.hpp.

◆ order_by() [2/2]

template<typename Base , typename ... Components>
template<typename T >
Base & flecs::query_builder_i< Base, Components >::order_by ( int(*)(flecs::entity_t, const T *, flecs::entity_t, const T *) compare)
inline

Sort the output of a query.

This enables sorting of entities across matched tables. As a result of this operation, the order of entities in the matched tables may be changed. Resorting happens when a query iterator is obtained, and only if the table data has changed.

If multiple queries that match the same (down)set of tables specify different sorting functions, resorting is likely to happen every time an iterator is obtained, which can significantly slow down iterations.

The sorting function will be applied to the specified component. Resorting only happens if that component has changed, or when the entity order in the table has changed. If no component is provided, resorting only happens when the entity order changes.

Template Parameters
TThe component used to sort.
Parameters
compareThe compare function used to sort the components.

Definition at line 49 of file builder_i.hpp.

◆ world_v()

template<typename Base , typename ... Components>
virtual flecs::world_t * flecs::query_builder_i< Base, Components >::world_v ( )
protectedpure virtual

The documentation for this struct was generated from the following files: