Refactored results metadata

Using two levels of maps for results metadata, with result positions on
the top level.
This commit is contained in:
Stein Dale 2015-05-06 10:22:45 +02:00
parent 06a6630cc8
commit 4f9f322f2e
2 changed files with 17 additions and 22 deletions

View File

@ -136,7 +136,8 @@ bool RifOdbReader::openFile(const std::string& fileName)
return true; return true;
} }
std::map< std::pair<RifOdbResultPosition, std::string>, std::vector<std::string> > resultsMetaData(odb_Odb* odb); std::map< RifOdbResultPosition, std::map<std::string, std::vector<std::string> > > resultsMetaData(odb_Odb* odb);
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -207,11 +208,11 @@ std::map<std::string, std::vector<std::string> > scalarFieldAndComponentNames(od
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
std::map< std::pair<RifOdbResultPosition, std::string>, std::vector<std::string> > resultsMetaData(odb_Odb* odb) std::map< RifOdbResultPosition, std::map<std::string, std::vector<std::string> > > resultsMetaData(odb_Odb* odb)
{ {
CVF_ASSERT(odb != NULL); CVF_ASSERT(odb != NULL);
std::map< std::pair<RifOdbResultPosition, std::string>, std::vector<std::string> > resultsMap; std::map< RifOdbResultPosition, std::map<std::string, std::vector<std::string> > > resultsMap;
odb_StepRepository stepRepository = odb->steps(); odb_StepRepository stepRepository = odb->steps();
odb_StepRepositoryIT sIter(stepRepository); odb_StepRepositoryIT sIter(stepRepository);
@ -249,15 +250,15 @@ std::map< std::pair<RifOdbResultPosition, std::string>, std::vector<std::string>
switch (fieldLocation.position()) switch (fieldLocation.position())
{ {
case odb_Enum::odb_ResultPositionEnum::NODAL: case odb_Enum::odb_ResultPositionEnum::NODAL:
resultsMap.insert(std::make_pair(std::make_pair(RifOdbResultPosition::NODAL, fieldName), compVec)); resultsMap[RifOdbResultPosition::NODAL][fieldName] = compVec;
break; break;
case odb_Enum::odb_ResultPositionEnum::ELEMENT_NODAL: case odb_Enum::odb_ResultPositionEnum::ELEMENT_NODAL:
resultsMap.insert(std::make_pair(std::make_pair(RifOdbResultPosition::ELEMENT_NODAL, fieldName), compVec)); resultsMap[RifOdbResultPosition::ELEMENT_NODAL][fieldName] = compVec;
break; break;
case odb_Enum::odb_ResultPositionEnum::INTEGRATION_POINT: case odb_Enum::odb_ResultPositionEnum::INTEGRATION_POINT:
resultsMap.insert(std::make_pair(std::make_pair(RifOdbResultPosition::INTEGRATION_POINT, fieldName), compVec)); resultsMap[RifOdbResultPosition::INTEGRATION_POINT][fieldName] = compVec;
break; break;
default: default:
@ -533,10 +534,14 @@ std::vector<std::string> RifOdbReader::componentNames(RifOdbResultPosition posit
{ {
std::vector<std::string> compNames; std::vector<std::string> compNames;
auto mapIt = m_resultsMetaData.find(std::make_pair(position, fieldName)); auto posMapIt = m_resultsMetaData.find(position);
if (mapIt != m_resultsMetaData.end()) if (posMapIt != m_resultsMetaData.end())
{ {
compNames = mapIt->second; auto fieldNameMapIt = posMapIt->second.find(fieldName);
if (fieldNameMapIt != posMapIt->second.end())
{
compNames = fieldNameMapIt->second;
}
} }
return compNames; return compNames;
@ -553,17 +558,7 @@ std::map<std::string, std::vector<std::string> > RifOdbReader::fieldAndComponent
buildMetaData(); buildMetaData();
} }
std::map<std::string, std::vector<std::string> > fieldAndCompNames; return m_resultsMetaData[position];
for (auto mapIt = m_resultsMetaData.begin(); mapIt != m_resultsMetaData.end(); mapIt++)
{
if (mapIt->first.first == position)
{
fieldAndCompNames.insert(std::make_pair(mapIt->first.second, mapIt->second));
}
}
return fieldAndCompNames;
} }

View File

@ -78,7 +78,7 @@ private:
private: private:
odb_Odb* m_odb; odb_Odb* m_odb;
std::map< std::pair<RifOdbResultPosition, std::string>, std::vector<std::string> > m_resultsMetaData; std::map< RifOdbResultPosition, std::map<std::string, std::vector<std::string> > > m_resultsMetaData;
std::map< int, std::map<int, int> > m_instanceToNodeIdToIdxMap; std::map< int, std::map<int, int> > m_instanceToNodeIdToIdxMap;
std::map< int, std::map<int, int> > m_instanceToElementIdToIdxMap; std::map< int, std::map<int, int> > m_instanceToElementIdToIdxMap;