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

View File

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