Index: src/libchcore/TConfig.cpp =================================================================== diff -u -N -r081055369d6b332ef1651877756657973b1b2d9c -rfc67a825635691930b3ac00dc95b16e59f3d2fae --- src/libchcore/TConfig.cpp (.../TConfig.cpp) (revision 081055369d6b332ef1651877756657973b1b2d9c) +++ src/libchcore/TConfig.cpp (.../TConfig.cpp) (revision fc67a825635691930b3ac00dc95b16e59f3d2fae) @@ -142,6 +142,8 @@ boost::shared_lock lock(GetImpl()->m_lock); + InitColumns(spContainer); + spContainer->DeleteRows(m_pImpl->m_setRemovedObjects); BOOST_FOREACH(const ConfigNode& rNode, m_pImpl->m_mic) @@ -176,10 +178,9 @@ m_pImpl->m_setRemovedObjects.Clear(); m_pImpl->m_mic.clear(); + InitColumns(spContainer); + ISerializerRowReaderPtr spRowReader = spContainer->GetRowReader(); - IColumnsDefinition& rColumns = spRowReader->GetColumnsDefinitions(); - if(rColumns.IsEmpty()) - rColumns % _T("name") % _T("node_order") % _T("value"); while(spRowReader->Next()) { @@ -195,6 +196,17 @@ } } +void TConfig::InitColumns(const ISerializerContainerPtr& spContainer) const +{ + IColumnsDefinition& rColumns = spContainer->GetColumnsDefinition(); + if(rColumns.IsEmpty()) + { + rColumns.AddColumn(_T("name"), IColumnsDefinition::eType_string); + rColumns.AddColumn(_T("node_order"), IColumnsDefinition::eType_int); + rColumns.AddColumn(_T("value"), IColumnsDefinition::eType_string); + } +} + void TConfig::SetFilePath(PCTSTR pszPath) { boost::unique_lock lock(GetImpl()->m_lock);