Helios Engine 0.1.0
A modular ECS based data-oriented C++23 game engine
 
Loading...
Searching...
No Matches
helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components > Class Template Reference

Wrapper for queries that include entity in iteration. More...

#include <query.hpp>

Public Types

using iterator = details::QueryWithEntityIterator< Components... >
 
using value_type = std::iter_value_t< details::QueryWithEntityIterator< Components... > >
 
using difference_type = std::iter_difference_t< details::QueryWithEntityIterator< Components... > >
 
using pointer = typename iterator::pointer
 
using reference = std::iter_reference_t< details::QueryWithEntityIterator< Components... > >
 
using allocator_type = Allocator
 

Public Member Functions

 BasicQueryWithEntity (BasicQuery< WorldT, Allocator, Components... > &query) noexcept
 Constructs entity-aware query wrapper.
 
 BasicQueryWithEntity (const BasicQueryWithEntity &)=delete
 
 BasicQueryWithEntity (BasicQueryWithEntity &&)=delete
 
 ~BasicQueryWithEntity () noexcept=default
 
BasicQueryWithEntityoperator= (const BasicQueryWithEntity &)=delete
 
BasicQueryWithEntityoperator= (BasicQueryWithEntity &&)=delete
 
auto Collect () const -> std::vector< value_type >
 
template<typename ResultAlloc >
requires std::same_as<typename ResultAlloc::value_type, std::iter_value_t<details::QueryWithEntityIterator<Components...>>>
auto CollectWith (ResultAlloc alloc) const -> std::vector< value_type, ResultAlloc >
 
auto CollectEntities () const -> std::vector< Entity >
 
template<typename ResultAlloc >
requires std::same_as<typename ResultAlloc::value_type, Entity>
auto CollectEntitiesWith (ResultAlloc alloc) const -> std::vector< Entity, ResultAlloc >
 Collects all entities into a vector using a custom allocator.
 
template<typename OutIt >
requires std::output_iterator<OutIt, std::iter_value_t<details::QueryWithEntityIterator<Components...>>>
void Into (OutIt out)
 
template<typename Action >
requires utils::ActionFor<Action, std::tuple<Entity, details::ComponentAccessType<Components>...>>
void ForEach (const Action &action)
 
template<typename KeyFunc >
requires utils::TransformFor<KeyFunc, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto MaxBy (const KeyFunc &key_func) const -> std::optional< value_type >
 
template<typename KeyFunc >
requires utils::TransformFor<KeyFunc, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto MinBy (const KeyFunc &key_func) const -> std::optional< value_type >
 
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto Filter (Pred predicate) const &-> utils::FilterAdapter< iterator, Pred >
 
template<typename Func >
requires utils::TransformFor<Func, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto Map (Func transform) const &-> utils::MapAdapter< iterator, Func >
 
auto Take (size_t count) const &-> utils::TakeAdapter< iterator >
 
auto Skip (size_t count) const &-> utils::SkipAdapter< iterator >
 
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto TakeWhile (Pred predicate) const &-> utils::TakeWhileAdapter< iterator, Pred >
 
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto SkipWhile (Pred predicate) const &-> utils::SkipWhileAdapter< iterator, Pred >
 
auto Enumerate () const &-> utils::EnumerateAdapter< iterator >
 
template<typename Func >
requires utils::InspectorFor<Func, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto Inspect (Func inspector) const &-> utils::InspectAdapter< iterator, Func >
 
auto StepBy (size_t step) const &-> utils::StepByAdapter< iterator >
 
auto Reverse () const &-> utils::ReverseAdapter< iterator >
 
auto Slide (size_t window_size) const &-> utils::SlideAdapter< iterator >
 
auto Stride (size_t stride) const &-> utils::StrideAdapter< iterator >
 
template<typename OtherIter >
requires utils::IteratorLike<OtherIter>
auto Zip (OtherIter other_begin, OtherIter other_end) const &-> utils::ZipAdapter< iterator, OtherIter >
 
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
bool Any (const Pred &predicate)
 
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
bool All (const Pred &predicate)
 
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
bool None (const Pred &predicate)
 
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto FindFirst (const Pred &predicate) -> std::optional< value_type >
 
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
size_t CountIf (const Pred &predicate)
 
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto Partition (const Pred &predicate) -> std::pair< std::vector< Entity >, std::vector< Entity > >
 
