entity
Entity/Component System for C++
entity Namespace Reference

Namespaces

 component
 
 functional
 
 iterator_traits
 
 simd
 

Classes

class  entity
 
class  entity_incremental_iterator
 
class  entity_pool
 
class  entity_range
 
class  entity_skipping_iterator
 
class  shared_entity
 
class  unique_entity
 
class  weak_entity
 

Typedefs

typedef std::size_t entity_index_t
 

Functions

template<typename Iterator , typename EndIterator >
Iterator begin (entity_range< Iterator, EndIterator > &r)
 
entity_pool::iterator begin (entity_pool const &p)
 
template<typename Iterator , typename EndIterator >
EndIterator end (entity_range< Iterator, EndIterator > &r)
 
entity_pool::iterator end (entity_pool const &p)
 
template<typename EntityList , typename ComponentPoolTuple , typename Fn >
void for_each (EntityList const &entities, ComponentPoolTuple &&p, iterator_traits::is_incremental_tag, Fn f)
 
template<typename EntityList , typename ComponentPoolTuple , typename Fn >
void for_each (EntityList const &entities, ComponentPoolTuple &&p, iterator_traits::is_skipping_tag, Fn f)
 
template<typename EntityList , typename ComponentPoolTuple , typename Fn >
void for_each (EntityList const &entities, ComponentPoolTuple &&p, Fn f)
 
entity make_entity (entity_index_t idx) BOOST_NOEXCEPT_OR_NOTHROW
 
template<typename EntityList , typename ZippedComponentWindows >
auto make_entity_begin (iterator_traits::is_skipping_tag, EntityList const &entities, ZippedComponentWindows windows) -> entity_skipping_iterator< decltype(begin(entities)), ZippedComponentWindows >
 
template<typename EntityList , typename ZippedComponentWindows >
auto make_entity_begin (iterator_traits::is_incremental_tag, EntityList const &entities, ZippedComponentWindows windows) -> entity_incremental_iterator< decltype(entities.begin()), ZippedComponentWindows >
 
template<typename EntityList , typename ZippedComponentWindows >
auto make_entity_begin (EntityList const &list, ZippedComponentWindows windows) -> decltype(make_entity_begin(iterator_traits::entity_list_is_incremental< EntityList >(), list, windows))
 
template<typename EntityList , typename ZippedComponentWindows >
auto make_entity_end (iterator_traits::is_skipping_tag, EntityList const &entities, ZippedComponentWindows windows) -> entity_skipping_iterator< decltype(end(entities)), ZippedComponentWindows >
 
template<typename EntityList , typename ZippedComponentWindows >
auto make_entity_end (iterator_traits::is_incremental_tag, EntityList &entities, ZippedComponentWindows windows) -> entity_incremental_iterator< decltype(entities.end()), ZippedComponentWindows >
 
template<typename EntityList , typename ZippedComponentWindows >
auto make_entity_end (EntityList const &list, ZippedComponentWindows windows) -> decltype(make_entity_end(iterator_traits::entity_list_is_incremental< EntityList >(), list, windows))
 
template<typename EntityList , typename ZippedComponentWindows >
auto make_entity_range (EntityList const &list, ZippedComponentWindows windows) -> entity_range< decltype(make_entity_begin(list, windows)), decltype(make_entity_end(list, windows))>
 
void swap (unique_entity &a, unique_entity &b)
 
void swap (shared_entity &a, shared_entity &b)
 

Variables

iterator_traits::is_incremental_tag const incremental {}
 
iterator_traits::is_skipping_tag const skipping {}
 

Typedef Documentation

typedef std::size_t entity::entity_index_t

Definition at line 24 of file entity_index.hpp.

Function Documentation

template<typename Iterator , typename EndIterator >
Iterator entity::begin ( entity_range< Iterator, EndIterator > &  r)

Definition at line 173 of file entity_range.hpp.

References entity::entity_range< Iterator, EndIterator >::begin().

174  {
175  return r.begin();
176  }
entity_pool::iterator entity::begin ( entity_pool const &  p)

Definition at line 246 of file entity_pool.hpp.

References entity::entity_pool::begin().

Referenced by for_each(), make_entity_begin(), and make_entity_end().

247  {
248  return p.begin();
249  }
template<typename Iterator , typename EndIterator >
EndIterator entity::end ( entity_range< Iterator, EndIterator > &  r)

Definition at line 179 of file entity_range.hpp.

References entity::entity_range< Iterator, EndIterator >::end().

180  {
181  return r.end();
182  }
entity_pool::iterator entity::end ( entity_pool const &  p)

