Index: src/libchcore/TSubTaskArray.cpp =================================================================== diff -u -N -r0b8ae6ab8b538881b651126bf8e6de9c9912a782 -r19925be73ffcadd9f345f10e03e55aadb3f0eeac --- src/libchcore/TSubTaskArray.cpp (.../TSubTaskArray.cpp) (revision 0b8ae6ab8b538881b651126bf8e6de9c9912a782) +++ src/libchcore/TSubTaskArray.cpp (.../TSubTaskArray.cpp) (revision 19925be73ffcadd9f345f10e03e55aadb3f0eeac) @@ -40,55 +40,54 @@ /////////////////////////////////////////////////////////////////////////// // TSubTasksArray -TSubTasksArray::TSubTasksArray() : - m_pSubTaskContext(NULL), +TSubTasksArray::TSubTasksArray(TSubTaskContext& rSubTaskContext) : +m_rSubTaskContext(rSubTaskContext), m_eOperationType(eOperation_None), m_lSubOperationIndex(0), m_lLastStoredIndex(-1) { } TSubTasksArray::TSubTasksArray(const TOperationPlan& rOperationPlan, TSubTaskContext& rSubTaskContext) : - m_pSubTaskContext(NULL), + m_rSubTaskContext(rSubTaskContext), m_eOperationType(eOperation_None), m_lSubOperationIndex(0), m_lLastStoredIndex(-1) { - Init(rOperationPlan, rSubTaskContext); + Init(rOperationPlan); } TSubTasksArray::~TSubTasksArray() { } -void TSubTasksArray::Init(const TOperationPlan& rOperationPlan, TSubTaskContext& rSubTaskContext) +void TSubTasksArray::Init(const TOperationPlan& rOperationPlan) { m_vSubTasks.clear(); m_lSubOperationIndex.store(0, boost::memory_order_release); - m_pSubTaskContext = &rSubTaskContext; m_eOperationType = rOperationPlan.GetOperationType(); switch(m_eOperationType) { case eOperation_Copy: { - TSubTaskBasePtr spOperation = boost::make_shared(boost::ref(rSubTaskContext)); + TSubTaskBasePtr spOperation = boost::make_shared(boost::ref(m_rSubTaskContext)); AddSubTask(spOperation, true); - spOperation = boost::make_shared(boost::ref(rSubTaskContext)); + spOperation = boost::make_shared(boost::ref(m_rSubTaskContext)); AddSubTask(spOperation, false); break; } case eOperation_Move: { - TSubTaskBasePtr spOperation = boost::make_shared(boost::ref(rSubTaskContext)); + TSubTaskBasePtr spOperation = boost::make_shared(boost::ref(m_rSubTaskContext)); AddSubTask(spOperation, true); - spOperation = boost::make_shared(boost::ref(rSubTaskContext)); + spOperation = boost::make_shared(boost::ref(m_rSubTaskContext)); AddSubTask(spOperation, false); - spOperation = boost::make_shared(boost::ref(rSubTaskContext)); + spOperation = boost::make_shared(boost::ref(m_rSubTaskContext)); AddSubTask(spOperation, false); - spOperation = boost::make_shared(boost::ref(rSubTaskContext)); + spOperation = boost::make_shared(boost::ref(m_rSubTaskContext)); AddSubTask(spOperation, false); break; @@ -114,9 +113,6 @@ TSubTaskBase::ESubOperationResult TSubTasksArray::Execute(bool bRunOnlyEstimationSubTasks) { - if(!m_pSubTaskContext) - THROW_CORE_EXCEPTION(eErr_InternalProblem); - TSubTaskBase::ESubOperationResult eResult = TSubTaskBase::eSubResult_Continue; size_t stSize = m_vSubTasks.size(); @@ -136,7 +132,7 @@ eResult = spCurrentSubTask->Exec(); - lIndex = m_lSubOperationIndex.fetch_add(1, boost::memory_order_release); + lIndex = m_lSubOperationIndex.fetch_add(1, boost::memory_order_release) + 1; } return eResult; @@ -230,9 +226,6 @@ void TSubTasksArray::Load(const ISerializerPtr& spSerializer) { - if(!m_pSubTaskContext) - THROW_CORE_EXCEPTION(eErr_InvalidData); - m_lLastStoredIndex = -1; ISerializerContainerPtr spContainer = spSerializer->GetContainer(_T("subtasks")); @@ -261,7 +254,7 @@ } // create subtask, load it and put into the array - TSubTaskBasePtr spSubTask = CreateSubtask((ESubOperationType)iType, *m_pSubTaskContext); + TSubTaskBasePtr spSubTask = CreateSubtask((ESubOperationType)iType, m_rSubTaskContext); spSubTask->Load(spSerializer); if(lID != m_vSubTasks.size())