template<typename KeyExtractor >
requires utils::TransformFor<KeyExtractor, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto GroupBy (const KeyExtractor &key_extractor) -> std::unordered_map< std::invoke_result_t< KeyExtractor, Entity, details::ComponentAccessType< Components >... >, std::vector< Entity > >
 
iterator begin () const
 Gets iterator to first matching entity and components.
 
iterator end () const
 Gets iterator past the last matching entity.
 

Detailed Description

template<WorldType WorldT, typename Allocator, ComponentTrait... Components>
requires utils::UniqueTypes<Components...>
class helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >

Wrapper for queries that include entity in iteration.

Provides iteration interface that returns both entity and components. Supports const-qualified component access for read-only operations.

Note
Not thread-safe.
Template Parameters
WorldTWorld type (World or const World), must satisfy WorldType concept
AllocatorAllocator type for internal storage
ComponentsRequested component access types (may include const qualifiers)

Definition at line 568 of file query.hpp.

Member Typedef Documentation

◆ allocator_type

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
using helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::allocator_type = Allocator

◆ difference_type

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
using helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::difference_type = std::iter_difference_t<details::QueryWithEntityIterator<Components...> >

◆ iterator

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
using helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::iterator = details::QueryWithEntityIterator<Components...>

◆ pointer

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
using helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::pointer = typename iterator::pointer

◆ reference

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
using helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::reference = std::iter_reference_t<details::QueryWithEntityIterator<Components...> >

◆ value_type

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
using helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::value_type = std::iter_value_t<details::QueryWithEntityIterator<Components...> >

Constructor & Destructor Documentation

◆ BasicQueryWithEntity() [1/3]

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::BasicQueryWithEntity ( BasicQuery< WorldT, Allocator, Components... > &  query)
inlineexplicitnoexcept

Constructs entity-aware query wrapper.

Parameters
queryReference to the underlying query

Definition at line 581 of file query.hpp.

581: query_(query) {}
BasicQuery< World, Allocator, Components... > Query
Type alias for query with mutable world access.
Definition query.hpp:2481

◆ BasicQueryWithEntity() [2/3]

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::BasicQueryWithEntity ( const BasicQueryWithEntity< WorldT, Allocator, Components > &  )
delete

◆ BasicQueryWithEntity() [3/3]

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::BasicQueryWithEntity ( BasicQueryWithEntity< WorldT, Allocator, Components > &&  )
delete

◆ ~BasicQueryWithEntity()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::~BasicQueryWithEntity ( )
defaultnoexcept

Member Function Documentation

◆ All()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
bool helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::All ( const Pred predicate)
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1925 of file query.hpp.

1925 {
1926 for (auto&& result : *this) {
1927 if (!std::apply(predicate, result)) {
1928 return false;
1929 }
1930 }
1931 return true;
1932}

◆ Any()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
bool helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::Any ( const Pred predicate)
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 938 of file query.hpp.

938 {
939 return FindFirst(predicate).has_value();
940 }
auto FindFirst(const Pred &predicate) -> std::optional< value_type >
Definition query.hpp:1835

◆ begin()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::UniqueTypes<Components...>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::begin ( ) const
inline

Gets iterator to first matching entity and components.

Returns
Iterator pointing to first result
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1974 of file query.hpp.

1974 {
1975 query_.RefreshArchetypes();
1976 return {query_.GetMatchingArchetypes(), query_.GetComponents(), 0, 0};
1977}

◆ Collect()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::UniqueTypes<Components...>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::Collect ( ) const -> std::vector<value_type>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1653 of file query.hpp.

1653 {
1654 std::vector<value_type> result;
1655 result.reserve(query_.Count());
1656 for (auto&& tuple : *this) {
1657 result.push_back(tuple);
1658 }
1659 return result;
1660}
size_t Count() const noexcept
Gets the number of matching entities.
Definition query.hpp:2306

◆ CollectEntities()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::UniqueTypes<Components...>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::CollectEntities ( ) const -> std::vector<Entity>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1679 of file query.hpp.

1679 {
1680 std::vector<Entity> result;
1681 result.reserve(query_.Count());
1682 for (auto&& tuple : *this) {
1683 result.push_back(std::get<0>(tuple));
1684 }
1685 return result;
1686}

