3#include <unordered_set>
11template <
class DataType>
15 typedef typename std::unordered_set<DataType*>::iterator
iterator;
32 template <
class ChildType>
55template <
class DataType>
62template <
class DataType>
65 typename std::unordered_set<DataType*>::iterator l_it;
66 for (l_it = m_children.begin(); l_it != m_children.end(); ++l_it)
72template <
class DataType>
75 m_children.insert(child);
77 child->setParentComponent(
this);
85template <
class DataType>
89 m_children.erase(child);
90 child->setParentComponent(0);
93 onChildRemoved(child);
99template <
class DataType>
102 while (!m_children.empty())
104 removeChild(*m_children.begin());
108template <
class DataType>
109template <
class ChildType>
112 std::vector<DataType*> l_childrenToRemove;
113 for (
auto& child : m_children)
115 if (
dynamic_cast<ChildType*
>(child) !=
nullptr)
117 l_childrenToRemove.push_back(child);
121 const int l_result = l_childrenToRemove.size();
123 for (
auto& child : l_childrenToRemove)
131template <
class DataType>
134 auto l_it = m_children.find(
dynamic_cast<DataType*
>(child));
136 if (l_it != m_children.end())
142 auto l_itEnd = m_children.end();
143 for (l_it = m_children.begin(); l_it != l_itEnd; ++l_it)
145 if ((*l_it)->findChildComponent(child, recursive))
153template <
class DataType>
156 DataType* l_p_result =
nullptr;
157 if (index < m_children.size())
159 unsigned int l_index = 0;
160 typename std::unordered_set<DataType*>::iterator l_it;
161 for (l_it = m_children.begin(); l_index < index; l_index++)
170template <
class DataType>
173 const DataType* l_p_result =
nullptr;
174 if (index < m_children.size())
176 unsigned int l_index = 0;
177 typename std::unordered_set<DataType*>::const_iterator l_it;
178 for (l_it = m_children.begin(); l_index < index; l_index++)
Base class for all scene-graph nodes in the component hierarchy.
Generic typed container that manages a set of child Component pointers.
unsigned int nbChildren() const
bool findChildComponent(Component *child, bool recursive=false)
std::unordered_set< DataType * > m_children
virtual bool addChild(DataType *child)
const Component * getChild(unsigned int index) const
virtual void onChildAdded(DataType *)
int removeAllChildrenOfType()
std::unordered_set< DataType * >::iterator iterator
Component * getChild(unsigned int index)
virtual bool removeChild(DataType *child)
virtual void onChildRemoved(DataType *)