Index: src/libchcore/TTaskConfigTracker.cpp =================================================================== diff -u -N --- src/libchcore/TTaskConfigTracker.cpp (revision baad6054459abaaf69cbfd1ebad8783085160d99) +++ src/libchcore/TTaskConfigTracker.cpp (revision 0) @@ -1,252 +0,0 @@ -// ============================================================================ -// Copyright (C) 2001-2010 by Jozef Starosczyk -// ixen@copyhandler.com -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU Library General Public License -// (version 2) as published by the Free Software Foundation; -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this program; if not, write to the -// Free Software Foundation, Inc., -// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// ============================================================================ -/// @file TTaskConfigTracker.cpp -/// @date 2010/10/04 -/// @brief Contains implementation of TTaskConfigTracker class. -// ============================================================================ -#include "stdafx.h" -#include "TTaskConfigTracker.h" -#include "TCoreException.h" -#include "ErrorCodes.h" -#include "TStringSet.h" -#include - -namespace chcore -{ - TOptionsSet& TOptionsSet::operator%(ETaskOptions eOption) - { - m_setOptions.insert(eOption); - - return *this; - } - - std::set& TOptionsSet::Get() - { - return m_setOptions; - } - - TTaskConfigTracker::TTaskConfigTracker() - { - } - - TTaskConfigTracker::~TTaskConfigTracker() - { - } - - bool TTaskConfigTracker::IsModified() const - { - boost::shared_lock lock(m_lock); - return !m_setModified.empty(); - } - - bool TTaskConfigTracker::IsModified(ETaskOptions eOption) const - { - boost::shared_lock lock(m_lock); - return m_setModified.find(eOption) != m_setModified.end(); - } - - bool TTaskConfigTracker::IsModified(TOptionsSet setOptions) const - { - boost::shared_lock lock(m_lock); - - std::set setCommon; - std::set_intersection(setOptions.Get().begin(), setOptions.Get().end(), m_setModified.begin(), m_setModified.end(), std::inserter(setCommon, setCommon.begin())); - - return !setCommon.empty(); - } - - bool TTaskConfigTracker::IsModified(ETaskOptions eOption, bool bResetModificationState) - { - boost::upgrade_lock lock(m_lock); - - std::set::iterator iterOption = m_setModified.find(eOption); - bool bModified = (iterOption != m_setModified.end()); - if (bModified && bResetModificationState) - { - boost::upgrade_to_unique_lock upgraded_lock(lock); - m_setModified.erase(iterOption); - } - - return bModified; - } - - bool TTaskConfigTracker::IsModified(TOptionsSet setOptions, bool bResetModificationState) - { - boost::upgrade_lock lock(m_lock); - - std::set setCommon; - std::set_intersection(setOptions.Get().begin(), setOptions.Get().end(), m_setModified.begin(), m_setModified.end(), std::inserter(setCommon, setCommon.begin())); - - bool bModified = !setCommon.empty(); - if (bModified && bResetModificationState) - { - boost::upgrade_to_unique_lock upgraded_lock(lock); - std::set::iterator iterOption; - for(ETaskOptions eOption : setCommon) - { - iterOption = m_setModified.find(eOption); - if (iterOption != m_setModified.end()) - m_setModified.erase(iterOption); - } - } - - return bModified; - } - - void TTaskConfigTracker::AddModified(const TString& strModified) - { - ETaskOptions eOption = TTaskConfigTracker::GetOptionFromString(strModified); - - boost::unique_lock lock(m_lock); - - m_setModified.insert(eOption); - } - - void TTaskConfigTracker::AddModified(ETaskOptions eModified) - { - boost::unique_lock lock(m_lock); - m_setModified.insert(eModified); - } - - void TTaskConfigTracker::AddModified(TOptionsSet setOptions) - { - boost::unique_lock lock(m_lock); - m_setModified.insert(setOptions.Get().begin(), setOptions.Get().end()); - } - - void TTaskConfigTracker::AddModified(const TStringSet& setModified) - { - TStringSet::const_iterator iterBegin = setModified.Begin(); - TStringSet::const_iterator iterEnd = setModified.End(); - - for (; iterBegin != iterEnd; ++iterBegin) - { - AddModified(*iterBegin); - } - } - - void TTaskConfigTracker::AddModified(const std::set& setModified) - { - boost::unique_lock lock(m_lock); - - m_setModified.insert(setModified.begin(), setModified.end()); - } - - void TTaskConfigTracker::RemoveModification(ETaskOptions eModified) - { - boost::upgrade_lock lock(m_lock); - std::set::iterator iterOption = m_setModified.find(eModified); - if (iterOption != m_setModified.end()) - { - boost::upgrade_to_unique_lock upgraded_lock(lock); - m_setModified.erase(iterOption); - } - } - - void TTaskConfigTracker::RemoveModificationSet(TOptionsSet setOptions) - { - boost::unique_lock lock(m_lock); - - std::set setCommon; - std::set_intersection(setOptions.Get().begin(), setOptions.Get().end(), m_setModified.begin(), m_setModified.end(), std::inserter(setCommon, setCommon.begin())); - - std::set::iterator iterOption; - for(ETaskOptions eOption : setCommon) - { - iterOption = m_setModified.find(eOption); - if (iterOption != m_setModified.end()) - m_setModified.erase(iterOption); - } - } - - void TTaskConfigTracker::RemoveModification(const TString& strModified) - { - ETaskOptions eOption = TTaskConfigTracker::GetOptionFromString(strModified); - RemoveModification(eOption); - } - - void TTaskConfigTracker::Clear() - { - boost::unique_lock lock(m_lock); - m_setModified.clear(); - } - - void TTaskConfigTracker::NotificationProc(const TStringSet& setModifications, void* pParam) - { - if (!pParam) - throw TCoreException(eErr_InvalidArgument, L"pParam", LOCATION); - - TTaskConfigTracker* pTracker = (TTaskConfigTracker*)pParam; - pTracker->AddModified(setModifications); - } - - ETaskOptions TTaskConfigTracker::GetOptionFromString(const TString& strOption) - { - if (strOption == TaskPropData::GetPropertyName()) - return eTO_UseOnlyDefaultBuffer; - if (strOption == TaskPropData::GetPropertyName()) - return eTO_DefaultBufferSize; - if (strOption == TaskPropData::GetPropertyName()) - return eTO_OneDiskBufferSize; - if (strOption == TaskPropData::GetPropertyName()) - return eTO_TwoDisksBufferSize; - if (strOption == TaskPropData::GetPropertyName()) - return eTO_CDBufferSize; - if (strOption == TaskPropData::GetPropertyName()) - return eTO_LANBufferSize; - if (strOption == TaskPropData::GetPropertyName()) - return eTO_DisableBuffering; - if (strOption == TaskPropData::GetPropertyName()) - return eTO_DisableBufferingMinSize; - if (strOption == TaskPropData::GetPropertyName()) - return eTO_BufferQueueDepth; - - if (strOption == TaskPropData::GetPropertyName()) - return eTO_SetDestinationAttributes; - if (strOption == TaskPropData::GetPropertyName()) - return eTO_ProtectReadOnlyFiles; - if(strOption == TaskPropData::GetPropertyName()) - return eTO_ScanDirectoriesBeforeBlocking; - if(strOption == TaskPropData::GetPropertyName()) - return eTO_FastMoveBeforeBlocking; - if (strOption == TaskPropData::GetPropertyName()) - return eTO_ThreadPriority; - if (strOption == TaskPropData::GetPropertyName()) - return eTO_DisablePriorityBoost; - if (strOption == TaskPropData::GetPropertyName()) - return eTO_DeleteInSeparateSubTask; - - if (strOption == TaskPropData::GetPropertyName()) - return eTO_CreateEmptyFiles; - if (strOption == TaskPropData::GetPropertyName()) - return eTO_CreateDirectoriesRelativeToRoot; - if (strOption == TaskPropData::GetPropertyName()) - return eTO_IgnoreDirectories; - if (strOption == TaskPropData::GetPropertyName()) - return eTO_AlternateFilenameFormatString_AfterFirst; - if (strOption == TaskPropData::GetPropertyName()) - return eTO_AlternateFilenameFormatString_First; - - BOOST_ASSERT(false); // unhandled case - throw TCoreException(eErr_UnhandledCase, L"Option name not supported", LOCATION); - - // add new elements before this one - BOOST_STATIC_ASSERT(eTO_Last == eTO_AlternateFilenameFormatString_AfterFirst + 1); - } -}