◆ CollectEntitiesWith()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires std::same_as<typename ResultAlloc::value_type, Entity>
template<typename ResultAlloc >
requires std::same_as<typename ResultAlloc::value_type, Entity>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::CollectEntitiesWith ( ResultAlloc  alloc) const -> std::vector<Entity, ResultAlloc>
inline

Collects all entities into a vector using a custom allocator.

Warning
When using a frame allocator (via SystemContext::MakeFrameAllocator()), the returned data is only valid for the current frame. All pointers and references to frame-allocated data become invalid after the frame ends. Do not store frame-allocated data in components, resources, or any persistent storage.
Template Parameters
ResultAllocSTL-compatible allocator type for Entity
Parameters
allocAllocator instance to use for the result vector
Returns
Vector of Entity objects using the provided allocator
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1692 of file query.hpp.

1693 {
1694 std::vector<Entity, ResultAlloc> result{std::move(alloc)};
1695 result.reserve(query_.Count());
1696 for (auto&& tuple : *this) {
1697 result.push_back(std::get<0>(tuple));
1698 }
1699 return result;
1700}

◆ CollectWith()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires std::same_as<typename ResultAlloc::value_type, std::iter_value_t<details::QueryWithEntityIterator<Components...>>>
template<typename ResultAlloc >
requires std::same_as<typename ResultAlloc::value_type, std::iter_value_t<details::QueryWithEntityIterator<Components...>>>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::CollectWith ( ResultAlloc  alloc) const -> std::vector<value_type, ResultAlloc>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1667 of file query.hpp.

1668 {
1669 std::vector<value_type, ResultAlloc> result{std::move(alloc)};
1670 result.reserve(query_.Count());
1671 for (auto&& tuple : *this) {
1672 result.push_back(tuple);
1673 }
1674 return result;
1675}

◆ CountIf()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
size_t helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::CountIf ( const Pred predicate)
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1911 of file query.hpp.

1911 {
1912 size_t count = 0;
1913 for (auto&& tuple : *this) {
1914 if (std::apply(predicate, tuple)) {
1915 ++count;
1916 }
1917 }
1918 return count;
1919}

◆ end()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::UniqueTypes<Components...>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::end ( ) const
inline

Gets iterator past the last matching entity.

Returns
End iterator
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1981 of file query.hpp.

1981 {
1982 return {query_.GetMatchingArchetypes(), query_.GetComponents(), query_.GetMatchingArchetypes().size(), 0};
1983}

◆ Enumerate()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::UniqueTypes<Components...>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::Enumerate ( ) const & -> utils::EnumerateAdapter<iterator>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1798 of file query.hpp.

1799 {
1800 query_.RefreshArchetypes();
1801 auto begin_iter = iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), 0, 0);
1802 auto end_iter =
1803 iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), query_.GetMatchingArchetypes().size(), 0);
1804 return {begin_iter, end_iter};
1805}
details::QueryWithEntityIterator< Components... > iterator
Definition query.hpp:570

◆ Filter()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::Filter ( Pred  predicate) const & -> utils::FilterAdapter<iterator, Pred>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1726 of file query.hpp.

1727 {
1728 query_.RefreshArchetypes();
1729 auto begin_iter = iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), 0, 0);
1730 auto end_iter =
1731 iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), query_.GetMatchingArchetypes().size(), 0);
1732 return {begin_iter, end_iter, std::move(predicate)};
1733}

◆ FindFirst()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::FindFirst ( const Pred predicate) -> std::optional<value_type>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1835 of file query.hpp.

1836 {
1837 for (auto&& result : *this) {
1838 if (std::apply(predicate, result)) {
1839 return result;
1840 }
1841 }
1842 return std::nullopt;
1843}

◆ ForEach()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::ActionFor<Action, std::tuple<Entity, details::ComponentAccessType<Components>...>>
template<typename Action >
requires utils::ActionFor<Action, std::tuple<Entity, details::ComponentAccessType<Components>...>>
void helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::ForEach ( const Action action)
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1716 of file query.hpp.

1716 {
1717 for (auto&& result : *this) {
1718 std::apply(action, result);
1719 }
1720}

◆ GroupBy()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::TransformFor<KeyExtractor, std::tuple<Entity, details::ComponentAccessType<Components>...>>
template<typename KeyExtractor >
requires utils::TransformFor<KeyExtractor, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::GroupBy ( const KeyExtractor key_extractor) -> std::unordered_map<std::invoke_result_t<KeyExtractor, Entity, details::ComponentAccessType<Components>...>, std::vector<Entity>>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1958 of file query.hpp.

