From 5732b5008fb080ab5a7b68a01dba0b37adfc2efa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Tue, 31 May 2016 13:37:50 +0200 Subject: [PATCH] Cached result variables in the summary reader Fixed late field initialization Additional cleanup and rename --- .../Application/RiaPreferences.cpp | 2 +- .../FileInterface/RifReaderEclipseSummary.cpp | 20 +++++++++++-------- .../FileInterface/RifReaderEclipseSummary.h | 17 +++++++++------- ApplicationCode/ProjectDataModel/RimCase.h | 5 ++--- .../RimSummaryPlotCollection.cpp | 14 ++++++------- .../RimSummaryPlotCollection.h | 4 ++-- 6 files changed, 34 insertions(+), 28 deletions(-) diff --git a/ApplicationCode/Application/RiaPreferences.cpp b/ApplicationCode/Application/RiaPreferences.cpp index aabcf2ae8a..5a970e0b40 100644 --- a/ApplicationCode/Application/RiaPreferences.cpp +++ b/ApplicationCode/Application/RiaPreferences.cpp @@ -81,8 +81,8 @@ RiaPreferences::RiaPreferences(void) CAF_PDM_InitField(&loadAndShowSoil, "loadAndShowSoil", true, "Load and show SOIL", "", "", ""); loadAndShowSoil.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN); - readerSettings = new RifReaderSettings; CAF_PDM_InitFieldNoDefault(&readerSettings, "readerSettings", "Reader settings", "", "", ""); + readerSettings = new RifReaderSettings; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/FileInterface/RifReaderEclipseSummary.cpp b/ApplicationCode/FileInterface/RifReaderEclipseSummary.cpp index 15b39e07bb..e8aa075be4 100644 --- a/ApplicationCode/FileInterface/RifReaderEclipseSummary.cpp +++ b/ApplicationCode/FileInterface/RifReaderEclipseSummary.cpp @@ -47,7 +47,10 @@ RifReaderEclipseSummary::~RifReaderEclipseSummary() //-------------------------------------------------------------------------------------------------- bool RifReaderEclipseSummary::open(const std::string& headerFileName, const std::vector& dataFileNames) { - assert(ecl_sum == NULL); + assert(ecl_sum == NULL); + + if (headerFileName.empty() || dataFileNames.size() == 0) return false; + assert(!headerFileName.empty()); assert(dataFileNames.size() > 0); @@ -106,17 +109,18 @@ std::vector RifReaderEclipseSummary::variableNames() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -std::vector RifReaderEclipseSummary::allResultAddresses() const +const std::vector& RifReaderEclipseSummary::allResultAddresses() { - std::vector addresses; - - std::vector fileVariableNames = variableNames(); - for (size_t i = 0; i < fileVariableNames.size(); i++) + if (m_allResultAddresses.size() == 0) { - addresses.push_back(RifEclipseSummaryAddress(fileVariableNames[i])); + std::vector fileVariableNames = variableNames(); + for(size_t i = 0; i < fileVariableNames.size(); i++) + { + m_allResultAddresses.push_back(RifEclipseSummaryAddress(fileVariableNames[i])); + } } - return addresses; + return m_allResultAddresses; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/FileInterface/RifReaderEclipseSummary.h b/ApplicationCode/FileInterface/RifReaderEclipseSummary.h index d4024ae211..d17a350fd4 100644 --- a/ApplicationCode/FileInterface/RifReaderEclipseSummary.h +++ b/ApplicationCode/FileInterface/RifReaderEclipseSummary.h @@ -23,20 +23,17 @@ #include #include +#include "cvfObject.h" + class QDateTime; -// Taken from ecl_sum.h -typedef struct ecl_sum_struct ecl_sum_type; - -// Taken from stringlist.h -typedef struct stringlist_struct stringlist_type; //================================================================================================== // // //================================================================================================== -class RifReaderEclipseSummary +class RifReaderEclipseSummary : public cvf::Object { public: RifReaderEclipseSummary(); @@ -46,7 +43,7 @@ public: void close(); std::vector variableNames() const; - std::vector allResultAddresses() const; + const std::vector& allResultAddresses(); std::vector timeSteps() const; @@ -61,8 +58,14 @@ private: int timeStepCount() const; + // Taken from stringlist.h + typedef struct stringlist_struct stringlist_type; static void populateVectorFromStringList(stringlist_type* stringList, std::vector* strings); private: + // Taken from ecl_sum.h + typedef struct ecl_sum_struct ecl_sum_type; ecl_sum_type* ecl_sum; + std::vector m_allResultAddresses; }; + diff --git a/ApplicationCode/ProjectDataModel/RimCase.h b/ApplicationCode/ProjectDataModel/RimCase.h index fefae0e538..934c7c80b6 100644 --- a/ApplicationCode/ProjectDataModel/RimCase.h +++ b/ApplicationCode/ProjectDataModel/RimCase.h @@ -40,15 +40,13 @@ public: RimCase(); virtual ~RimCase(); + caf::PdmField caseId; caf::PdmField caseUserDescription; - caf::PdmField caseId; virtual std::vector views() = 0; virtual void updateFilePathsFromProjectPath(const QString& projectPath, const QString& oldProjectPath) = 0; - virtual caf::PdmFieldHandle* userDescriptionField() { return &caseUserDescription; } - virtual QStringList timeStepStrings() = 0; virtual QString timeStepName(int frameIdx) = 0; @@ -61,6 +59,7 @@ protected: static QString relocateFile(const QString& fileName, const QString& newProjectPath, const QString& oldProjectPath, bool* foundFile, std::vector* searchedPaths); private: + virtual caf::PdmFieldHandle* userDescriptionField() override { return &caseUserDescription; } }; diff --git a/ApplicationCode/ProjectDataModel/RimSummaryPlotCollection.cpp b/ApplicationCode/ProjectDataModel/RimSummaryPlotCollection.cpp index c1b323b8f8..96b0ff61fa 100644 --- a/ApplicationCode/ProjectDataModel/RimSummaryPlotCollection.cpp +++ b/ApplicationCode/ProjectDataModel/RimSummaryPlotCollection.cpp @@ -62,16 +62,16 @@ RimSummaryPlotCollection::~RimSummaryPlotCollection() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RifReaderEclipseSummary* RimSummaryPlotCollection::getOrCreateSummaryFileReader(const QString& eclipseCase) +RifReaderEclipseSummary* RimSummaryPlotCollection::getOrCreateSummaryFileReader(const QString& eclipseCaseFilePathBasename) { - auto it = m_summaryFileReaders.find(eclipseCase); + auto it = m_summaryFileReaders.find(eclipseCaseFilePathBasename); if (it != m_summaryFileReaders.end()) { return it->second; } else { - return createSummaryFileReader(eclipseCase); + return createSummaryFileReader(eclipseCaseFilePathBasename); } } @@ -93,15 +93,15 @@ RifReaderEclipseSummary* RimSummaryPlotCollection::getOrCreateSummaryFileReader( //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RifReaderEclipseSummary* RimSummaryPlotCollection::createSummaryFileReader(const QString& eclipseCase) +RifReaderEclipseSummary* RimSummaryPlotCollection::createSummaryFileReader(const QString& eclipseCaseFilePathBasename) { std::string headerFile; bool isFormatted = false; - RifEclipseSummaryTools::findSummaryHeaderFile(eclipseCase.toStdString(), &headerFile, &isFormatted); + RifEclipseSummaryTools::findSummaryHeaderFile(eclipseCaseFilePathBasename.toStdString(), &headerFile, &isFormatted); if (headerFile.empty()) return nullptr; - std::vector dataFiles = RifEclipseSummaryTools::findSummaryDataFiles(eclipseCase.toStdString()); + std::vector dataFiles = RifEclipseSummaryTools::findSummaryDataFiles(eclipseCaseFilePathBasename.toStdString()); if (!dataFiles.size()) return nullptr; @@ -114,7 +114,7 @@ RifReaderEclipseSummary* RimSummaryPlotCollection::createSummaryFileReader(const } else { - m_summaryFileReaders.insert(std::make_pair(eclipseCase, reader)); + m_summaryFileReaders.insert(std::make_pair(eclipseCaseFilePathBasename, reader)); return reader; } } diff --git a/ApplicationCode/ProjectDataModel/RimSummaryPlotCollection.h b/ApplicationCode/ProjectDataModel/RimSummaryPlotCollection.h index c26f3b1d94..2356522f9d 100644 --- a/ApplicationCode/ProjectDataModel/RimSummaryPlotCollection.h +++ b/ApplicationCode/ProjectDataModel/RimSummaryPlotCollection.h @@ -46,8 +46,8 @@ public: caf::PdmChildArrayField m_summaryPlots; private: - RifReaderEclipseSummary* createSummaryFileReader(const QString& eclipseCase); - RifReaderEclipseSummary* getOrCreateSummaryFileReader(const QString& eclipseCase); + RifReaderEclipseSummary* createSummaryFileReader(const QString& eclipseCaseFilePathBasename); + RifReaderEclipseSummary* getOrCreateSummaryFileReader(const QString& eclipseCaseFilePathBasename); private: // Map from path to case to summary file reader objects