Instance count, initialize/finalize ODB API

Using a static instance count member to determine when to initialize or
finalize ABAQUS ODB API.
This commit is contained in:
Stein Dale 2015-05-07 15:41:19 +02:00
parent a05c186d34
commit 5fe54c6c8d
2 changed files with 12 additions and 34 deletions

View File

@ -49,13 +49,18 @@ std::map<std::string, RigElementType> initFemTypeMap()
static std::map<std::string, RigElementType> odbElmTypeToRigElmTypeMap = initFemTypeMap();
bool RifOdbReader::sm_odbAPIInitialized = false;
size_t RifOdbReader::sm_instanceCount = 0;
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifOdbReader::RifOdbReader()
{
if (++sm_instanceCount == 1)
{
odb_initializeAPI();
}
m_odb = NULL;
}
@ -65,30 +70,11 @@ RifOdbReader::RifOdbReader()
RifOdbReader::~RifOdbReader()
{
close();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifOdbReader::initializeOdbAPI()
{
if (!sm_odbAPIInitialized)
{
odb_initializeAPI();
sm_odbAPIInitialized = true;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifOdbReader::finalizeOdbAPI()
{
if (sm_odbAPIInitialized)
{
odb_finalizeAPI();
sm_odbAPIInitialized = false;
}
if (--sm_instanceCount == 0)
{
odb_finalizeAPI();
}
}
//--------------------------------------------------------------------------------------------------
@ -111,11 +97,6 @@ bool RifOdbReader::openFile(const std::string& fileName, std::string* errorMessa
close();
CVF_ASSERT(m_odb == NULL);
if (!sm_odbAPIInitialized)
{
initializeOdbAPI();
}
odb_String path = fileName.c_str();
try

View File

@ -75,15 +75,12 @@ private:
std::vector<std::string> componentNames(ResPos position, const std::string& fieldName) const;
std::map<std::string, std::vector<std::string> > fieldAndComponentNames(ResPos position);
std::map< RifOdbReader::ResPos, std::map<std::string, std::vector<std::string> > > resultsMetaData(odb_Odb* odb);
static void initializeOdbAPI();
static void finalizeOdbAPI();
private:
odb_Odb* m_odb;
std::map< ResPos, 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_instanceToElementIdToIdxMap;
static bool sm_odbAPIInitialized;
static size_t sm_instanceCount;
};