Index: src/ch/TConfig.cpp =================================================================== diff -u -N -r69b48f0b4d7fad78f95854e95fca166014311474 -rc54aa186fda8c0af84325325276245e9d8fcfa26 --- src/ch/TConfig.cpp (.../TConfig.cpp) (revision 69b48f0b4d7fad78f95854e95fca166014311474) +++ src/ch/TConfig.cpp (.../TConfig.cpp) (revision c54aa186fda8c0af84325325276245e9d8fcfa26) @@ -470,6 +470,23 @@ rSubConfig.m_propTree = optChildren.get(); } +void TConfig::ExtractMultiSubConfigs(PCTSTR pszSubTreeName, std::vector& rSubConfigs) const +{ + TConfig cfg; + + boost::shared_lock lock(m_lock); + + boost::optional optChildren = m_propTree.get_child_optional(pszSubTreeName); + if(optChildren.is_initialized()) + { + BOOST_FOREACH(const boost::property_tree::wiptree::value_type& rEntry, optChildren.get()) + { + cfg.m_propTree = rEntry.second; + rSubConfigs.push_back(cfg); + } + } +} + void TConfig::PutSubConfig(PCTSTR pszSubTreeName, const TConfig& rSubConfig) { boost::unique_lock lock(m_lock); @@ -480,6 +497,22 @@ m_bModified = true; } +void TConfig::AddSubConfig(PCTSTR pszSubTreeName, const TConfig& rSubConfig) +{ + boost::unique_lock lock(m_lock); + boost::shared_lock src_lock(rSubConfig.m_lock); + + m_propTree.add_child(pszSubTreeName, rSubConfig.m_propTree); + + m_bModified = true; +} + +void TConfig::DeleteNode(PCTSTR pszNodeName) +{ + boost::unique_lock lock(m_lock); + m_propTree.erase(pszNodeName); +} + void TConfig::ConnectToNotifier(void (*pfnCallback)(const std::set&, void*), void* pParam) { m_notifier.connect(TConfigNotifier(pfnCallback, pParam));