Definition at line 251 of file entity_pool.hpp.

References entity::entity_pool::end().

Referenced by for_each(), make_entity_begin(), and make_entity_end().

252  {
253  return p.end();
254  }
template<typename EntityList , typename ComponentPoolTuple , typename Fn >
void entity::for_each ( EntityList const &  entities,
ComponentPoolTuple &&  p,
iterator_traits::is_incremental_tag  ,
Fn  f 
)

Definition at line 37 of file for_each.hpp.

References begin(), end(), and entity::simd::detail::invoke().

Referenced by entity::component::dense_pool< T >::dense_pool(), for_each(), and entity::component::sparse_pool< T >::sparse_pool().

38  {
39  auto i = begin(entities);
40  auto e = end(entities);
41 
42  auto c = boost::fusion::as_vector(
43  boost::fusion::transform(
44  std::forward<ComponentPoolTuple>(p),
45  functional::get_window()
46  )
47  );
48 
49  if(i != e)
50  {
51  if(boost::fusion::all(c, functional::is_entity(*i)))
52  {
54  f,
55  boost::fusion::transform(c, functional::get_component())
56  );
57  }
58 
59  ++i;
60  }
61 
62  for(; i != e; ++i)
63  {
64  if(boost::fusion::fold(c, true, functional::increment_window(*i)))
65  {
67  f,
68  boost::fusion::transform(c, functional::get_component())
69  );
70  }
71  }
72  }
entity_pool::iterator end(entity_pool const &p)
void invoke(Fn f, Sequence< intrinsic_type & > &values)
Definition: invoke.hpp:32
entity_pool::iterator begin(entity_pool const &p)
template<typename EntityList , typename ComponentPoolTuple , typename Fn >
void entity::for_each ( EntityList const &  entities,
ComponentPoolTuple &&  p,
iterator_traits::is_skipping_tag  ,
Fn  f 
)

Definition at line 77 of file for_each.hpp.

References begin(), end(), and entity::simd::detail::invoke().

78  {
79  auto i = begin(entities);
80  auto e = end(entities);
81 
82  auto c = boost::fusion::as_vector(
83  boost::fusion::transform(
84  std::forward<ComponentPoolTuple>(p),
85  functional::get_window()
86  )
87  );
88 
89  if(i != e)
90  {
91  if(boost::fusion::all(c, functional::is_entity(*i)))
92  {
94  f,
95  boost::fusion::transform(c, functional::get_component())
96  );
97  }
98 
99  ++i;
100  }
101 
102  for(; i != e; ++i)
103  {
104  if(boost::fusion::fold(c, true, functional::advance_window(*i)))
105  {
107  f,
108  boost::fusion::transform(c, functional::get_component())
109  );
110  }
111  }
112  }
entity_pool::iterator end(entity_pool const &p)
void invoke(Fn f, Sequence< intrinsic_type & > &values)
Definition: invoke.hpp:32
entity_pool::iterator begin(entity_pool const &p)
template<typename EntityList , typename ComponentPoolTuple , typename Fn >
void entity::for_each ( EntityList const &  entities,
ComponentPoolTuple &&  p,
Fn  f 
)

Definition at line 115 of file for_each.hpp.

References for_each().

116  {
117  for_each(entities, p, iterator_traits::entity_list_is_incremental<EntityList>(), f);
118  }
void for_each(EntityList const &entities, ComponentPoolTuple &&p, Fn f)
Definition: for_each.hpp:64
template<typename EntityList , typename ZippedComponentWindows >
auto entity::make_entity_begin ( iterator_traits::is_skipping_tag  ,
EntityList const &  entities,
ZippedComponentWindows  windows 
) -> entity_skipping_iterator< decltype(begin(entities)), ZippedComponentWindows>

Definition at line 187 of file entity_range.hpp.

References begin(), and end().

Referenced by make_entity_begin(), and make_entity_range().

190  {
191  return entity_skipping_iterator<
192  decltype(begin(entities)),
193  ZippedComponentWindows
194  >(begin(entities), end(entities), std::move(windows));
195  }
EndIterator end(entity_range< Iterator, EndIterator > &r)
Iterator begin(entity_range< Iterator, EndIterator > &r)
template<typename EntityList , typename ZippedComponentWindows >
auto entity::make_entity_begin ( iterator_traits::is_incremental_tag  ,
EntityList const &  entities,
ZippedComponentWindows  windows 
) -> entity_incremental_iterator< decltype(entities.begin()), ZippedComponentWindows>

Definition at line 211 of file entity_range.hpp.

