entity
Entity/Component System for C++
entity::component::sparse_pool< T > Class Template Reference

Description

template<typename T>
class entity::component::sparse_pool< T >

Definition at line 55 of file sparse_pool.hpp.

Instances and minimal complete definitions

struct  window
 

Friends

class creation_queue< sparse_pool< T > >
 
class destruction_queue< sparse_pool< T > >
 

Public Types

typedef iterator_impl iterator
 
typedef T type
 

Public Member Functions

template<typename... Args>
void auto_create_components (entity_pool &owner_pool, Args &&...constructor_args)
 
iterator begin ()
 
template<typename... Args>
T * create (entity e, Args &&...args)
 
void destroy (entity e)
 
iterator end ()
 
T * get (entity e)
 
T const * get (entity e) const
 
std::size_t size ()
 
 sparse_pool (entity_pool &owner_pool, T const &default_value=T())
 
window view ()
 

Methods

template<typename T >
friend class creation_queue< sparse_pool< T > >
friend

Definition at line 303 of file sparse_pool.hpp.

template<typename T >
friend class destruction_queue< sparse_pool< T > >
friend

Definition at line 304 of file sparse_pool.hpp.

Member Function Documentation

template<typename T >
template<typename... Args>
void entity::component::sparse_pool< T >::auto_create_components ( entity_pool owner_pool,
Args &&...  constructor_args 
)

Definition at line 206 of file sparse_pool.hpp.

References entity::entity_pool::signal_list::on_entity_create, and entity::entity_pool::signals().

207  {
208  slots_.entity_create_handler =
209  owner_pool.signals().on_entity_create.connect(
210  std::function<void(entity)>(
211  [this, constructor_args...](entity e)
212  {
213  create(e, constructor_args...);
214  }
215  )
216  )
217  ;
218  }
template<typename T >
iterator entity::component::sparse_pool< T >::begin ( )

Definition at line 277 of file sparse_pool.hpp.

278  {
279  return iterator(components_.begin());
280  }
template<typename T >
template<typename... Args>
T* entity::component::sparse_pool< T >::create ( entity  e,
Args &&...  args 
)

Definition at line 237 of file sparse_pool.hpp.

Referenced by entity::component::sparse_pool< T >::sparse_pool().

238  {
239  auto r = components_.emplace(e, std::forward<Args>(args)...);
240  return &(r.first->second);
241  }
template<typename T >
void entity::component::sparse_pool< T >::destroy ( entity  e)

Definition at line 250 of file sparse_pool.hpp.

251  {
252  components_.erase(e);
253  }
template<typename T >
iterator entity::component::sparse_pool< T >::end ( )

Definition at line 282 of file sparse_pool.hpp.

283  {
284  return iterator(components_.end());
285  }
template<typename T >
T* entity::component::sparse_pool< T >::get ( entity  e)

Definition at line 255 of file sparse_pool.hpp.

256  {
257  auto obj = components_.find(e);
258  if(obj != components_.end())
259  {
260  return &obj->second;
261  }
262 
263  return nullptr;
264  }
template<typename T >
T const* entity::component::sparse_pool< T >::get ( entity  e) const

Definition at line 266 of file sparse_pool.hpp.

267  {
268  auto obj = components_.find(e);
269  if(obj != components_.end())
270  {
271  return &obj->second;
272  }
273 
274  return nullptr;
275  }
template<typename T >
std::size_t entity::component::sparse_pool< T >::size ( )

Definition at line 292 of file sparse_pool.hpp.

293  {
294  return components_.size();
295  }
template<typename T >
window entity::component::sparse_pool< T >::view ( )

Definition at line 287 of file sparse_pool.hpp.

288  {
289  return window(components_.begin(), components_.end());
290  }

Member Typedef Documentation

template<typename T >
typedef iterator_impl entity::component::sparse_pool< T >::iterator

Definition at line 104 of file sparse_pool.hpp.

template<typename T >
typedef T entity::component::sparse_pool< T >::type

Definition at line 103 of file sparse_pool.hpp.

Constructor & Destructor Documentation

template<typename T >
entity::component::sparse_pool< T >::sparse_pool ( entity_pool owner_pool,
T const &  default_value = T() 
)

Definition at line 162 of file sparse_pool.hpp.

References entity::entity_pool::begin(), entity::component::sparse_pool< T >::create(), entity::entity_pool::end(), entity::for_each(), entity::entity_pool::signal_list::on_entity_destroy, entity::entity_pool::signal_list::on_entity_swap, and entity::entity_pool::signals().

163  {
164  #if ENTITY_SUPPORT_VARIADICS
165  auto create_func = &sparse_pool::create<T const&>;
166  #else
167  auto create_func = &sparse_pool::create;
168  #endif
169 
170  // Create default values for existing entities.
172  owner_pool.begin(),
173  owner_pool.end(),
174  boost::bind(
175  create_func,
176  this,
177  ::_1,
178  boost::ref(default_value)
179  )
180  );
181 
182  slots_.entity_destroy_handler =
183  owner_pool.signals().on_entity_destroy.connect(
184  boost::bind(
185  &sparse_pool::handle_destroy_entity,
186  this,
187  ::_1
188  )
189  )
190  ;
191 
192  slots_.entity_swap_handler =
193  owner_pool.signals().on_entity_swap.connect(
194  boost::bind(
195  &sparse_pool::handle_swap_entity,
196  this,
197  ::_1,
198  ::_2
199  )
200  )
201  ;
202  }
T * create(entity e, Args &&...args)
void for_each(EntityList const &entities, ComponentPoolTuple &&p, iterator_traits::is_incremental_tag, Fn f)
Definition: for_each.hpp:37