+ if (!m_instances.empty()) {
+ traverse_subgraph(walker, m_instances.find(PathConstReference(start)));
+ }
+ }
+
+ scene::Instance *find(const scene::Path &path)
+ {
+ InstanceMap::iterator i = m_instances.find(PathConstReference(path));
+ if (i == m_instances.end()) {
+ return 0;
+ }
+ return (*i).second;
+ }
+
+ void insert(scene::Instance *instance)
+ {
+ m_instances.insert(InstanceMap::value_type(PathConstReference(instance->path()), instance));
+
+ m_observer->insert(instance);
+ }
+
+ void erase(scene::Instance *instance)
+ {
+ m_observer->erase(instance);
+
+ m_instances.erase(PathConstReference(instance->path()));
+ }
+
+ SignalHandlerId addBoundsChangedCallback(const SignalHandler &boundsChanged)
+ {
+ return m_boundsChanged.connectLast(boundsChanged);
+ }
+
+ void removeBoundsChangedCallback(SignalHandlerId id)
+ {
+ m_boundsChanged.disconnect(id);
+ }
+
+ TypeId getNodeTypeId(const char *name)
+ {
+ return m_nodeTypeIds.getTypeId(name);
+ }
+
+ TypeId getInstanceTypeId(const char *name)
+ {
+ return m_instanceTypeIds.getTypeId(name);