214  {
215  return entity_incremental_iterator<
216  decltype(entities.begin()),
217  ZippedComponentWindows
218  >(entities.begin(), entities.end(), std::move(windows));
219  }
template<typename EntityList , typename ZippedComponentWindows >
auto entity::make_entity_begin ( EntityList const &  list,
ZippedComponentWindows  windows 
) -> decltype(make_entity_begin(iterator_traits::entity_list_is_incremental<EntityList>(), list, windows))

Definition at line 235 of file entity_range.hpp.

References make_entity_begin().

236  {
237  return make_entity_begin(
238  iterator_traits::entity_list_is_incremental<EntityList>(),
239  list,
240  std::move(windows)
241  );
242  }
auto make_entity_begin(EntityList const &list, ZippedComponentWindows windows) -> decltype(make_entity_begin(iterator_traits::entity_list_is_incremental< EntityList >(), list, windows))
template<typename EntityList , typename ZippedComponentWindows >
auto entity::make_entity_end ( iterator_traits::is_skipping_tag  ,
EntityList const &  entities,
ZippedComponentWindows  windows 
) -> entity_skipping_iterator< decltype(end(entities)), ZippedComponentWindows>

Definition at line 198 of file entity_range.hpp.

References begin(), and end().

Referenced by make_entity_end(), and make_entity_range().

201  {
202  return entity_skipping_iterator<
203  decltype(begin(entities)),
204  ZippedComponentWindows
205  >(end(entities), end(entities), std::move(windows));
206  }
EndIterator end(entity_range< Iterator, EndIterator > &r)
Iterator begin(entity_range< Iterator, EndIterator > &r)
template<typename EntityList , typename ZippedComponentWindows >
auto entity::make_entity_end ( iterator_traits::is_incremental_tag  ,
EntityList &  entities,
ZippedComponentWindows  windows 
) -> entity_incremental_iterator< decltype(entities.end()), ZippedComponentWindows>

Definition at line 222 of file entity_range.hpp.

225  {
226  return entity_incremental_iterator<
227  decltype(entities.begin()),
228  ZippedComponentWindows
229  >(entities.end(), entities.end(), std::move(windows));
230  }
template<typename EntityList , typename ZippedComponentWindows >
auto entity::make_entity_end ( EntityList const &  list,
ZippedComponentWindows  windows 
) -> decltype(make_entity_end(iterator_traits::entity_list_is_incremental<EntityList>(), list, windows))

Definition at line 245 of file entity_range.hpp.

References make_entity_end().

246  {
247  return make_entity_end(
248  iterator_traits::entity_list_is_incremental<EntityList>(),
249  list,
250  std::move(windows)
251  );
252  }
auto make_entity_end(EntityList const &list, ZippedComponentWindows windows) -> decltype(make_entity_end(iterator_traits::entity_list_is_incremental< EntityList >(), list, windows))
template<typename EntityList , typename ZippedComponentWindows >
auto entity::make_entity_range ( EntityList const &  list,
ZippedComponentWindows  windows 
) -> entity_range<decltype(make_entity_begin(list, windows)), decltype(make_entity_end(list, windows))>

Definition at line 257 of file entity_range.hpp.

References make_entity_begin(), and make_entity_end().

258  {
259  return entity_range<
260  decltype(make_entity_begin(list, windows)),
261  decltype(make_entity_end(list, windows))>(
262  make_entity_begin(list, windows),
263  make_entity_end(list, windows)
264  )
265  ;
266  }
auto make_entity_end(EntityList const &list, ZippedComponentWindows windows) -> decltype(make_entity_end(iterator_traits::entity_list_is_incremental< EntityList >(), list, windows))
auto make_entity_begin(EntityList const &list, ZippedComponentWindows windows) -> decltype(make_entity_begin(iterator_traits::entity_list_is_incremental< EntityList >(), list, windows))
void entity::swap ( unique_entity a,
unique_entity b 
)

Definition at line 125 of file entity.hpp.

References swap().

126  {
127  std::swap(a.ref_, b.ref_);
128  }
void swap(shared_entity &a, shared_entity &b)
Definition: entity.hpp:181
void entity::swap ( shared_entity a,
shared_entity b 
)

Definition at line 181 of file entity.hpp.

Referenced by swap().

182  {
183  std::swap(a.ref_, b.ref_);
184  }
void swap(shared_entity &a, shared_entity &b)
Definition: entity.hpp:181

Variable Documentation

iterator_traits::is_incremental_tag const entity::incremental {}

Definition at line 31 of file iterator_traits.hpp.

iterator_traits::is_skipping_tag const entity::skipping {}

Definition at line 32 of file iterator_traits.hpp.