Reduce memory use for summary address object

* Use one common variable for object name, use three ints
* Move enums to separate file
* Refactor use of enums
* Move implementation to cpp
* Refactor includes
This commit is contained in:
Magne Sjaastad
2023-08-21 07:12:08 +02:00
committed by GitHub
parent 1b886c1a1e
commit 96b3bef878
70 changed files with 1252 additions and 1038 deletions

View File

@@ -18,6 +18,8 @@
#include "RiuSummaryQuantityNameInfoProvider.h"
#include "RifEclipseSummaryAddress.h"
#include <regex>
#include <sstream>
@@ -62,36 +64,36 @@ RiuSummaryQuantityNameInfoProvider* RiuSummaryQuantityNameInfoProvider::instance
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress::SummaryVarCategory RiuSummaryQuantityNameInfoProvider::identifyCategory( const std::string& vectorName )
RifEclipseSummaryAddressDefines::SummaryVarCategory RiuSummaryQuantityNameInfoProvider::identifyCategory( const std::string& vectorName )
{
// Try to an exact match on the vector name first in the vector table.
bool exactMatch = true;
auto exactCategory = categoryFromVectorName( vectorName, exactMatch );
if ( exactCategory != RifEclipseSummaryAddress::SummaryVarCategory::SUMMARY_INVALID ) return exactCategory;
if ( exactCategory != RifEclipseSummaryAddressDefines::SummaryVarCategory::SUMMARY_INVALID ) return exactCategory;
if ( vectorName.size() < 3 || vectorName.size() > 8 ) return RifEclipseSummaryAddress::SummaryVarCategory::SUMMARY_INVALID;
if ( vectorName.size() < 3 || vectorName.size() > 8 ) return RifEclipseSummaryAddressDefines::SummaryVarCategory::SUMMARY_INVALID;
// Try to match the base vector name with more heuristics
auto strippedQuantityName = RifEclipseSummaryAddress::baseVectorName( vectorName );
// First, try to lookup vector in vector table
auto category = categoryFromVectorName( strippedQuantityName );
if ( category != RifEclipseSummaryAddress::SummaryVarCategory::SUMMARY_INVALID ) return category;
if ( category != RifEclipseSummaryAddressDefines::SummaryVarCategory::SUMMARY_INVALID ) return category;
switch ( strippedQuantityName[0] )
{
case 'A':
return RifEclipseSummaryAddress::SummaryVarCategory::SUMMARY_AQUIFER;
return RifEclipseSummaryAddressDefines::SummaryVarCategory::SUMMARY_AQUIFER;
case 'B':
return RifEclipseSummaryAddress::SummaryVarCategory::SUMMARY_BLOCK;
return RifEclipseSummaryAddressDefines::SummaryVarCategory::SUMMARY_BLOCK;
case 'F':
return RifEclipseSummaryAddress::SummaryVarCategory::SUMMARY_FIELD;
return RifEclipseSummaryAddressDefines::SummaryVarCategory::SUMMARY_FIELD;
case 'N':
return RifEclipseSummaryAddress::SummaryVarCategory::SUMMARY_NETWORK;
return RifEclipseSummaryAddressDefines::SummaryVarCategory::SUMMARY_NETWORK;
case 'S':
return RifEclipseSummaryAddress::SummaryVarCategory::SUMMARY_WELL_SEGMENT;
return RifEclipseSummaryAddressDefines::SummaryVarCategory::SUMMARY_WELL_SEGMENT;
case 'W':
return RifEclipseSummaryAddress::SummaryVarCategory::SUMMARY_WELL;
return RifEclipseSummaryAddressDefines::SummaryVarCategory::SUMMARY_WELL;
default:
break;
}
@@ -99,26 +101,26 @@ RifEclipseSummaryAddress::SummaryVarCategory RiuSummaryQuantityNameInfoProvider:
if ( strippedQuantityName[0] == 'R' )
{
if ( ParseHelpers::is_region_to_region( strippedQuantityName ) )
return RifEclipseSummaryAddress::SummaryVarCategory::SUMMARY_REGION_2_REGION;
return RifEclipseSummaryAddressDefines::SummaryVarCategory::SUMMARY_REGION_2_REGION;
return RifEclipseSummaryAddress::SUMMARY_REGION;
return RifEclipseSummaryAddressDefines::SummaryVarCategory::SUMMARY_REGION;
}
// Then check LGR categories
std::string firstTwoLetters = strippedQuantityName.substr( 0, 2 );
if ( firstTwoLetters == "LB" ) return RifEclipseSummaryAddress::SummaryVarCategory::SUMMARY_BLOCK_LGR;
if ( firstTwoLetters == "LC" ) return RifEclipseSummaryAddress::SummaryVarCategory::SUMMARY_WELL_COMPLETION_LGR;
if ( firstTwoLetters == "LW" ) return RifEclipseSummaryAddress::SummaryVarCategory::SUMMARY_WELL_LGR;
if ( firstTwoLetters == "LB" ) return RifEclipseSummaryAddressDefines::SummaryVarCategory::SUMMARY_BLOCK_LGR;
if ( firstTwoLetters == "LC" ) return RifEclipseSummaryAddressDefines::SummaryVarCategory::SUMMARY_WELL_COMPLETION_LGR;
if ( firstTwoLetters == "LW" ) return RifEclipseSummaryAddressDefines::SummaryVarCategory::SUMMARY_WELL_LGR;
return RifEclipseSummaryAddress::SummaryVarCategory::SUMMARY_INVALID;
return RifEclipseSummaryAddressDefines::SummaryVarCategory::SUMMARY_INVALID;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress::SummaryVarCategory RiuSummaryQuantityNameInfoProvider::categoryFromVectorName( const std::string& vectorName,
bool exactMatch ) const
RifEclipseSummaryAddressDefines::SummaryVarCategory
RiuSummaryQuantityNameInfoProvider::categoryFromVectorName( const std::string& vectorName, bool exactMatch ) const
{
auto info = quantityInfo( vectorName, exactMatch );
@@ -183,7 +185,8 @@ RiuSummaryQuantityNameInfoProvider::RiuSummaryQuantityInfo RiuSummaryQuantityNam
std::string RiuSummaryQuantityNameInfoProvider::longNameFromVectorName( const std::string& vectorName, bool returnVectorNameIfNotFound ) const
{
auto info = quantityInfo( vectorName );
return info.category != RifEclipseSummaryAddress::SUMMARY_INVALID || !returnVectorNameIfNotFound ? info.longName : vectorName;
return info.category != RifEclipseSummaryAddressDefines::SummaryVarCategory::SUMMARY_INVALID || !returnVectorNameIfNotFound ? info.longName
: vectorName;
}
//--------------------------------------------------------------------------------------------------
@@ -209,7 +212,7 @@ RiuSummaryQuantityNameInfoProvider::RiuSummaryQuantityNameInfoProvider()
std::unordered_map<std::string, RiuSummaryQuantityNameInfoProvider::RiuSummaryQuantityInfo>
RiuSummaryQuantityNameInfoProvider::createInfoForEclipseKeywords()
{
using A = RifEclipseSummaryAddress;
using A = RifEclipseSummaryAddressDefines::SummaryVarCategory;
std::unordered_map<std::string, RiuSummaryQuantityInfo> info;
@@ -2139,7 +2142,7 @@ std::unordered_map<std::string, RiuSummaryQuantityNameInfoProvider::RiuSummaryQu
std::unordered_map<std::string, RiuSummaryQuantityNameInfoProvider::RiuSummaryQuantityInfo>
RiuSummaryQuantityNameInfoProvider::createInfoFor6xKeywords()
{
using A = RifEclipseSummaryAddress;
using A = RifEclipseSummaryAddressDefines::SummaryVarCategory;
std::unordered_map<std::string, RiuSummaryQuantityInfo> info;