4 template<
class TypedSystem >
10 std::is_base_of< System, TypedSystem >::value,
11 "TypedSystem must be a descendant of ivorium::System."
15 if( !this->systems.count(
typeid( TypedSystem ) ) )
20 is->warning(
SRC_INFO,
"Requested system ",
typeid( TypedSystem ).name(),
" does not exist." );
26 return dynamic_cast< TypedSystem *
>( this->systems.at(
typeid(TypedSystem) ) );
29 template<
class TypedSystem,
typename... Args >
35 std::is_base_of<System, TypedSystem>::value,
36 "TypedSystem must be a descendant of ivorium::System."
40 if( this->systems.count(
typeid( TypedSystem ) ) && !this->own_systems.count( this->systems[
typeid( TypedSystem ) ] ) )
42 this->removeSystem< TypedSystem >();
46 if( !this->systems.count(
typeid( TypedSystem ) ) )
49 TypedSystem * system =
new TypedSystem(
this, constructor_arguments... );
55 this->systems[
typeid( TypedSystem ) ] = system;
58 this->own_systems.insert( system );
62 return this->getSystem< TypedSystem >();
65 template<
class TypedSystem >
71 std::is_base_of<System, TypedSystem>::value,
72 "TypedSystem must be a descendant of ivorium::System."
76 if( this->systems.count(
typeid( TypedSystem ) ) )
77 return this->getSystem< TypedSystem >();
83 this->systems[
typeid( TypedSystem ) ] = system;
89 template<
class TypedSystem >
95 std::is_base_of<System, TypedSystem>::value,
96 "TypedSystem must be a descendant of ivorium::System."
100 if( !this->systems.count(
typeid( TypedSystem ) ) )
107 System * system = this->systems[
typeid( TypedSystem ) ];
110 this->systems.erase(
typeid( TypedSystem ) );
111 this->own_systems.erase( system );