diff --git a/ApplicationCode/GeoMech/OdbReader/RifOdbReader.cpp b/ApplicationCode/GeoMech/OdbReader/RifOdbReader.cpp index f2e77d96ab..2bcf65b557 100644 --- a/ApplicationCode/GeoMech/OdbReader/RifOdbReader.cpp +++ b/ApplicationCode/GeoMech/OdbReader/RifOdbReader.cpp @@ -49,13 +49,18 @@ std::map initFemTypeMap() static std::map 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 diff --git a/ApplicationCode/GeoMech/OdbReader/RifOdbReader.h b/ApplicationCode/GeoMech/OdbReader/RifOdbReader.h index 5f9ab4132f..b747b79461 100644 --- a/ApplicationCode/GeoMech/OdbReader/RifOdbReader.h +++ b/ApplicationCode/GeoMech/OdbReader/RifOdbReader.h @@ -75,15 +75,12 @@ private: std::vector componentNames(ResPos position, const std::string& fieldName) const; std::map > fieldAndComponentNames(ResPos position); std::map< RifOdbReader::ResPos, std::map > > resultsMetaData(odb_Odb* odb); - - static void initializeOdbAPI(); - static void finalizeOdbAPI(); - + private: odb_Odb* m_odb; std::map< ResPos, std::map > > m_resultsMetaData; std::map< int, std::map > m_instanceToNodeIdToIdxMap; std::map< int, std::map > m_instanceToElementIdToIdxMap; - static bool sm_odbAPIInitialized; + static size_t sm_instanceCount; };