struct
#include <core/ecs/query/term.hpp>
QueryTerm Describes a term in a query.
Terms are the building blocks used to build queries. Each term adds some restriction to what the query will match. There are three kinds of terms:
- Component terms, which allow filtering match entities by those which have or don't have a given component.
- Relation terms, which allow filtering match entities by some relation between them.
- Entity terms, which don't filter the results but allow accessing one of the matched entities.
Public types
Public static functions
- static auto makeEntity(int target) -> QueryTerm
- Returns a new entity term for the given target.
- static auto makeWithComponent(DataTypeId type, int target) -> QueryTerm
- Returns a new component term for the given component and target.
- static auto makeWithoutComponent(DataTypeId type, int target) -> QueryTerm
- Returns a new negated component term for the given component and target.
- static auto makeOptComponent(DataTypeId type, int target) -> QueryTerm
- Returns a new optional component term for the given component and target.
-
static auto makeRelation(DataTypeId type,
int fromTarget,
int toTarget,
Traversal traversal = Traversal::
Random) -> QueryTerm - Returns a new relation term for the given relation and targets.
- static auto resolve(const Types& types, const std::vector<QueryTerm>& baseTerms, std::vector<QueryTerm>& otherTerms) -> std::vector<QueryTerm>
- Merges a vector of terms with another, joining pairs of them if possible.
- static auto toString(const Types& types, const std::vector<QueryTerm>& terms) -> std::string
- Gets a string representation of vector of query terms.
Public functions
- auto isEntity() const -> bool
- Checks if the term is an entity term.
- auto isComponent(const Types& types) const -> bool
- Checks if the term is a component term.
- auto isRelation(const Types& types) const -> bool
- Checks if the term is a relation term.
- auto compare(const Types& types, const QueryTerm& other) const -> bool
- Compares two terms.
Public variables
Function documentation
static QueryTerm cubos:: core:: ecs:: QueryTerm:: makeEntity(int target)
Returns a new entity term for the given target.
Parameters | |
---|---|
target | Index of the target which will be accessed. |
Returns | Entity term. |
static QueryTerm cubos:: core:: ecs:: QueryTerm:: makeWithComponent(DataTypeId type,
int target)
Returns a new component term for the given component and target.
Parameters | |
---|---|
type | Component type. |
target | Index of the target which must have the component. |
Returns | Component term. |
static QueryTerm cubos:: core:: ecs:: QueryTerm:: makeWithoutComponent(DataTypeId type,
int target)
Returns a new negated component term for the given component and target.
Parameters | |
---|---|
type | Component type. |
target | Index of the target which must not have the component. |
Returns | Component term. |
static QueryTerm cubos:: core:: ecs:: QueryTerm:: makeOptComponent(DataTypeId type,
int target)
Returns a new optional component term for the given component and target.
Parameters | |
---|---|
type | Component type. |
target | Index of the target which may have the component. |
Returns | Component term. |
static QueryTerm cubos:: core:: ecs:: QueryTerm:: makeRelation(DataTypeId type,
int fromTarget,
int toTarget,
Traversal traversal = Traversal:: Random)
Returns a new relation term for the given relation and targets.
Parameters | |
---|---|
type | Relation type. |
fromTarget | Index of the target which must have the 'from' side of the relation. |
toTarget | Index of the target which must have the 'to' side of the relation. |
traversal | Traversal order for the relation. |
Returns | Relation term. |
static std::vector<QueryTerm> cubos:: core:: ecs:: QueryTerm:: resolve(const Types& types,
const std::vector<QueryTerm>& baseTerms,
std::vector<QueryTerm>& otherTerms)
Merges a vector of terms with another, joining pairs of them if possible.
Parameters | |
---|---|
types | Type registry. |
baseTerms | Base vector of terms. |
otherTerms in/out | Vector of terms to merge into the base. Targets will be modified, if set to -1. |
Returns | Result of merging the two vectors. |
This function is mainly used to merge terms specified manually for a query with terms obtained from its argument types. For example, if we have a query of the form Query<A&, A&>
, we will obtain the terms makeWithComponent(A, -1)
and makeWithComponent(A, -1)
. Those term would be passed into other
. If we passed to base
the terms makeWithComponent(A, 0)
and makeWithComponent(A, 1)
, then, the base wouldn't be modified, and the other
vector would have its targets updated so that it matches the base
.
Any targets found set to -1 will be set to the current default target. The default target is initially 0, and always changes to the last seen non -1 target. If a relation term has one of the targets undefined, the default target is incremented.
Another example would be to have an empty base vector, and the query Query<A&, B&>
. The other
vector would be {makeWithComponent(A, -1), makeWithComponent(B, -1)}
, and the returned vector would be {makeWithComponent(A, 0), makeWithComponent(B, 0)}
.
bool cubos:: core:: ecs:: QueryTerm:: isEntity() const
Checks if the term is an entity term.
Returns | Whether it's an entity term. |
---|
bool cubos:: core:: ecs:: QueryTerm:: isComponent(const Types& types) const
Checks if the term is a component term.
Parameters | |
---|---|
types | Types registry. |
Returns | Whether it's a component term. |
bool cubos:: core:: ecs:: QueryTerm:: isRelation(const Types& types) const
Checks if the term is a relation term.
Parameters | |
---|---|
types | Types registry. |
Returns | Whether it's a relation term. |
Variable documentation
DataTypeId cubos:: core:: ecs:: QueryTerm:: type
Type of the data matched by the term.
If this is set to DataTypeId::