1960 {
1961 using KeyType = std::invoke_result_t<KeyExtractor, Entity, details::ComponentAccessType<Components>...>;
1962 std::unordered_map<KeyType, std::vector<Entity>> groups;
1963
1964 for (auto&& tuple : *this) {
1965 auto key = std::apply(key_extractor, tuple);
1966 groups[key].push_back(std::get<0>(tuple));
1967 }
1968
1969 return groups;
1970}

◆ Inspect()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::InspectorFor<Func, std::tuple<Entity, details::ComponentAccessType<Components>...>>
template<typename Func >
requires utils::InspectorFor<Func, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::Inspect ( Func  inspector) const & -> utils::InspectAdapter<iterator, Func>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1811 of file query.hpp.

1812 {
1813 query_.RefreshArchetypes();
1814 auto begin_iter = iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), 0, 0);
1815 auto end_iter =
1816 iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), query_.GetMatchingArchetypes().size(), 0);
1817 return {begin_iter, end_iter, std::move(inspector)};
1818}

◆ Into()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires std::output_iterator<OutIt, std::iter_value_t<details::QueryWithEntityIterator<Components...>>>
template<typename OutIt >
requires std::output_iterator<OutIt, std::iter_value_t<details::QueryWithEntityIterator<Components...>>>
void helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::Into ( OutIt  out)
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1706 of file query.hpp.

1706 {
1707 for (auto&& result : *this) {
1708 *out++ = std::forward<decltype(result)>(result);
1709 }
1710}

◆ Map()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::TransformFor<Func, std::tuple<Entity, details::ComponentAccessType<Components>...>>
template<typename Func >
requires utils::TransformFor<Func, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::Map ( Func  transform) const & -> utils::MapAdapter<iterator, Func>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1739 of file query.hpp.

1740 {
1741 query_.RefreshArchetypes();
1742 auto begin_iter = iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), 0, 0);
1743 auto end_iter =
1744 iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), query_.GetMatchingArchetypes().size(), 0);
1745 return {begin_iter, end_iter, std::move(transform)};
1746}

◆ MaxBy()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::TransformFor<KeyFunc, std::tuple<Entity, details::ComponentAccessType<Components>...>>
template<typename KeyFunc >
requires utils::TransformFor<KeyFunc, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::MaxBy ( const KeyFunc key_func) const -> std::optional<value_type>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1849 of file query.hpp.

1850 {
1851 auto iter = begin();
1852 const auto end_iter = end();
1853
1854 if (iter == end_iter) {
1855 return std::nullopt;
1856 }
1857
1858 std::optional<value_type> max_element;
1859 max_element.emplace(*iter);
1860 auto max_key = std::apply(key_func, *max_element);
1861 ++iter;
1862
1863 while (iter != end_iter) {
1864 auto current = *iter;
1865 auto current_key = std::apply(key_func, current);
1866 if (current_key > max_key) {
1868 max_element.emplace(current);
1869 }
1870 ++iter;
1871 }
1872
1873 return max_element;
1874}
iterator begin() const
Gets iterator to first matching entity and components.
Definition query.hpp:1974
iterator end() const
Gets iterator past the last matching entity.
Definition query.hpp:1981

◆ MinBy()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::TransformFor<KeyFunc, std::tuple<Entity, details::ComponentAccessType<Components>...>>
template<typename KeyFunc >
requires utils::TransformFor<KeyFunc, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::MinBy ( const KeyFunc key_func) const -> std::optional<value_type>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1880 of file query.hpp.

1881 {
1882 auto iter = begin();
1883 const auto end_iter = end();
1884
1885 if (iter == end_iter) {
1886 return std::nullopt;
1887 }
1888
1889 std::optional<value_type> min_element;
1890 min_element.emplace(*iter);
1891 auto min_key = std::apply(key_func, *min_element);
1892 ++iter;
1893
1894 while (iter != end_iter) {
1895 auto current = *iter;
1896 auto current_key = std::apply(key_func, current);
1897 if (current_key < min_key) {
1899 min_element.emplace(current);
1900 }
1901 ++iter;
1902 }
1903
1904 return min_element;
1905}

◆ None()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
bool helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::None ( const Pred predicate)
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 974 of file query.hpp.

