Browse Source

optimize the calculating speed of GB standard.

gsp 2 years ago
parent
commit
ca55aa7257

+ 15 - 166
OTSCPP/OTSClrInterface/ReportCalculateClr/ReportMgrClr.cpp

@@ -20,9 +20,6 @@ namespace OTSCLRINTERFACE {
 			return;
 		}		
 
-		
-
-		
 			m_pReportMgr = new CReportMgrPtr(pRProjFileMgr);
 		
 	}
@@ -45,7 +42,7 @@ namespace OTSCLRINTERFACE {
 	}
 
 	
-	CReportMgrPtr CReportMgrClr::GetCReportProjFileMgrPtr()
+	CReportMgrPtr CReportMgrClr::GetCReportMgrPtr()
 	{
 		return *m_pReportMgr;
 	}
@@ -85,7 +82,7 @@ namespace OTSCLRINTERFACE {
 			return nullptr;
 		}
 
-		CPropParamPtr pPropParam = m_pReportMgr->get()->GetPropertyParamGrid();
+		CPropParamPtr pPropParam = m_pReportMgr->get()->GetPropertyParamForGrid();
 		ASSERT(pPropParam);
 		if (!pPropParam)
 		{
@@ -105,7 +102,7 @@ namespace OTSCLRINTERFACE {
 			return nullptr;
 		}
 
-		CReportMgrPtr pReportProjFileMgr = GetCReportProjFileMgrPtr();
+		CReportMgrPtr pReportProjFileMgr = GetCReportMgrPtr();
 		ASSERT(pReportProjFileMgr);
 		if (!pReportProjFileMgr)
 		{
@@ -136,7 +133,7 @@ namespace OTSCLRINTERFACE {
 			return false;
 		}
 
-		CReportMgrPtr pRProjFileMgrPtr = GetCReportProjFileMgrPtr();
+		CReportMgrPtr pRProjFileMgrPtr = GetCReportMgrPtr();
 		
 		if (nullptr == pRProjFileMgrPtr)
 		{
@@ -158,7 +155,7 @@ namespace OTSCLRINTERFACE {
 			return nullptr;
 		}
 
-		CReportMgrPtr pRProjFileMgrPtr = GetCReportProjFileMgrPtr();
+		CReportMgrPtr pRProjFileMgrPtr = GetCReportMgrPtr();
 
 		if (nullptr == pRProjFileMgrPtr)
 		{
@@ -184,7 +181,7 @@ namespace OTSCLRINTERFACE {
 			return false;
 		}
 
-		CReportMgrPtr pRProjFileMgrPtr = GetCReportProjFileMgrPtr();
+		CReportMgrPtr pRProjFileMgrPtr = GetCReportMgrPtr();
 
 		if (nullptr == pRProjFileMgrPtr)
 		{
@@ -200,28 +197,7 @@ namespace OTSCLRINTERFACE {
 	
 		return true;
 	}
-	CSmplMsrResultFileMgrClr^ CReportMgrClr::GetASmplMsrResultMgrById(int a_nIndex)
-	{
-		if (m_pReportMgr == nullptr)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("GetSmplMsrResultMgrs: empty pointer."));
-			return nullptr;
-		}
-
-		CReportMgrPtr RProjFileMgrPtr = GetCReportProjFileMgrPtr();
-		if (nullptr == RProjFileMgrPtr)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("(CReportMgrClr::GetASmplMsrResultMgrById(int a_nIndex = %d)) RProjFileMgrPtr = null "), a_nIndex);
-			return nullptr;
-		}
 
-		CSmplMsrResultFileMgrPtr pSMsrRetFileMgr = RProjFileMgrPtr->GetASmplMsrResultMgrById(a_nIndex);
-
-		CSmplMsrResultFileMgrClr^ pSMsrRetFileMgrClr = gcnew CSmplMsrResultFileMgrClr(pSMsrRetFileMgr);
-
-		return pSMsrRetFileMgrClr;
-
-	}
 	CSmplMsrResultFileMgrClr^ CReportMgrClr::GetASmplMsrResultMgrByPathName(String^ a_strPathName)
 	{
 		if (m_pReportMgr == nullptr)
@@ -229,7 +205,7 @@ namespace OTSCLRINTERFACE {
 			LogErrorTrace(__FILE__, __LINE__, _T("GetSmplMsrResultMgrs: empty pointer."));
 			return nullptr;
 		}
-		CReportMgrPtr RProjFileMgrPtr = GetCReportProjFileMgrPtr();
+		CReportMgrPtr RProjFileMgrPtr = GetCReportMgrPtr();
 		if (nullptr == RProjFileMgrPtr)
 		{
 			LogErrorTrace(__FILE__, __LINE__, _T("(CReportMgrClr::GetASmplMsrResultMgrByPathName(String^ a_strPathName = %s)) RProjFileMgrPtr = null "), a_strPathName);
@@ -247,134 +223,7 @@ namespace OTSCLRINTERFACE {
 
 		return pSMsrRetFileMgrClr;
 	}
-	bool CReportMgrClr::DeleteASmplMsrResultMgrById(int a_nIndex)
-	{
-		if (m_pReportMgr == nullptr)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("GetSmplMsrResultMgrs: empty pointer."));
-			return false;
-		}
-		CReportMgrPtr RProjFileMgrPtr = GetCReportProjFileMgrPtr();
-		if (nullptr == RProjFileMgrPtr)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("(CReportMgrClr::DeleteASmplMsrResultMgrById(int a_nIndex )) RProjFileMgrPtr = null "));
-			return false;
-		}
-		
-		if (!RProjFileMgrPtr->DeleteASmplMsrResultMgrById(a_nIndex))
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("(CReportMgrClr::DeleteASmplMsrResultMgrById(a_nIndex)) DeleteASmplMsrResultMgrById(a_nIndex = %d) "), a_nIndex);
-			return false;
-		}
-
-		return true;
-	}
-	bool  CReportMgrClr::DeleteASmplMsrResultMgrByPathName(String^ a_strPathName)
-	{
-		if (m_pReportMgr == nullptr)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("GetSmplMsrResultMgrs: empty pointer."));
-			return false;
-		}
-		CReportMgrPtr RProjFileMgrPtr = GetCReportProjFileMgrPtr();
-		if (nullptr == RProjFileMgrPtr)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("(CReportMgrClr::DeleteASmplMsrResultMgrByPathName(String^ a_strPathName)) RProjFileMgrPtr = null "));
-			return false;
-		}
-
-		if (!RProjFileMgrPtr->DeleteASmplMsrResultMgrByPathName(a_strPathName))
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("(CReportMgrClr::DeleteASmplMsrResultMgrByPathName(String^ a_strPathName)) DeleteASmplMsrResultMgrByPathName(a_strPathName = %s) = false "), a_strPathName);
-			return false;
-		}
-
-		return true;
-
-	}
-
-	CSmplMsrResultFileMgrClr^ CReportMgrClr::GetWorkingSmplMsrReslMgr()
-	{
-		if (m_pReportMgr == nullptr)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("GetWorkingSmplMsrReslMgr: empty pointer."));
-			return nullptr;
-		}
-		CReportMgrPtr RProjFileMgrPtr = GetCReportProjFileMgrPtr();
-		if (nullptr == RProjFileMgrPtr)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("(CReportMgrClr::GetWorkingSmplMsrReslMgr(String^ a_strPathName)) RProjFileMgrPtr = null "));
-			return nullptr;
-		}
-
-		CSmplMsrResultFileMgrPtr pSmplMsrResultFileMgr = RProjFileMgrPtr->GetWorkingSmplMsrReslMgr();
-
-		ASSERT(pSmplMsrResultFileMgr);
-		if (!pSmplMsrResultFileMgr)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("(CReportMgrClr::GetWorkingSmplMsrReslMgr(String^ a_strPathName)) RProjFileMgrPtr = null "));
-			return nullptr;
-		}
-
-		CSmplMsrResultFileMgrClr^ pSMRFMgrClr = gcnew CSmplMsrResultFileMgrClr(pSmplMsrResultFileMgr);
-
-		return pSMRFMgrClr;
-	}
-	String^ CReportMgrClr::GetWorkingSampleName()
-	{
-		if (m_pReportMgr == nullptr)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("GetWorkingSampleName: empty pointer."));
-			return nullptr;
-		}
-		CReportMgrPtr RProjFileMgrPtr = GetCReportProjFileMgrPtr();
-		if (nullptr == RProjFileMgrPtr)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("GetWorkingSampleName: invalid pointer. "));
-			return nullptr;
-		}
-
-		CString strName = RProjFileMgrPtr->GetWorkingSampleName();
-
-		String^ strNameClr = gcnew String(strName);
-
-		return strNameClr;
-	}
-	bool CReportMgrClr::SetWorkingSmplMsrReslMgr(CSmplMsrResultFileMgrClr^ a_pSmpMsr)
-	{
-		if (m_pReportMgr == nullptr)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("SetWorkingSmplMsrReslMgr: empty pointer."));
-			return false;
-		}
-
-		ASSERT(a_pSmpMsr);
-		if (!a_pSmpMsr)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("SetWorkingSmplMsrReslMgr: invalid sample measure result file manger clr pointer."));
-			return false;
-		}
-
-		CReportMgrPtr RProjFileMgrPtr = GetCReportProjFileMgrPtr();
-		if (nullptr == RProjFileMgrPtr)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("SetWorkingSmplMsrReslMgr: can't get report project file manager pointer."));
-			return false;
-		}
-
-		CSmplMsrResultFileMgrPtr pSmplMsrResultFileMgr = a_pSmpMsr->GetCSmplMsrResultFileMgrPtr();
-		
-		ASSERT(pSmplMsrResultFileMgr);
-		if (!pSmplMsrResultFileMgr)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("SetWorkingSmplMsrReslMgr: invalid sample measure result file manager pointer."));
-			return false;
-		}
-
-		bool bRet = RProjFileMgrPtr->SetWorkingSmplMsrReslMgr(pSmplMsrResultFileMgr);
-
-		return bRet;
-	}
+	
 
 	
 	// working sample index
