void DependencyGraph::RemoveDependency(Object *parent, Object *child)
{
boost::mutex::scoped_lock lock(m_Mutex);
- m_Dependencies[child][parent]--;
+
+ std::map<Object *, int>& refs = m_Dependencies[child];
+ std::map<Object *, int>::iterator it = refs.find(parent);
+
+ if (it == refs.end())
+ return;
+
+ it->second--;
+
+ if (it->second == 0)
+ refs.erase(it);
+
+ if (refs.empty())
+ m_Dependencies.erase(child);
}
std::vector<Object::Ptr> DependencyGraph::GetParents(const Object::Ptr& child)
if (!newValue.IsEmpty()) {
Service::Ptr service = Service::GetByNamePair(GetHostName(), newValue);
- DependencyGraph::RemoveDependency(this, service.get());
+ DependencyGraph::AddDependency(this, service.get());
}
}}}
navigate {{{
if (!newValue.IsEmpty()) {
Service::Ptr service = Service::GetByNamePair(GetParentHostName(), newValue);
- DependencyGraph::RemoveDependency(this, service.get());
+ DependencyGraph::AddDependency(this, service.get());
}
}}}
navigate {{{
if (!newValue.IsEmpty()) {
Service::Ptr service = Service::GetByNamePair(GetParentHostName(), newValue);
- DependencyGraph::RemoveDependency(this, service.get());
+ DependencyGraph::AddDependency(this, service.get());
}
}}}
navigate {{{
if (!newValue.IsEmpty()) {
Service::Ptr service = Service::GetByNamePair(GetHostName(), newValue);
- DependencyGraph::RemoveDependency(this, service.get());
+ DependencyGraph::AddDependency(this, service.get());
}
}}}
navigate {{{
if (!newValue.IsEmpty()) {
Service::Ptr service = Service::GetByNamePair(GetHostName(), newValue);
- DependencyGraph::RemoveDependency(this, service.get());
+ DependencyGraph::AddDependency(this, service.get());
}
}}}
navigate {{{
if (!newValue.IsEmpty()) {
Service::Ptr service = Service::GetByNamePair(GetHostName(), newValue);
- DependencyGraph::RemoveDependency(this, service.get());
+ DependencyGraph::AddDependency(this, service.get());
}
}}}
navigate {{{
<< "\t" << klass.Parent << "::Start(runtimeCreated);" << std::endl << std::endl;
for (it = klass.Fields.begin(); it != klass.Fields.end(); it++) {
- if (!(it->Type.IsName))
+ if (!it->Type.IsName && it->TrackAccessor.empty())
continue;
m_Impl << "\t" << "Track" << it->GetFriendlyName() << "(Empty, Get" << it->GetFriendlyName() << "());" << std::endl;
<< "\t" << klass.Parent << "::Stop(runtimeRemoved);" << std::endl << std::endl;
for (it = klass.Fields.begin(); it != klass.Fields.end(); it++) {
- if (!(it->Type.IsName))
+ if (!it->Type.IsName && it->TrackAccessor.empty())
continue;
m_Impl << "\t" << "Track" << it->GetFriendlyName() << "(Get" << it->GetFriendlyName() << "(), Empty);" << std::endl;