Index: src/libchcore/TConfig.cpp =================================================================== diff -u -N -r6e8aa26e2428e3bc71099255c5911f57bc722100 -r2d7bee54f998ae8f5d4145a2cf3f4a589253016f --- src/libchcore/TConfig.cpp (.../TConfig.cpp) (revision 6e8aa26e2428e3bc71099255c5911f57bc722100) +++ src/libchcore/TConfig.cpp (.../TConfig.cpp) (revision 2d7bee54f998ae8f5d4145a2cf3f4a589253016f) @@ -26,6 +26,7 @@ #include #include #include "../libicpf/exception.h" +#include "TWStringData.h" #pragma warning(push) #pragma warning(disable: 4702 4512) @@ -182,6 +183,38 @@ } } +void TConfig::ReadFromString(const TWStringData& strInput) +{ + if(strInput.IsEmpty()) + THROW(_T("Invalid argument"), 0, 0, 0); + + boost::unique_lock lock(m_lock); + + ClearNL(); // also clears m_bModified + + std::wistringstream ifs(strInput.GetData(), std::ios_base::in); + try + { + boost::property_tree::xml_parser::read_xml(ifs, m_propTree); + } + catch(...) + { + m_propTree.clear(); + throw; + } +} + +void TConfig::WriteToString(TWStringData& strOutput) +{ + boost::shared_lock lock(m_lock); + + std::wostringstream ofs(std::ios_base::out); + + boost::property_tree::xml_parser::write_xml(ofs, m_propTree); + + strOutput = ofs.str(); +} + void TConfig::SetFilePath(PCTSTR pszPath) { boost::unique_lock lock(m_lock);