Index: src/libchcore/ConfigNodeContainer.h =================================================================== diff -u -N -ra44714d5c7ec0f50a376f4d0ea919ee5a224f834 -re96806b7f8ff7ca7e9f4afbea603e6351a3dc3e3 --- src/libchcore/ConfigNodeContainer.h (.../ConfigNodeContainer.h) (revision a44714d5c7ec0f50a376f4d0ea919ee5a224f834) +++ src/libchcore/ConfigNodeContainer.h (.../ConfigNodeContainer.h) (revision e96806b7f8ff7ca7e9f4afbea603e6351a3dc3e3) @@ -38,233 +38,232 @@ #include #include -BEGIN_CHCORE_NAMESPACE - -namespace details +namespace chcore { - struct ChangeValue + namespace details { - ChangeValue(const TString& strNewValue); + struct ChangeValue + { + ChangeValue(const TString& strNewValue); - void operator()(ConfigNode& rNode); + void operator()(ConfigNode& rNode); - bool WasModified() const; + bool WasModified() const; - private: - TString m_strNewValue; - bool m_bWasModified; - }; + private: + TString m_strNewValue; + bool m_bWasModified; + }; - struct ChangeOrderAndValue - { - ChangeOrderAndValue(const TString& tNewValue, int iOrder); + struct ChangeOrderAndValue + { + ChangeOrderAndValue(const TString& tNewValue, int iOrder); - void operator()(ConfigNode& rNode); + void operator()(ConfigNode& rNode); - bool WasModified() const; + bool WasModified() const; - private: - TString m_strNewValue; - int m_iOrder; - bool m_bWasModified; - }; + private: + TString m_strNewValue; + int m_iOrder; + bool m_bWasModified; + }; - struct ConfigNodeContainer - { - public: - ConfigNodeContainer(); - ConfigNodeContainer(const ConfigNodeContainer& rSrc); - - ConfigNodeContainer& operator=(const ConfigNodeContainer& rSrc); - - void AddEntry(PCTSTR pszPropName, int iIndex, const TString& strValue); - - // get/set single values - template - T GetValue(PCTSTR pszPropName, const T& rDefaultValue) const + struct ConfigNodeContainer { - boost::shared_lock lock(m_lock); - T tResult = rDefaultValue; + public: + ConfigNodeContainer(); + ConfigNodeContainer(const ConfigNodeContainer& rSrc); - ConfigNodeContainer::NodeContainer::const_iterator iterFnd = m_mic.find(boost::make_tuple(pszPropName, 0)); - if(iterFnd != m_mic.end()) - tResult = boost::lexical_cast((*iterFnd).m_strValue.Get().c_str()); + ConfigNodeContainer& operator=(const ConfigNodeContainer& rSrc); - return tResult; - } + void AddEntry(PCTSTR pszPropName, int iIndex, const TString& strValue); - template<> - TString GetValue(PCTSTR pszPropName, const TString& rDefaultValue) const - { - boost::shared_lock lock(m_lock); - TString tResult = rDefaultValue; + // get/set single values + template + T GetValue(PCTSTR pszPropName, const T& rDefaultValue) const + { + boost::shared_lock lock(m_lock); + T tResult = rDefaultValue; - ConfigNodeContainer::NodeContainer::const_iterator iterFnd = m_mic.find(boost::make_tuple(pszPropName, 0)); - if(iterFnd != m_mic.end()) - tResult = (*iterFnd).m_strValue; + ConfigNodeContainer::NodeContainer::const_iterator iterFnd = m_mic.find(boost::make_tuple(pszPropName, 0)); + if (iterFnd != m_mic.end()) + tResult = boost::lexical_cast((*iterFnd).m_strValue.Get().c_str()); - return tResult; - } + return tResult; + } - template<> - bool GetValue(PCTSTR pszPropName, const bool& bDefaultValue) const - { - boost::shared_lock lock(m_lock); - bool bResult = bDefaultValue; - - ConfigNodeContainer::NodeContainer::const_iterator iterFnd = m_mic.find(boost::make_tuple(pszPropName, 0)); - if(iterFnd != m_mic.end()) + template<> + TString GetValue(PCTSTR pszPropName, const TString& rDefaultValue) const { - if((*iterFnd).m_strValue.Get().CompareNoCase(_T("false")) == 0) - bResult = false; - else if((*iterFnd).m_strValue.Get().CompareNoCase(_T("true")) == 0) - bResult = true; - else - bResult = boost::lexical_cast((*iterFnd).m_strValue.Get().c_str()); - } + boost::shared_lock lock(m_lock); + TString tResult = rDefaultValue; - return bResult; - } + ConfigNodeContainer::NodeContainer::const_iterator iterFnd = m_mic.find(boost::make_tuple(pszPropName, 0)); + if (iterFnd != m_mic.end()) + tResult = (*iterFnd).m_strValue; - template - bool GetValueNoDefault(PCTSTR pszPropName, T& rValue) const - { - boost::shared_lock lock(m_lock); - ConfigNodeContainer::NodeContainer::const_iterator iterFnd = m_mic.find(boost::make_tuple(pszPropName, 0)); - if(iterFnd != m_mic.end()) - { - rValue = boost::lexical_cast((*iterFnd).m_strValue.Get().c_str()); - return true; + return tResult; } - return false; - } - - template<> - bool GetValueNoDefault(PCTSTR pszPropName, TString& rValue) const - { - boost::shared_lock lock(m_lock); - ConfigNodeContainer::NodeContainer::const_iterator iterFnd = m_mic.find(boost::make_tuple(pszPropName, 0)); - if(iterFnd != m_mic.end()) + template<> + bool GetValue(PCTSTR pszPropName, const bool& bDefaultValue) const { - rValue = (*iterFnd).m_strValue; - return true; - } + boost::shared_lock lock(m_lock); + bool bResult = bDefaultValue; - return false; - } + ConfigNodeContainer::NodeContainer::const_iterator iterFnd = m_mic.find(boost::make_tuple(pszPropName, 0)); + if (iterFnd != m_mic.end()) + { + if ((*iterFnd).m_strValue.Get().CompareNoCase(_T("false")) == 0) + bResult = false; + else if ((*iterFnd).m_strValue.Get().CompareNoCase(_T("true")) == 0) + bResult = true; + else + bResult = boost::lexical_cast((*iterFnd).m_strValue.Get().c_str()); + } - template<> - bool GetValueNoDefault(PCTSTR pszPropName, bool& rValue) const - { - boost::shared_lock lock(m_lock); - ConfigNodeContainer::NodeContainer::const_iterator iterFnd = m_mic.find(boost::make_tuple(pszPropName, 0)); - if(iterFnd != m_mic.end()) - { - const TString& strValue = (*iterFnd).m_strValue.Get(); - if(strValue.CompareNoCase(_T("false")) == 0) - rValue = false; - else if(strValue.CompareNoCase(_T("true")) == 0) - rValue = true; - else - rValue = boost::lexical_cast(strValue.c_str()); - return true; + return bResult; } - return false; - } + template + bool GetValueNoDefault(PCTSTR pszPropName, T& rValue) const + { + boost::shared_lock lock(m_lock); + ConfigNodeContainer::NodeContainer::const_iterator iterFnd = m_mic.find(boost::make_tuple(pszPropName, 0)); + if (iterFnd != m_mic.end()) + { + rValue = boost::lexical_cast((*iterFnd).m_strValue.Get().c_str()); + return true; + } - template - bool SetValue(PCTSTR pszPropName, const T& rValue) - { - boost::unique_lock lock(m_lock); + return false; + } - ConfigNodeContainer::NodeContainer::const_iterator iterFnd = m_mic.find(boost::make_tuple(pszPropName, 0)); - if(iterFnd != m_mic.end()) + template<> + bool GetValueNoDefault(PCTSTR pszPropName, TString& rValue) const { - ChangeValue tChange(boost::lexical_cast(rValue).c_str()); - m_mic.modify(iterFnd, tChange); - return tChange.WasModified(); + boost::shared_lock lock(m_lock); + ConfigNodeContainer::NodeContainer::const_iterator iterFnd = m_mic.find(boost::make_tuple(pszPropName, 0)); + if (iterFnd != m_mic.end()) + { + rValue = (*iterFnd).m_strValue; + return true; + } + + return false; } - else + + template<> + bool GetValueNoDefault(PCTSTR pszPropName, bool& rValue) const { - m_mic.insert(ConfigNode(++m_oidLastObjectID, pszPropName, 0, boost::lexical_cast(rValue).c_str())); - return true; + boost::shared_lock lock(m_lock); + ConfigNodeContainer::NodeContainer::const_iterator iterFnd = m_mic.find(boost::make_tuple(pszPropName, 0)); + if (iterFnd != m_mic.end()) + { + const TString& strValue = (*iterFnd).m_strValue.Get(); + if (strValue.CompareNoCase(_T("false")) == 0) + rValue = false; + else if (strValue.CompareNoCase(_T("true")) == 0) + rValue = true; + else + rValue = boost::lexical_cast(strValue.c_str()); + return true; + } + + return false; } - } - template<> - bool SetValue(PCTSTR pszPropName, const bool& bValue) - { - boost::unique_lock lock(m_lock); - - ConfigNodeContainer::NodeContainer::const_iterator iterFnd = m_mic.find(boost::make_tuple(pszPropName, 0)); - if(iterFnd != m_mic.end()) + template + bool SetValue(PCTSTR pszPropName, const T& rValue) { - ChangeValue tChange(boost::lexical_cast(bValue ? _T("true") : _T("false")).c_str()); - m_mic.modify(iterFnd, tChange); - return tChange.WasModified(); + boost::unique_lock lock(m_lock); + + ConfigNodeContainer::NodeContainer::const_iterator iterFnd = m_mic.find(boost::make_tuple(pszPropName, 0)); + if (iterFnd != m_mic.end()) + { + ChangeValue tChange(boost::lexical_cast(rValue).c_str()); + m_mic.modify(iterFnd, tChange); + return tChange.WasModified(); + } + else + { + m_mic.insert(ConfigNode(++m_oidLastObjectID, pszPropName, 0, boost::lexical_cast(rValue).c_str())); + return true; + } } - else + + template<> + bool SetValue(PCTSTR pszPropName, const bool& bValue) { - m_mic.insert(ConfigNode(++m_oidLastObjectID, pszPropName, 0, bValue ? _T("true") : _T("false"))); - return true; + boost::unique_lock lock(m_lock); + + ConfigNodeContainer::NodeContainer::const_iterator iterFnd = m_mic.find(boost::make_tuple(pszPropName, 0)); + if (iterFnd != m_mic.end()) + { + ChangeValue tChange(boost::lexical_cast(bValue ? _T("true") : _T("false")).c_str()); + m_mic.modify(iterFnd, tChange); + return tChange.WasModified(); + } + else + { + m_mic.insert(ConfigNode(++m_oidLastObjectID, pszPropName, 0, bValue ? _T("true") : _T("false"))); + return true; + } } - } - // vector-based values - TStringArray GetArrayValue(PCTSTR pszPropName, const TStringArray& rDefaultValue) const; - bool GetArrayValueNoDefault(PCTSTR pszPropName, TStringArray& rValue) const; - bool SetArrayValue(PCTSTR pszPropName, const TStringArray& rValue); + // vector-based values + TStringArray GetArrayValue(PCTSTR pszPropName, const TStringArray& rDefaultValue) const; + bool GetArrayValueNoDefault(PCTSTR pszPropName, TStringArray& rValue) const; + bool SetArrayValue(PCTSTR pszPropName, const TStringArray& rValue); - // deletion - void DeleteNode(PCTSTR pszPropName); + // deletion + void DeleteNode(PCTSTR pszPropName); - // extracting nodes - bool ExtractNodes(PCTSTR pszNode, ConfigNodeContainer& tNewContainer) const; - bool ExtractMultipleNodes(PCTSTR pszNode, std::vector& tNewContainers) const; + // extracting nodes + bool ExtractNodes(PCTSTR pszNode, ConfigNodeContainer& tNewContainer) const; + bool ExtractMultipleNodes(PCTSTR pszNode, std::vector& tNewContainers) const; - void ImportNodes(PCTSTR pszNode, const ConfigNodeContainer& tContainer); // replaces specified node with data from tContainer - void AddNodes(PCTSTR pszNode, const ConfigNodeContainer& tContainer); // adds specified config as a newly numbered node in this container + void ImportNodes(PCTSTR pszNode, const ConfigNodeContainer& tContainer); // replaces specified node with data from tContainer + void AddNodes(PCTSTR pszNode, const ConfigNodeContainer& tContainer); // adds specified config as a newly numbered node in this container - void ImportFromPropertyTree(const boost::property_tree::wiptree& rTree, boost::unique_lock&); - void ExportToPropertyTree(boost::property_tree::wiptree& rTree) const; + void ImportFromPropertyTree(const boost::property_tree::wiptree& rTree, boost::unique_lock&); + void ExportToPropertyTree(boost::property_tree::wiptree& rTree) const; #ifdef _DEBUG - // debugging - void Dump(); + // debugging + void Dump(); #endif - private: - void ImportNode(TString strCurrentPath, const boost::property_tree::wiptree& rTree); + private: + void ImportNode(TString strCurrentPath, const boost::property_tree::wiptree& rTree); - public: - typedef boost::multi_index_container, - boost::multi_index::const_mem_fun - > + boost::multi_index::composite_key, + boost::multi_index::const_mem_fun > - > - > NodeContainer; - - NodeContainer m_mic; + > + > + > NodeContainer; - TString m_strFilePath; + NodeContainer m_mic; - boost::signals2::signal m_notifier; - TStringSet m_setDelayedNotifications; - bool m_bDelayedEnabled; - object_id_t m_oidLastObjectID; + TString m_strFilePath; - TRemovedObjects m_setRemovedObjects; + boost::signals2::signal m_notifier; + TStringSet m_setDelayedNotifications; + bool m_bDelayedEnabled; + object_id_t m_oidLastObjectID; - mutable boost::shared_mutex m_lock; - }; + TRemovedObjects m_setRemovedObjects; + + mutable boost::shared_mutex m_lock; + }; + } } -END_CHCORE_NAMESPACE - #endif