@@ -386,7 +235,7 @@ namespace OTSCLRINTERFACE {
 			return -1;
 		}
 
-		CReportMgrPtr RProjFileMgrPtr = GetCReportProjFileMgrPtr();
+		CReportMgrPtr RProjFileMgrPtr = GetCReportMgrPtr();
 		if (nullptr == RProjFileMgrPtr)
 		{
 			LogErrorTrace(__FILE__, __LINE__, _T("(GetWorkingSampleIndex: invalid pointer."));
@@ -403,7 +252,7 @@ namespace OTSCLRINTERFACE {
 			return;
 		}
 
-		CReportMgrPtr RProjFileMgrPtr = GetCReportProjFileMgrPtr();
+		CReportMgrPtr RProjFileMgrPtr = GetCReportMgrPtr();
 		if (nullptr == RProjFileMgrPtr)
 		{
 			LogErrorTrace(__FILE__, __LINE__, _T("(SetWorkingSampleIndex: invalid pointer."));
@@ -426,16 +275,16 @@ namespace OTSCLRINTERFACE {
 			return nullptr;
 		}
 
-		CReportMgrPtr pReportProjFileMgr = GetCReportProjFileMgrPtr();
+		CReportMgrPtr pReportMgr = GetCReportMgrPtr();
 
-		ASSERT(pReportProjFileMgr);
-		if (!pReportProjFileMgr)
+		ASSERT(pReportMgr);
+		if (!pReportMgr)
 		{
 			LogErrorTrace(__FILE__, __LINE__, _T("GridDataTransfer: failed to create pointer."));
 			return nullptr;
 		}
 
-		CGridDatasList listGridData = pReportProjFileMgr->GridDataTransfer(thePropParam->GetPropParamPtr());
+		CGridDatasList listGridData = pReportMgr->GridDataTransfer(thePropParam->GetPropParamPtr());
 		CGridDataListClr^ listGridDataClr = gcnew CGridDataListClr();
 		for (auto pGridData : listGridData)
 		{
@@ -456,7 +305,7 @@ namespace OTSCLRINTERFACE {
 			return false;
 		}
 
-		CReportMgrPtr pReportProjFileMgr = GetCReportProjFileMgrPtr();
+		CReportMgrPtr pReportProjFileMgr = GetCReportMgrPtr();
 
 		ASSERT(pReportProjFileMgr);
 		if (!pReportProjFileMgr)

+ 2 - 8
OTSCPP/OTSClrInterface/ReportCalculateClr/ReportMgrClr.h

@@ -29,7 +29,7 @@ namespace OTSCLRINTERFACE {
 
 		
 
-		CReportMgrPtr GetCReportProjFileMgrPtr();
+		CReportMgrPtr GetCReportMgrPtr();
 
 		void SetSwitchForSmlResultFile(int nIndex,bool ifcheck);
 
@@ -45,15 +45,9 @@ namespace OTSCLRINTERFACE {
 		// sample measure result files
 		List<CSmplMsrResultFileMgrClr^>^ GetSmplMsrResultMgrs();
 		bool AddASmplMsrResultMgr(String^ a_strPathName);
-		CSmplMsrResultFileMgrClr^ GetASmplMsrResultMgrById(int a_nIndex);
+	
 		CSmplMsrResultFileMgrClr^ GetASmplMsrResultMgrByPathName(String^ a_strPathName);
-		bool DeleteASmplMsrResultMgrById(int a_nIndex);
-		bool DeleteASmplMsrResultMgrByPathName(String^ a_strPathName);
 
-		// Get working sample
-		CSmplMsrResultFileMgrClr^ GetWorkingSmplMsrReslMgr();
-		String^ GetWorkingSampleName();
-		bool SetWorkingSmplMsrReslMgr(CSmplMsrResultFileMgrClr^ a_pSmpMsr);
 	
 		// working sample index
 		int GetWorkingSampleIndex();

+ 14 - 16
OTSCPP/OTSRptCalculate/GBCal/CGBCalculate.cpp

@@ -39,7 +39,7 @@ namespace OTSGBCalculate
 
 		// depart compound source name
 
-		CPropParamPtr currentProp = m_rptMgrPtr->GetPropertyParamGrid();
+		CPropParamPtr currentProp = m_rptMgrPtr->GetPropertyParamForGrid();
 		std::vector<CString> listDataSource = currentProp->GetDataSourceList();
 		int nSelectedDataSourceIndex = currentProp->GetDataSourceId();
 		CString sDataSourceNames = listDataSource[nSelectedDataSourceIndex];
@@ -61,18 +61,16 @@ namespace OTSGBCalculate
 			
 			CSmplMsrResultFileMgrPtr rstFileMgrPrt = m_rptMgrPtr->GetASmplMsrResultMgrByFileName(strDataSourceName);
 			
-			// sample measurment result file manager
-			CSmplMsrResultFileMgr* pSmplMsrResultFileMgr;
-			pSmplMsrResultFileMgr = rstFileMgrPrt.get();
+			
 
-			CSmplMsrResultFilePtr pSmplMsrResultFile = pSmplMsrResultFileMgr->GetSmplMsrResultFile();
+			CSmplMsrResultFilePtr pSmplMsrResultFile = rstFileMgrPrt->GetSmplMsrResultFile();
 			COTSSamplePtr pSample = pSmplMsrResultFile->GetSample();
 
 		
-			CGBFieldList listRawGBFields=CalGBFields(pSmplMsrResultFileMgr);
+			CGBFieldList listRawGBFields=CalGBFields(rstFileMgrPrt);
 			listCGBField = listRawGBFields;
 	
-			CALCULATE_TABLE_TYPE ty = m_rptMgrPtr->GetPropertyParamGrid()->GetCalTableType();
+			CALCULATE_TABLE_TYPE ty = m_rptMgrPtr->GetPropertyParamForGrid()->GetCalTableType();
 			if (ty == CALCULATE_TABLE_TYPE::DIN)
 			{
 				listGridData = this->GetGridDataListForOneDataSourceDIN(pSmplMsrResultFile->GetAllParticles(), ty);
@@ -346,10 +344,10 @@ namespace OTSGBCalculate
 		CGridDataPtr pGridData = CGridDataPtr(new CGridData());
 		std::vector<CString> listDataSource;
 		listDataSource.clear();
-		listDataSource = m_rptMgrPtr->GetPropertyParamGrid()->GetDataSourceList();
+		listDataSource = m_rptMgrPtr->GetPropertyParamForGrid()->GetDataSourceList();
 		pGridData->SetDataSourceList(listDataSource);
 
-		int nDataSourceId = m_rptMgrPtr->GetPropertyParamGrid()->GetDataSourceId();
+		int nDataSourceId = m_rptMgrPtr->GetPropertyParamForGrid()->GetDataSourceId();
 		pGridData->SetDataSourceId(nDataSourceId);
 		//amounts
 		CGridColumnsList listCol;
@@ -632,10 +630,10 @@ namespace OTSGBCalculate
 			CGridDataPtr pGridData = CGridDataPtr(new CGridData());
 			std::vector<CString> listDataSource;
 			listDataSource.clear();
-			listDataSource = m_rptMgrPtr->GetPropertyParamGrid()->GetDataSourceList();
+			listDataSource = m_rptMgrPtr->GetPropertyParamForGrid()->GetDataSourceList();
 			pGridData->SetDataSourceList(listDataSource);
 
-			int nDataSourceId = m_rptMgrPtr->GetPropertyParamGrid()->GetDataSourceId();
+			int nDataSourceId = m_rptMgrPtr->GetPropertyParamForGrid()->GetDataSourceId();
 			pGridData->SetDataSourceId(nDataSourceId);
 			//amounts
 			CGridColumnsList listCol;
@@ -756,10 +754,10 @@ namespace OTSGBCalculate
 		CGridDataPtr pGridData = CGridDataPtr(new CGridData());
 		std::vector<CString> listDataSource;
 		listDataSource.clear();
-		listDataSource = m_rptMgrPtr->GetPropertyParamGrid()->GetDataSourceList();
+		listDataSource = m_rptMgrPtr->GetPropertyParamForGrid()->GetDataSourceList();
 		pGridData->SetDataSourceList(listDataSource);
 
-		int nDataSourceId = m_rptMgrPtr->GetPropertyParamGrid()->GetDataSourceId();
+		int nDataSourceId = m_rptMgrPtr->GetPropertyParamForGrid()->GetDataSourceId();
 		pGridData->SetDataSourceId(nDataSourceId);
 		//amounts
 		CGridColumnsList listCol;
@@ -893,10 +891,10 @@ namespace OTSGBCalculate
 		CGridDataPtr pGridData = CGridDataPtr(new CGridData());
 		std::vector<CString> listDataSource;
 		listDataSource.clear();
-		listDataSource = m_rptMgrPtr->GetPropertyParamGrid()->GetDataSourceList();
+		listDataSource = m_rptMgrPtr->GetPropertyParamForGrid()->GetDataSourceList();
 		pGridData->SetDataSourceList(listDataSource);
 
-		int nDataSourceId = m_rptMgrPtr->GetPropertyParamGrid()->GetDataSourceId();
+		int nDataSourceId = m_rptMgrPtr->GetPropertyParamForGrid()->GetDataSourceId();
 		pGridData->SetDataSourceId(nDataSourceId);
 		//amounts
 		CGridColumnsList listCol;
@@ -1110,7 +1108,7 @@ namespace OTSGBCalculate
 
 	
 	// calculate GB fields
-	CGBFieldList CGBCalculate::CalGBFields(CSmplMsrResultFileMgr* pSmplMgr)
+	CGBFieldList CGBCalculate::CalGBFields(CSmplMsrResultFileMgrPtr pSmplMgr)
 	{
 		CGBFieldList m_listGBFields;
 		m_listGBFields.clear();

+ 1 - 1
OTSCPP/OTSRptCalculate/GBCal/CGBCalculate.h

@@ -34,7 +34,7 @@ namespace OTSGBCalculate
 
 
 		// calculate GB fields
-		CGBFieldList CalGBFields(CSmplMsrResultFileMgr* pSmplMgr);
+		CGBFieldList CalGBFields(CSmplMsrResultFileMgrPtr pSmplMgr);
 
 		// calculate how many fields needed (horizontal) 
 		void CalOTSFieldsNo(int& a_nRow, int& a_nColumn, int a_nFieldWidth,int a_nFieldHeight);

+ 36 - 214
OTSCPP/OTSRptCalculate/Model/ReportMgr.cpp

@@ -21,7 +21,7 @@ namespace OTSMODEL {
 	{
 	
 		m_listPropParams.clear();
-		m_listSmplMgrs.clear();
+		m_mapSmplMgrs.clear();
 	
 		m_nWorkingSampeIndex = -1;
 	
@@ -52,7 +52,7 @@ namespace OTSMODEL {
 	{
 		return m_listPropParams[(int)DISPLAY_PICTURE_TYPE::IMAGE];
 	}
-	CPropParamPtr CReportMgr::GetPropertyParamGrid()
+	CPropParamPtr CReportMgr::GetPropertyParamForGrid()
 	{
 		return m_listPropParams[(int)DISPLAY_PICTURE_TYPE::TABLE];
 	}
@@ -139,36 +139,38 @@ namespace OTSMODEL {
 		_CrtSetDbgFlag(tmpFlag);*/
 
 		//_CrtSetBreakAlloc(351380);
-
+		if (m_mapSmplMgrs.find(a_strPathName) != m_mapSmplMgrs.end())//already exist;
+		{
+			//m_mapSmplMgrs[a_strPathName].
+			return true;
+		}
+			
 
 		CSmplMsrResultFileMgrPtr pSmplMsrResultFileMgrPtr = CSmplMsrResultFileMgrPtr(new CSmplMsrResultFileMgr(a_strPathName));
 
+		if (!COTSFileSys::Exists(a_strPathName))
+		{
+			LogErrorTrace(__FILE__, __LINE__, "result file not exist!");
+			return false;
+		}
+
 		// load sample result file
 		if (!pSmplMsrResultFileMgrPtr->Load(a_strPathName))
 		{
 			return FALSE;
 		}
 
-		//判断新打开的测量结果文件名,是否已经在打开的测量结果列表名中,是的话,不打开,防止同名
-		CString strSampleNameNew = pSmplMsrResultFileMgrPtr->GetSmplMsrResultFile()->GetSample()->GetName();
-		for (int i = 0; i < m_listSmplMgrs.size(); i++)
-		{
-			if (m_listSmplMgrs[i]->GetSmplMsrResultFile()->GetSample()->GetName() == strSampleNameNew)
-			{
-				LogErrorTrace(__FILE__, __LINE__, _T("AddASmplMsrResultMgr: The measurement result name is already included."));
-				return FALSE;
-			}
-		}
+		
 
 		// add the file path name into file path names list
 	
 
 		// add the sample result file into sample measure result files list
-		m_listSmplMgrs.push_back(pSmplMsrResultFileMgrPtr);
-
+		m_mapSmplMgrs[a_strPathName]=pSmplMsrResultFileMgrPtr;
+	
 	
 		// set working sample
-		m_nWorkingSampeIndex = (int)m_listSmplMgrs.size() - 1;
+		m_nWorkingSampeIndex = m_mapSmplMgrs.size();
 
 		// reset property parameters
 		ResetPropertyParams();
@@ -191,19 +193,11 @@ namespace OTSMODEL {
 			CSmplMsrResultFilePtr pSmplMsrResultFileNew = CSmplMsrResultFilePtr(new CSmplMsrResultFile(pSmplMsrResultFile.get()));
 			pSmplMsrResultMgrNew->SetSmplMsrResultFile(pSmplMsrResultFileNew);
 
-			m_listSmplMgrs.push_back(pSmplMsrResultMgrNew);
+			m_mapSmplMgrs[strPathname]=pSmplMsrResultMgrNew;
 		}
 	}
 
-	CSmplMsrResultFileMgrPtr CReportMgr::GetASmplMsrResultMgrById(int a_nIndex)
-	{
-		if (a_nIndex < 0 || a_nIndex >= (int)m_listSmplMgrs.size())
-		{
-			return nullptr;
-		}
 
-		return m_listSmplMgrs[a_nIndex];
-	}
 	CSmplMsrResultFileMgrPtr CReportMgr::GetASmplMsrResultMgrByPathName(CString a_strPathName)
 	{
 		a_strPathName.Trim();
@@ -211,12 +205,12 @@ namespace OTSMODEL {
 		{
 			return nullptr;
 		}
-		auto itr = std::find_if(m_listSmplMgrs.begin(), m_listSmplMgrs.end(), [a_strPathName](CSmplMsrResultFileMgrPtr p) { return p->GetPathName().CompareNoCase(a_strPathName) == 0; });
-		if (itr == m_listSmplMgrs.end())
+		auto itr = m_mapSmplMgrs.find(a_strPathName);
+		if (itr == m_mapSmplMgrs.end())
 		{
 			return nullptr;
 		}
-		return *itr;
+		return itr->second;
 	}
 	CSmplMsrResultFileMgrPtr CReportMgr::GetASmplMsrResultMgrByFileName(CString a_strFileName)
 	{
@@ -226,184 +220,22 @@ namespace OTSMODEL {
 			return nullptr;
 		}
 
-		auto itr = std::find_if(m_listSmplMgrs.begin(), m_listSmplMgrs.end(), [a_strFileName](CSmplMsrResultFileMgrPtr p)
+		auto itr = std::find_if(m_mapSmplMgrs.begin(), m_mapSmplMgrs.end(), [a_strFileName](std::pair<CString, CSmplMsrResultFileMgrPtr> p)
 			{
-				CString strDataSource = COTSHelper::GetFileName(p->GetPathName());
+			// lambda predicate 
+				CString strDataSource = COTSHelper::GetFileName(p.second->GetPathName());
 				return strDataSource.CompareNoCase(a_strFileName) == 0;
 			});
-		if (itr == m_listSmplMgrs.end())
-		{
-			return nullptr;
-		}
-		return *itr;
-	}
-
-	BOOL CReportMgr::DeleteASmplMsrResultMgrById(int a_nIndex)
-	{
-		// check the index
-		if (a_nIndex < 0 || a_nIndex >= (int)m_listSmplMgrs.size())
-		{
-			// invalid input sample index
-			LogErrorTrace(__FILE__, __LINE__, _T("DeleteSampleByIndex::input sample index"));
-			return a_nIndex;
-		}
-
-		// calculate new working sample index
-		int nNewWorkingSampeIndex;
-		if (a_nIndex < m_nWorkingSampeIndex)
-		{
-			nNewWorkingSampeIndex = m_nWorkingSampeIndex - 1;
-		}
-		else if (a_nIndex > m_nWorkingSampeIndex)
-		{
-			nNewWorkingSampeIndex = m_nWorkingSampeIndex;
-		}
-		else
-		{
-			// deleting working sample.
-			if (a_nIndex == (int)m_listSmplMgrs.size() - 1)
-			{
-				// this is the last sample, select the above sample as working sample 
-				// if this is only sample in the list working sample index will be -1;
-				nNewWorkingSampeIndex = m_nWorkingSampeIndex - 1;
-			}
-			else
-			{
-				// select next sample as working sample
-				nNewWorkingSampeIndex = m_nWorkingSampeIndex;
-			}
-		}
-
-		// delete the sample 
-		m_listSmplMgrs.erase(m_listSmplMgrs.begin() + a_nIndex);
-
-		// reset working sample index
-		m_nWorkingSampeIndex = nNewWorkingSampeIndex;
-
-
-
-		// reset property parameters
-		ResetPropertyParams();
-
-		// ok, return TRUE
-		return TRUE;
-	}
-
-	BOOL CReportMgr::DeleteASmplMsrResultMgrByPathName(CString a_strPathName)
-	{
-		// check report project file pointer
-
-		a_strPathName.Trim();
-		if (a_strPathName.IsEmpty())
-		{
-			return FALSE;
-		}
-		auto itrObj = std::find_if(m_listSmplMgrs.begin(), m_listSmplMgrs.end(), [a_strPathName](CSmplMsrResultFileMgrPtr p) { return p->GetPathName().CompareNoCase(a_strPathName) == 0; });
-		if (itrObj == m_listSmplMgrs.end())
-		{
-			// failed to find sample measure result file
-			LogErrorTrace(__FILE__, __LINE__, _T("DeleteASmplMsrResultMgrByPathName: failed to find sample measure result file."));
-			return FALSE;
-		}
-
-		m_listSmplMgrs.erase(itrObj);
-
-		// reset property parameters
-		ResetPropertyParams();
-
-		// ok, return TRUE
-		return TRUE;
-	}
-
-	BOOL CReportMgr::EditASmplMsrResultMgrById(int a_nIndex, CSmplMsrResultFileMgrPtr a_pSmpFileMgr)
-	{
-		ASSERT(a_pSmpFileMgr);
-		if (!a_pSmpFileMgr)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("EditASmplMsrResultMgrById:invalid sample measure result manager pointer."));
-			return FALSE;
-		}
-
-		// check if the working sample index
-		if (a_nIndex < 0 || a_nIndex >= (int)m_listSmplMgrs.size())
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("EditASmplMsrResultMgrById: invalid sample measure result manager index."));
-			// invalid working sample index
-			return FALSE;
-		}
-
-		m_listSmplMgrs.erase(m_listSmplMgrs.begin() + a_nIndex);
-		m_listSmplMgrs.insert(m_listSmplMgrs.begin() + a_nIndex, a_pSmpFileMgr);
-
-		return TRUE;
-	}
-
-
-	CSmplMsrResultFileMgrPtr CReportMgr::GetWorkingSmplMsrReslMgr()
-	{
-		// check if the working sample index
-		if (m_nWorkingSampeIndex < 0 || m_nWorkingSampeIndex >= (int)m_listSmplMgrs.size())
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("GetWorkingSmplMsrReslMgr: invalid working sample measure result manager index."));
-			// invalid working sample index
-			return FALSE;
-		}
-
-		return GetASmplMsrResultMgrById(m_nWorkingSampeIndex);
-	}
-	CString CReportMgr::GetWorkingSampleName()
-	{
-		CString strRet = _T("");
 
-		CSmplMsrResultFileMgrPtr pSmplMsrResultFileMgr = GetWorkingSmplMsrReslMgr();
 
-		ASSERT(pSmplMsrResultFileMgr);
-		if (!pSmplMsrResultFileMgr)
+		if (itr == m_mapSmplMgrs.end())
 		{
-			LogErrorTrace(__FILE__, __LINE__, _T("GetWorkingSampleName: invalid working sample measure result manager."));
-			return _T("");
-		}
-
-		CSmplMsrResultFilePtr pSmplMsrResultFile = pSmplMsrResultFileMgr->GetSmplMsrResultFile();
-
-		ASSERT(pSmplMsrResultFile);
-		if (!pSmplMsrResultFile)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("GetWorkingSampleName: invalid working sample measure result file."));
-			return _T("");
-		}
-
-		COTSSamplePtr pSample = pSmplMsrResultFile->GetSample();
-
-		ASSERT(pSample);
-		if (!pSample)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("GetWorkingSampleName: invalid working sample."));
-			return _T("");
+			return nullptr;
 		}
-
-		strRet = pSample->GetName();
-
-		return strRet;
+		return itr->second;
 	}
 
-	BOOL CReportMgr::SetWorkingSmplMsrReslMgr(CSmplMsrResultFileMgrPtr a_pSmplMsrResultMgr)
-	{
-		ASSERT(a_pSmplMsrResultMgr);
-		if (!a_pSmplMsrResultMgr)
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("SetWorkingSmplMsrReslMgr: invalid sample measure result manager pointer."));
-			return FALSE;
-		}
-
-		if (!EditASmplMsrResultMgrById(m_nWorkingSampeIndex, a_pSmplMsrResultMgr))
-		{
-			LogErrorTrace(__FILE__, __LINE__, _T("SetWorkingSmplMsrReslMgr: can't edit working sample measure result file."));
-			return FALSE;
-		}
-
-		return TRUE;
-	}
+	
 
 
 	// grid computing
