Index: src/libchcore/TModPathContainer.cpp =================================================================== diff -u -N -r11b0a299be97bc3afaa633d6522c17b214ba3b79 -re96806b7f8ff7ca7e9f4afbea603e6351a3dc3e3 --- src/libchcore/TModPathContainer.cpp (.../TModPathContainer.cpp) (revision 11b0a299be97bc3afaa633d6522c17b214ba3b79) +++ src/libchcore/TModPathContainer.cpp (.../TModPathContainer.cpp) (revision e96806b7f8ff7ca7e9f4afbea603e6351a3dc3e3) @@ -23,316 +23,315 @@ #include "TPathContainer.h" #include "ISerializerRowData.h" -BEGIN_CHCORE_NAMESPACE - -// ============================================================================ -/// TModPathContainer::TModPathContainer -/// @date 2009/11/30 -/// -/// @brief Constructs an empty path container object. -// ============================================================================ -TModPathContainer::TModPathContainer() : - m_vPaths(), - m_oidNextObjectID(1) +namespace chcore { -} + // ============================================================================ + /// TModPathContainer::TModPathContainer + /// @date 2009/11/30 + /// + /// @brief Constructs an empty path container object. + // ============================================================================ + TModPathContainer::TModPathContainer() : + m_vPaths(), + m_oidNextObjectID(1) + { + } -// ============================================================================ -/// TModPathContainer::TModPathContainer -/// @date 2009/11/30 -/// -/// @brief Constructs the path container object from another path container. -/// @param[in] rSrcContainer - path container to copy paths from. -// ============================================================================ -TModPathContainer::TModPathContainer(const TModPathContainer& rSrcContainer) : - m_vPaths(rSrcContainer.m_vPaths), - m_oidNextObjectID(rSrcContainer.m_oidNextObjectID) -{ -} + // ============================================================================ + /// TModPathContainer::TModPathContainer + /// @date 2009/11/30 + /// + /// @brief Constructs the path container object from another path container. + /// @param[in] rSrcContainer - path container to copy paths from. + // ============================================================================ + TModPathContainer::TModPathContainer(const TModPathContainer& rSrcContainer) : + m_vPaths(rSrcContainer.m_vPaths), + m_oidNextObjectID(rSrcContainer.m_oidNextObjectID) + { + } -// ============================================================================ -/// TModPathContainer::~TModPathContainer -/// @date 2009/11/30 -/// -/// @brief Destructs this path container object. -// ============================================================================ -TModPathContainer::~TModPathContainer() -{ -} - -// ============================================================================ -/// TModPathContainer::operator= -/// @date 2009/11/30 -/// -/// @brief Assigns another path container object to this one. -/// @param[in] rSrcContainer - container with paths to copy from. -/// @return Reference to this object. -// ============================================================================ -TModPathContainer& TModPathContainer::operator=(const TModPathContainer& rSrcContainer) -{ - if(this != &rSrcContainer) + // ============================================================================ + /// TModPathContainer::~TModPathContainer + /// @date 2009/11/30 + /// + /// @brief Destructs this path container object. + // ============================================================================ + TModPathContainer::~TModPathContainer() { - m_vPaths = rSrcContainer.m_vPaths; - m_oidNextObjectID = rSrcContainer.m_oidNextObjectID; } - return *this; -} + // ============================================================================ + /// TModPathContainer::operator= + /// @date 2009/11/30 + /// + /// @brief Assigns another path container object to this one. + /// @param[in] rSrcContainer - container with paths to copy from. + /// @return Reference to this object. + // ============================================================================ + TModPathContainer& TModPathContainer::operator=(const TModPathContainer& rSrcContainer) + { + if (this != &rSrcContainer) + { + m_vPaths = rSrcContainer.m_vPaths; + m_oidNextObjectID = rSrcContainer.m_oidNextObjectID; + } -TModPathContainer& TModPathContainer::operator=(const TPathContainer& rSrcContainer) -{ - Clear(true); + return *this; + } - for(size_t stIndex = 0; stIndex < rSrcContainer.GetCount(); ++stIndex) + TModPathContainer& TModPathContainer::operator=(const TPathContainer& rSrcContainer) { - m_vPaths.insert(std::make_pair(m_oidNextObjectID++, TModificationTracker(rSrcContainer.GetAt(stIndex), true))); - } + Clear(true); - return *this; -} + for (size_t stIndex = 0; stIndex < rSrcContainer.GetCount(); ++stIndex) + { + m_vPaths.insert(std::make_pair(m_oidNextObjectID++, TModificationTracker(rSrcContainer.GetAt(stIndex), true))); + } -// ============================================================================ -/// TModPathContainer::Add -/// @date 2009/11/30 -/// -/// @brief Adds a path to the end of list. -/// @param[in] spPath - path to be added. -// ============================================================================ -void TModPathContainer::Add(const TSmartPath& spPath) -{ - m_vPaths.insert(std::make_pair(m_oidNextObjectID++, TModificationTracker(spPath, true))); -} + return *this; + } -// ============================================================================ -/// TModPathContainer::GetAt -/// @date 2009/11/30 -/// -/// @brief Retrieves path at specified index. -/// @param[in] stIndex - index at which to retrieve item. -/// @return Reference to the path object. -// ============================================================================ -const TSmartPath& TModPathContainer::GetAt(size_t stIndex) const -{ - if(stIndex > m_vPaths.size()) - THROW_CORE_EXCEPTION(eErr_BoundsExceeded); + // ============================================================================ + /// TModPathContainer::Add + /// @date 2009/11/30 + /// + /// @brief Adds a path to the end of list. + /// @param[in] spPath - path to be added. + // ============================================================================ + void TModPathContainer::Add(const TSmartPath& spPath) + { + m_vPaths.insert(std::make_pair(m_oidNextObjectID++, TModificationTracker(spPath, true))); + } - DataMap::const_iterator iter = m_vPaths.cbegin() + stIndex; - return iter->second; -} + // ============================================================================ + /// TModPathContainer::GetAt + /// @date 2009/11/30 + /// + /// @brief Retrieves path at specified index. + /// @param[in] stIndex - index at which to retrieve item. + /// @return Reference to the path object. + // ============================================================================ + const TSmartPath& TModPathContainer::GetAt(size_t stIndex) const + { + if (stIndex > m_vPaths.size()) + THROW_CORE_EXCEPTION(eErr_BoundsExceeded); -// ============================================================================ -/// TModPathContainer::GetAt -/// @date 2009/11/30 -/// -/// @brief Retrieves path at specified index. -/// @param[in] stIndex - index at which to retrieve item. -/// @return Reference to the path object. -// ============================================================================ -TSmartPath& TModPathContainer::GetAt(size_t stIndex) -{ - if(stIndex > m_vPaths.size()) - THROW_CORE_EXCEPTION(eErr_BoundsExceeded); + DataMap::const_iterator iter = m_vPaths.cbegin() + stIndex; + return iter->second; + } - DataMap::iterator iter = m_vPaths.begin() + stIndex; - return iter->second.Modify(); -} + // ============================================================================ + /// TModPathContainer::GetAt + /// @date 2009/11/30 + /// + /// @brief Retrieves path at specified index. + /// @param[in] stIndex - index at which to retrieve item. + /// @return Reference to the path object. + // ============================================================================ + TSmartPath& TModPathContainer::GetAt(size_t stIndex) + { + if (stIndex > m_vPaths.size()) + THROW_CORE_EXCEPTION(eErr_BoundsExceeded); -object_id_t TModPathContainer::GetOidAt(size_t stIndex) const -{ - if(stIndex > m_vPaths.size()) - THROW_CORE_EXCEPTION(eErr_BoundsExceeded); + DataMap::iterator iter = m_vPaths.begin() + stIndex; + return iter->second.Modify(); + } - DataMap::const_iterator iter = m_vPaths.begin() + stIndex; - return iter->first; -} + object_id_t TModPathContainer::GetOidAt(size_t stIndex) const + { + if (stIndex > m_vPaths.size()) + THROW_CORE_EXCEPTION(eErr_BoundsExceeded); -// ============================================================================ -/// TModPathContainer::SetAt -/// @date 2009/11/30 -/// -/// @brief Sets a path at a specified index. -/// @param[in] stIndex - index at which to set the path. -/// @param[in] spPath - path to be set. -// ============================================================================ -void TModPathContainer::SetAt(size_t stIndex, const TSmartPath& spPath) -{ - if(stIndex > m_vPaths.size()) - THROW_CORE_EXCEPTION(eErr_BoundsExceeded); + DataMap::const_iterator iter = m_vPaths.begin() + stIndex; + return iter->first; + } - DataMap::iterator iter = m_vPaths.begin() + stIndex; - iter->second = spPath; -} + // ============================================================================ + /// TModPathContainer::SetAt + /// @date 2009/11/30 + /// + /// @brief Sets a path at a specified index. + /// @param[in] stIndex - index at which to set the path. + /// @param[in] spPath - path to be set. + // ============================================================================ + void TModPathContainer::SetAt(size_t stIndex, const TSmartPath& spPath) + { + if (stIndex > m_vPaths.size()) + THROW_CORE_EXCEPTION(eErr_BoundsExceeded); -// ============================================================================ -/// TModPathContainer::DeleteAt -/// @date 2009/11/30 -/// -/// @brief Removes a path from container at specified index. -/// @param[in] stIndex - index at which to delete. -// ============================================================================ -void TModPathContainer::DeleteAt(size_t stIndex) -{ - if(stIndex > m_vPaths.size()) - THROW_CORE_EXCEPTION(eErr_BoundsExceeded); + DataMap::iterator iter = m_vPaths.begin() + stIndex; + iter->second = spPath; + } - DataMap::iterator iterDel = m_vPaths.begin() + stIndex; - m_setRemovedItems.Add(iterDel->first); - m_vPaths.erase(iterDel); -} + // ============================================================================ + /// TModPathContainer::DeleteAt + /// @date 2009/11/30 + /// + /// @brief Removes a path from container at specified index. + /// @param[in] stIndex - index at which to delete. + // ============================================================================ + void TModPathContainer::DeleteAt(size_t stIndex) + { + if (stIndex > m_vPaths.size()) + THROW_CORE_EXCEPTION(eErr_BoundsExceeded); -// ============================================================================ -/// TModPathContainer::Clear -/// @date 2009/11/30 -/// -/// @brief Removes all paths from this container. -// ============================================================================ -void TModPathContainer::Clear(bool bClearModificationsData) -{ - if(!bClearModificationsData) + DataMap::iterator iterDel = m_vPaths.begin() + stIndex; + m_setRemovedItems.Add(iterDel->first); + m_vPaths.erase(iterDel); + } + + // ============================================================================ + /// TModPathContainer::Clear + /// @date 2009/11/30 + /// + /// @brief Removes all paths from this container. + // ============================================================================ + void TModPathContainer::Clear(bool bClearModificationsData) { - for(DataMap::iterator iterDel = m_vPaths.begin(); iterDel != m_vPaths.end(); ++iterDel) + if (!bClearModificationsData) { - m_setRemovedItems.Add(iterDel->first); + for (DataMap::iterator iterDel = m_vPaths.begin(); iterDel != m_vPaths.end(); ++iterDel) + { + m_setRemovedItems.Add(iterDel->first); + } } + else + { + m_setRemovedItems.Clear(); + m_oidNextObjectID = 1; + } + + m_vPaths.clear(); } - else + + // ============================================================================ + /// TModPathContainer::GetCount + /// @date 2009/11/30 + /// + /// @brief Retrieves count of elements in the container. + /// @return Count of elements. + // ============================================================================ + size_t TModPathContainer::GetCount() const { - m_setRemovedItems.Clear(); - m_oidNextObjectID = 1; + return m_vPaths.size(); } - m_vPaths.clear(); -} + // ============================================================================ + /// TModPathContainer::GetCount + /// @date 2010/10/12 + /// + /// @brief Retrieves info if this container is empty. + /// @return True if empty, false otherwise. + // ============================================================================ + bool TModPathContainer::IsEmpty() const + { + return m_vPaths.empty(); + } -// ============================================================================ -/// TModPathContainer::GetCount -/// @date 2009/11/30 -/// -/// @brief Retrieves count of elements in the container. -/// @return Count of elements. -// ============================================================================ -size_t TModPathContainer::GetCount() const -{ - return m_vPaths.size(); -} + const TSmartPath& TModPathContainer::GetAtOid(object_id_t oidObjectID) const + { + return m_vPaths.at(oidObjectID); + } -// ============================================================================ -/// TModPathContainer::GetCount -/// @date 2010/10/12 -/// -/// @brief Retrieves info if this container is empty. -/// @return True if empty, false otherwise. -// ============================================================================ -bool TModPathContainer::IsEmpty() const -{ - return m_vPaths.empty(); -} + TSmartPath& TModPathContainer::GetAtOid(object_id_t oidObjectID) + { + return m_vPaths.at(oidObjectID).Modify(); + } -const TSmartPath& TModPathContainer::GetAtOid(object_id_t oidObjectID) const -{ - return m_vPaths.at(oidObjectID); -} + void TModPathContainer::SetByOid(object_id_t oidObjectID, const TSmartPath& spPath) + { + DataMap::iterator iterFnd = m_vPaths.find(oidObjectID); + if (iterFnd != m_vPaths.end()) + iterFnd->second = spPath; + else + m_vPaths.insert(std::make_pair(oidObjectID, TModificationTracker(spPath, true))); + } -TSmartPath& TModPathContainer::GetAtOid(object_id_t oidObjectID) -{ - return m_vPaths.at(oidObjectID).Modify(); -} + void TModPathContainer::DeleteOid(object_id_t oidObjectID) + { + m_vPaths.erase(oidObjectID); + m_setRemovedItems.Add(oidObjectID); + } -void TModPathContainer::SetByOid(object_id_t oidObjectID, const TSmartPath& spPath) -{ - DataMap::iterator iterFnd = m_vPaths.find(oidObjectID); - if(iterFnd != m_vPaths.end()) - iterFnd->second = spPath; - else - m_vPaths.insert(std::make_pair(oidObjectID, TModificationTracker(spPath, true))); -} - -void TModPathContainer::DeleteOid(object_id_t oidObjectID) -{ - m_vPaths.erase(oidObjectID); - m_setRemovedItems.Add(oidObjectID); -} - -bool TModPathContainer::HasModifications() const -{ - if(!m_setRemovedItems.IsEmpty()) - return true; - - for(DataMap::const_iterator iterDel = m_vPaths.begin(); iterDel != m_vPaths.end(); ++iterDel) + bool TModPathContainer::HasModifications() const { - if(iterDel->second.IsModified() || iterDel->second.IsAdded()) + if (!m_setRemovedItems.IsEmpty()) return true; - } - return false; -} + for (DataMap::const_iterator iterDel = m_vPaths.begin(); iterDel != m_vPaths.end(); ++iterDel) + { + if (iterDel->second.IsModified() || iterDel->second.IsAdded()) + return true; + } -void TModPathContainer::ClearModifications() -{ - m_setRemovedItems.Clear(); + return false; + } - for(DataMap::iterator iterDel = m_vPaths.begin(); iterDel != m_vPaths.end(); ++iterDel) + void TModPathContainer::ClearModifications() { - iterDel->second.ClearModifications(); + m_setRemovedItems.Clear(); + + for (DataMap::iterator iterDel = m_vPaths.begin(); iterDel != m_vPaths.end(); ++iterDel) + { + iterDel->second.ClearModifications(); + } } -} -void TModPathContainer::Store(const ISerializerContainerPtr& spContainer) const -{ - InitColumns(spContainer); - - // delete items first - spContainer->DeleteRows(m_setRemovedItems); - m_setRemovedItems.Clear(); - - // add/modify - for(DataMap::const_iterator iterPath = m_vPaths.begin(); iterPath != m_vPaths.end(); ++iterPath) + void TModPathContainer::Store(const ISerializerContainerPtr& spContainer) const { - const TModificationTracker& rItem = iterPath->second; + InitColumns(spContainer); - if(rItem.IsModified()) + // delete items first + spContainer->DeleteRows(m_setRemovedItems); + m_setRemovedItems.Clear(); + + // add/modify + for (DataMap::const_iterator iterPath = m_vPaths.begin(); iterPath != m_vPaths.end(); ++iterPath) { - ISerializerRowData& rRow = spContainer->GetRow(iterPath->first, rItem.IsAdded()); - rRow.SetValue(_T("path"), rItem); + const TModificationTracker& rItem = iterPath->second; - rItem.ClearModifications(); + if (rItem.IsModified()) + { + ISerializerRowData& rRow = spContainer->GetRow(iterPath->first, rItem.IsAdded()); + rRow.SetValue(_T("path"), rItem); + + rItem.ClearModifications(); + } + else + continue; } - else - continue; } -} -void TModPathContainer::Load(const ISerializerContainerPtr& spContainer) -{ - m_setRemovedItems.Clear(); - m_vPaths.clear(); - m_oidNextObjectID = 1; + void TModPathContainer::Load(const ISerializerContainerPtr& spContainer) + { + m_setRemovedItems.Clear(); + m_vPaths.clear(); + m_oidNextObjectID = 1; - InitColumns(spContainer); + InitColumns(spContainer); - ISerializerRowReaderPtr spRowReader = spContainer->GetRowReader(); - while(spRowReader->Next()) - { - object_id_t oidObjectID = 0; - TSmartPath path; + ISerializerRowReaderPtr spRowReader = spContainer->GetRowReader(); + while (spRowReader->Next()) + { + object_id_t oidObjectID = 0; + TSmartPath path; - spRowReader->GetValue(_T("id"), oidObjectID); - spRowReader->GetValue(_T("path"), path); + spRowReader->GetValue(_T("id"), oidObjectID); + spRowReader->GetValue(_T("path"), path); - m_vPaths.insert(std::make_pair(oidObjectID, TModificationTracker(path, false))); + m_vPaths.insert(std::make_pair(oidObjectID, TModificationTracker(path, false))); + } + + ClearModifications(); } - ClearModifications(); -} - -void TModPathContainer::InitColumns(const ISerializerContainerPtr& spContainer) const -{ - IColumnsDefinition& rColumns = spContainer->GetColumnsDefinition(); - if(rColumns.IsEmpty()) + void TModPathContainer::InitColumns(const ISerializerContainerPtr& spContainer) const { - rColumns.AddColumn(_T("id"), ColumnType::value); - rColumns.AddColumn(_T("path"), IColumnsDefinition::eType_path); + IColumnsDefinition& rColumns = spContainer->GetColumnsDefinition(); + if (rColumns.IsEmpty()) + { + rColumns.AddColumn(_T("id"), ColumnType::value); + rColumns.AddColumn(_T("path"), IColumnsDefinition::eType_path); + } } } - -END_CHCORE_NAMESPACE