974 {
975 return !Any(predicate);
976 }
bool Any(const Pred &predicate)
Definition query.hpp:938

◆ operator=() [1/2]

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
BasicQueryWithEntity & helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::operator= ( BasicQueryWithEntity< WorldT, Allocator, Components > &&  )
delete

◆ operator=() [2/2]

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
BasicQueryWithEntity & helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::operator= ( const BasicQueryWithEntity< WorldT, Allocator, Components > &  )
delete

◆ Partition()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::Partition ( const Pred predicate) -> std::pair<std::vector<Entity>, std::vector<Entity>>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1938 of file query.hpp.

1939 {
1940 std::vector<Entity> matched;
1941 std::vector<Entity> not_matched;
1942
1943 for (auto&& tuple : *this) {
1944 if (std::apply(predicate, tuple)) {
1945 matched.push_back(std::get<0>(tuple));
1946 } else {
1947 not_matched.push_back(std::get<0>(tuple));
1948 }
1949 }
1950
1951 return {std::move(matched), std::move(not_matched)};
1952}

◆ Reverse()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::Reverse ( ) const & -> utils::ReverseAdapter<iterator>
inline

◆ Skip()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::UniqueTypes<Components...>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::Skip ( size_t  count) const & -> utils::SkipAdapter<iterator>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1761 of file query.hpp.

1762 {
1763 query_.RefreshArchetypes();
1764 auto begin_iter = iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), 0, 0);
1765 auto end_iter =
1766 iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), query_.GetMatchingArchetypes().size(), 0);
1767 return {begin_iter, end_iter, count};
1768}

◆ SkipWhile()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::SkipWhile ( Pred  predicate) const & -> utils::SkipWhileAdapter<iterator, Pred>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1787 of file query.hpp.

1788 {
1789 query_.RefreshArchetypes();
1790 auto begin_iter = iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), 0, 0);
1791 auto end_iter =
1792 iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), query_.GetMatchingArchetypes().size(), 0);
1793 return {begin_iter, end_iter, std::move(predicate)};
1794}

◆ Slide()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::Slide ( size_t  window_size) const & -> utils::SlideAdapter<iterator>
inline

◆ StepBy()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::UniqueTypes<Components...>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::StepBy ( size_t  step) const & -> utils::StepByAdapter<iterator>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1822 of file query.hpp.

1823 {
1824 query_.RefreshArchetypes();
1825 auto begin_iter = iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), 0, 0);
1826 auto end_iter =
1827 iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), query_.GetMatchingArchetypes().size(), 0);
1828 return {begin_iter, end_iter, step};
1829}

◆ Stride()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::Stride ( size_t  stride) const & -> utils::StrideAdapter<iterator>
inline

◆ Take()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::UniqueTypes<Components...>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::Take ( size_t  count) const & -> utils::TakeAdapter<iterator>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1750 of file query.hpp.

1751 {
1752 query_.RefreshArchetypes();
1753 auto begin_iter = iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), 0, 0);
1754 auto end_iter =
1755 iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), query_.GetMatchingArchetypes().size(), 0);
1756 return {begin_iter, end_iter, count};
1757}

◆ TakeWhile()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
template<typename Pred >
requires utils::PredicateFor<Pred, std::tuple<Entity, details::ComponentAccessType<Components>...>>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::TakeWhile ( Pred  predicate) const & -> utils::TakeWhileAdapter<iterator, Pred>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 1774 of file query.hpp.

1775 {
1776 query_.RefreshArchetypes();
1777 auto begin_iter = iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), 0, 0);
1778 auto end_iter =
1779 iterator(query_.GetMatchingArchetypes(), query_.GetComponents(), query_.GetMatchingArchetypes().size(), 0);
1780 return {begin_iter, end_iter, std::move(predicate)};
1781}

◆ Zip()

template<WorldType WorldT, typename Allocator , ComponentTrait... Components>
template<typename OtherIter >
requires utils::IteratorLike<OtherIter>
auto helios::ecs::BasicQueryWithEntity< WorldT, Allocator, Components >::Zip ( OtherIter  other_begin,
OtherIter  other_end 
) const & -> utils::ZipAdapter<iterator, OtherIter>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/ecs/query.hpp.

Definition at line 919 of file query.hpp.

919 {
920 return {begin(), end(), std::move(other_begin), std::move(other_end)};
921 }