@@ -458,16 +290,16 @@ namespace OTSMODEL {
 		CString strComSourceName = _T("");
 		int nComNum = 0;
 
-		for (auto pSmplMsrResultFileMgr : m_listSmplMgrs)
+		for (auto pSmplMsrResultFileMgr : m_mapSmplMgrs)
 		{
 			// sample measure result file
-			CString strFilePathName = pSmplMsrResultFileMgr->GetPathName();
+			CString strFilePathName = pSmplMsrResultFileMgr.second->GetPathName();
 
 			// get data source name
 			CString strDataSource = COTSHelper::GetFileName(strFilePathName);
 
 			// get compound source name
-			CSmplMsrResultFilePtr pSmplMsrResultFile = pSmplMsrResultFileMgr->GetSmplMsrResultFile();
+			CSmplMsrResultFilePtr pSmplMsrResultFile = pSmplMsrResultFileMgr.second->GetSmplMsrResultFile();
 			ASSERT(pSmplMsrResultFile);
 			if (!pSmplMsrResultFile)
 			{
@@ -507,12 +339,12 @@ namespace OTSMODEL {
 
 		int nPos = -1;
 
-		for (auto pSmplMsrResultFileMgr : m_listSmplMgrs)
+		for (auto pSmplMsrResultFileMgr : m_mapSmplMgrs)
 		{
 			nPos++;
 
 			// get compound source name
-			CSmplMsrResultFilePtr pSmplMsrResultFile = pSmplMsrResultFileMgr->GetSmplMsrResultFile();
+			CSmplMsrResultFilePtr pSmplMsrResultFile = pSmplMsrResultFileMgr.second->GetSmplMsrResultFile();
 			ASSERT(pSmplMsrResultFile);
 			if (!pSmplMsrResultFile)
 			{
@@ -552,17 +384,7 @@ namespace OTSMODEL {
 
 	}
 
-	//CPosXraysList CReportMgr::GetAnalysisXrayList(CString a_DataSourceName)
-	//{
-	//	CPosXraysList listAnalysisXray;
-
-	//	CSmplMsrResultFileMgrPtr pSmplMsrResultFileMgr = this->GetASmplMsrResultMgrByFileName(a_DataSourceName);
-	//	pSmplMsrResultFileMgr->GetOTSFldMgrListAndAnalysisXrayList();
-	//	// should first read x ray data from data base.
-	//	listAnalysisXray = pSmplMsrResultFileMgr->GetAnalysisXray();
-	//	return listAnalysisXray;
 
-	//}
 	
 
 	//判断该列是否要显示
@@ -634,9 +456,9 @@ namespace OTSMODEL {
 	BOOL CReportMgr::IsHaveMultiDataSource()
 	{
 		int nMultiCount = 0;
-		for (auto SmplMgr : m_listSmplMgrs)
+		for (auto SmplMgr : m_mapSmplMgrs)
 		{
-			CSmplMsrResultFilePtr pSmpl = SmplMgr->GetSmplMsrResultFile();
+			CSmplMsrResultFilePtr pSmpl = SmplMgr.second->GetSmplMsrResultFile();
 			if (pSmpl->GetSwitch())
 			{
 				nMultiCount++;

+ 14 - 14
OTSCPP/OTSRptCalculate/Model/ReportMgr.h

@@ -22,20 +22,21 @@ namespace OTSMODEL {
 		virtual ~CReportMgr();				// destructor
 
 	// sample measure result files
-		CSmplMsrResultFileMgrList& GetSmplMsrResultMgrs() { return m_listSmplMgrs; }
+		CSmplMsrResultFileMgrList GetSmplMsrResultMgrs() 
+		{
+			CSmplMsrResultFileMgrList rstlist;
+			for (auto rst : m_mapSmplMgrs)
+			{
+				rstlist.push_back(rst.second);
+			}
+			return rstlist;
+		}
 		void SetSmplMsrResultMgrs(CSmplMsrResultFileMgrList a_listSmplMsrResultFileMgr);
 		BOOL AddASmplMsrResultMgr(CString a_strPathName = _T(""));
-		CSmplMsrResultFileMgrPtr GetASmplMsrResultMgrById(int a_nIndex);
+	
 		CSmplMsrResultFileMgrPtr GetASmplMsrResultMgrByPathName(CString a_strPathName);
 		CSmplMsrResultFileMgrPtr GetASmplMsrResultMgrByFileName(CString a_strFileName);
-		BOOL DeleteASmplMsrResultMgrById(int a_nIndex);
-		BOOL DeleteASmplMsrResultMgrByPathName(CString a_strPathName);
-		BOOL EditASmplMsrResultMgrById(int a_nIndex, CSmplMsrResultFileMgrPtr);
 
-		// Get working sample
-		CSmplMsrResultFileMgrPtr GetWorkingSmplMsrReslMgr();
-		CString GetWorkingSampleName();
-		BOOL SetWorkingSmplMsrReslMgr(CSmplMsrResultFileMgrPtr a_pSmplMsrResultMgr);
 
 
 		// set working sample index
@@ -50,7 +51,7 @@ namespace OTSMODEL {
 		BOOL ResetPropertyParams(BOOL a_bClear = FALSE);
 
 		CPropParamPtr GetPropertyParamImage();
-		CPropParamPtr GetPropertyParamGrid();
+		CPropParamPtr GetPropertyParamForGrid();
 		CPropParamPtr GetPropertyParamChart();
 
 		// grid computing
@@ -60,8 +61,7 @@ namespace OTSMODEL {
 
 		
 		COTSParticleList GetAnalysisParticleList(CString a_DataSourceName);
-		// Get analysis x ray list
-		//CPosXraysList GetAnalysisXrayList(CString a_DataSourceName);
+	
 
 		
 		CRptParamFilePtr GetRptParamFilePtr();
@@ -70,10 +70,10 @@ namespace OTSMODEL {
 		// property parameters list  m_listPropParam contains 3 propParm object contrast to the Image¡¢ Table and Chart tab
 		CPropParamsList m_listPropParams;
 		// sample measure result files
-		CSmplMsrResultFileMgrList m_listSmplMgrs;
+		std::map<CString, CSmplMsrResultFileMgrPtr> m_mapSmplMgrs;
 
 		// working sample index
-		int m_nWorkingSampeIndex;
+		int m_nWorkingSampeIndex=0;
 
 		
 		//param file mgr

+ 2 - 4
OTSCPP/OTSRptCalculate/Model/SmplMsrResultFileMgr.h

@@ -33,8 +33,7 @@ namespace OTSMODEL
 		CSmplMsrResultFilePtr GetSmplMsrResultFile() { return m_pSmplMsrResultFile; }
 		void SetSmplMsrResultFile(CSmplMsrResultFilePtr a_pSmplMsrResultFile) { m_pSmplMsrResultFile = a_pSmplMsrResultFile; }
 
-		// save a BSE file for a field
-		//BOOL SaveBSEFileForAField(COTSFieldMgrPtr a_pField);
+	
 
 		// save a x-ray file for a field
 		BOOL SaveXRayFileForAField(COTSFieldMgrPtr a_pField);
@@ -63,8 +62,7 @@ namespace OTSMODEL
 		// set SEMStage
 		void SetSEMStage(CStagePtr a_pStage);
 
-		// according to a sample result file get a list of OTSFieldMgr
-		//COTSFieldMgrList GetOTSFldMgrListAndAnalysisXrayList();
+	
 
 		// get particle list
 		COTSParticleList GetParticleList() { return m_listParticle; }