Skip to content
Flecs v4.1
flecs::query_builder_i< Base, Components > Struct Template Referenceabstract

Query builder interface. More...

#include <builder_i.hpp>

Public Member Functions

 query_builder_i (ecs_query_desc_t *desc, int32_t term_index=0)
 Construct from a query descriptor.
Base & query_flags (ecs_flags32_t flags)
 Set the query flags.
Base & cache_kind (query_cache_kind_t kind)
 Set the cache kind for the query.
Base & cached ()
 Enable auto-caching for the query.
Base & detect_changes ()
 Enable change detection for the query.
Base & expr (const char *expr)
 Set the query expression string.
template<typename T>
Base & with ()
template<typename First, typename Second>
Base & with ()
template<typename First, typename Second>
Base & with (Second second)
template<typename Arg>
Base & with (Arg &&arg)
template<typename First, typename Second>
Base & with (First first, Second second)
template<typename... T, typename... Args>
Base & without (Args &&... args)
Base & write ()
template<typename... T, typename... Args>
Base & write (Args &&... args)
Base & read ()
template<typename... T, typename... Args>
Base & read (Args &&... args)
Base & scope_open ()
 Open a query scope.
Base & scope_close ()
 Close a query scope.
Base & term ()
 Set the current term to the next one in the term list.
template<typename T>
Base & term_at ()
 Set the current term to the one with the provided type.
Base & term_at (int32_t term_index)
 Set the current term to the one at the provided index.
template<typename T>
Base & term_at (int32_t term_index)
 Set the current term to the one at the provided index and assert that the type matches.
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 the group_by() function.
Base & on_group_create (ecs_group_create_action_t action)
 Specify the on_group_create() action.
Base & on_group_delete (ecs_group_delete_action_t action)
 Specify the on_group_delete() action.
Public Member Functions inherited from flecs::term_builder_i< Base >
 term_builder_i ()
 Default constructor.
 term_builder_i (ecs_term_t *term_ptr)
 Construct from a term pointer.
Base & term (id_t id)
 Set the term ID.
template<typename T = void, typename... Args>
Base & src (Args... args)
template<typename T = void, typename... Args>
Base & first (Args... args)
template<typename T = void, typename... Args>
Base & second (Args... args)
Base & up (flecs::entity_t trav=0)
 The up flag indicates that the term identifier may be substituted by traversing a relationship upwards.
template<typename Trav>
Base & up ()
 Traverse upwards using the specified relationship type.
Base & cascade (flecs::entity_t trav=0)
 The cascade flag is like up(), but returns results in breadth-first order.
template<typename Trav>
Base & cascade ()
 Cascade using the specified relationship type.
Base & desc ()
 Use with cascade() to iterate results in descending (bottom-to-top) order.
Base & parent ()
 Same as up().
Base & trav (flecs::entity_t trav, flecs::flags32_t flags=0)
 Specify the relationship to traverse, and flags to indicate direction.
Base & id_flags (id_t flags)
 Set ID flags for the term.
Base & inout (flecs::inout_kind_t inout)
 Set read/write access of the term.
Base & inout_stage (flecs::inout_kind_t inout)
 Set read/write access for a 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::InOutNone).
Base & oper (flecs::oper_kind_t oper)
 Set the operator of the term.
Base & and_ ()
 Short for oper(flecs::And).
Base & or_ ()
 Short for oper(flecs::Or).
Base & not_ ()
 Short for oper(flecs::Not).
Base & optional ()
 Short for oper(flecs::Optional).
Base & and_from ()
 Short for oper(flecs::AndFrom).
Base & or_from ()
 Short for oper(flecs::OrFrom).
Base & not_from ()
 Short for oper(flecs::NotFrom).
Base & filter ()
 Mark the term as a filter.
Public Member Functions inherited from flecs::term_ref_builder_i< Base >
 term_ref_builder_i ()
 Default constructor.
virtual ~term_ref_builder_i ()
 Destructor.
Base & self ()
 The self flag indicates that the term identifier itself is used.
Base & id (flecs::entity_t id)
 Specify the value of the identifier by ID.
Base & entity (flecs::entity_t entity)
 Specify the value of the identifier by ID.
Base & name (const char *name)
 Specify the value of the identifier by name.
Base & var (const char *var_name)
 Specify that the identifier is a variable (resolved at query evaluation time).
Base & flags (flecs::flags64_t flags)
 Override the term ID flags.

Protected Member Functions

virtual flecs::world_tworld_v () override=0
Protected Member Functions inherited from flecs::term_builder_i< Base >
void set_term (ecs_term_t *term)
 Set the current term pointer.
Protected Member Functions inherited from flecs::term_ref_builder_i< Base >
void assert_term_ref ()

Protected Attributes

int32_t term_index_
int32_t expr_count_

Additional Inherited Members

Public Attributes inherited from flecs::term_builder_i< Base >
ecs_term_tterm_
 Pointer to the current term.
Public Attributes inherited from flecs::term_ref_builder_i< Base >
ecs_term_ref_tterm_ref_
 Pointer to the current term reference.

Detailed Description

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

Query builder interface.

Definition at line 18 of file builder_i.hpp.

Constructor & Destructor Documentation

◆ query_builder_i()

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

Construct from a query descriptor.

Definition at line 20 of file builder_i.hpp.

Member Function Documentation

◆ cache_kind()

template<typename Base, typename ... Components>
Base & flecs::query_builder_i< Base, Components >::cache_kind ( query_cache_kind_t kind)
inline

Set the cache kind for the query.

Definition at line 32 of file builder_i.hpp.

◆ cached()

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

Enable auto-caching for the query.

Definition at line 38 of file builder_i.hpp.

◆ detect_changes()

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

Enable change detection for the query.

Definition at line 43 of file builder_i.hpp.

◆ expr()

template<typename Base, typename ... Components>
Base & flecs::query_builder_i< Base, Components >::expr ( const char * expr)
inline

Set the query expression string.

Definition at line 49 of file builder_i.hpp.

◆ 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 the default group_by() action.

Template Parameters
TThe component used to determine the group rank.

Definition at line 280 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 the default group_by() action.

Parameters
componentThe component used to determine the group rank.

Definition at line 289 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(* group_by_action )(flecs::world_t *, flecs::table_t *table, flecs::id_t id, void *ctx) )
inline

Group and sort matched tables.

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

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

Definition at line 268 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(* group_by_action )(flecs::world_t *, flecs::table_t *table, flecs::id_t id, void *ctx))
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 if 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 the group ID for a table.

Definition at line 257 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 the group_by() function.

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

Definition at line 298 of file builder_i.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 the on_group_create() action.

Definition at line 305 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 the on_group_delete() action.

Definition at line 311 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(* compare )(flecs::entity_t, const void *, flecs::entity_t, const void *) )
inline

Sort the output of a query.

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

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

Definition at line 233 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(* compare )(flecs::entity_t, const T *, flecs::entity_t, const T *))
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 222 of file builder_i.hpp.

◆ query_flags()

template<typename Base, typename ... Components>
Base & flecs::query_builder_i< Base, Components >::query_flags ( ecs_flags32_t flags)
inline

Set the query flags.

Definition at line 26 of file builder_i.hpp.

◆ read() [1/2]

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

Definition at line 113 of file builder_i.hpp.

◆ read() [2/2]

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

Definition at line 118 of file builder_i.hpp.

◆ scope_close()

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

Close a query scope.

Definition at line 128 of file builder_i.hpp.

◆ scope_open()

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

Open a query scope.

Definition at line 123 of file builder_i.hpp.

◆ term()

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

Set the current term to the next one in the term list.

Definition at line 133 of file builder_i.hpp.

◆ term_at() [1/3]

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

Set the current term to the one with the provided type.

This loops over all terms to find the one with the provided type. For performance-critical paths, use term_at(int32_t) instead.

Definition at line 156 of file builder_i.hpp.

◆ term_at() [2/3]

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

Set the current term to the one at the provided index and assert that the type matches.

Definition at line 188 of file builder_i.hpp.

◆ term_at() [3/3]

template<typename Base, typename ... Components>
Base & flecs::query_builder_i< Base, Components >::term_at ( int32_t term_index)
inline

Set the current term to the one at the provided index.

Definition at line 174 of file builder_i.hpp.

◆ with() [1/5]

template<typename Base, typename ... Components>
template<typename First, typename Second>
Base & flecs::query_builder_i< Base, Components >::with ( )
inline

Definition at line 65 of file builder_i.hpp.

◆ with() [2/5]

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

Definition at line 60 of file builder_i.hpp.

◆ with() [3/5]

template<typename Base, typename ... Components>
template<typename Arg>
Base & flecs::query_builder_i< Base, Components >::with ( Arg && arg)
inline

Definition at line 75 of file builder_i.hpp.

◆ with() [4/5]

template<typename Base, typename ... Components>
template<typename First, typename Second>
Base & flecs::query_builder_i< Base, Components >::with ( First first,
Second second )
inline

Definition at line 93 of file builder_i.hpp.

◆ with() [5/5]

template<typename Base, typename ... Components>
template<typename First, typename Second>
Base & flecs::query_builder_i< Base, Components >::with ( Second second)
inline

Definition at line 70 of file builder_i.hpp.

◆ without()

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

Definition at line 100 of file builder_i.hpp.

◆ world_v()

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

◆ write() [1/2]

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

Definition at line 104 of file builder_i.hpp.

◆ write() [2/2]

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

Definition at line 109 of file builder_i.hpp.

Member Data Documentation

◆ expr_count_

template<typename Base, typename ... Components>
int32_t flecs::query_builder_i< Base, Components >::expr_count_
protected

Definition at line 319 of file builder_i.hpp.

◆ term_index_

template<typename Base, typename ... Components>
int32_t flecs::query_builder_i< Base, Components >::term_index_
protected

Definition at line 318 of file builder_i.hpp.


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