From 91c40e60c6132a2253c67a4377c11271a88eda7c Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Wed, 20 Nov 2019 09:54:10 +0100 Subject: [PATCH] Add FieldPropsManager::keys() method for iteration --- .../EclipseState/Grid/FieldPropsManager.hpp | 3 +++ .../eclipse/EclipseState/Grid/FieldProps.cpp | 17 +++++++++++++++++ .../eclipse/EclipseState/Grid/FieldProps.hpp | 3 +++ .../EclipseState/Grid/FieldPropsManager.cpp | 10 ++++++++++ tests/parser/FieldPropsTests.cpp | 11 +++++++++++ 5 files changed, 44 insertions(+) diff --git a/opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.hpp b/opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.hpp index 5ff92d0c0..1728fa470 100644 --- a/opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.hpp +++ b/opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.hpp @@ -81,6 +81,9 @@ public: template bool has(const std::string& keyword) const; + template + std::vector keys() const; + template std::vector get_global(const std::string& keyword) const; diff --git a/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.cpp b/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.cpp index 4d441eeef..b30321d7a 100644 --- a/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.cpp +++ b/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.cpp @@ -408,6 +408,23 @@ bool FieldProps::has(const std::string& keyword) const { return (this->int_data.count(keyword) != 0); } +template <> +std::vector FieldProps::keys() const { + std::vector klist; + for (const auto& data_pair : this->double_data) + klist.push_back(data_pair.first); + return klist; +} + +template <> +std::vector FieldProps::keys() const { + std::vector klist; + for (const auto& data_pair : this->int_data) + klist.push_back(data_pair.first); + return klist; +} + + template <> void FieldProps::erase(const std::string& keyword) { this->int_data.erase(keyword); diff --git a/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.hpp b/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.hpp index 1077a9f97..73dacc8e5 100644 --- a/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.hpp +++ b/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.hpp @@ -128,6 +128,9 @@ public: template bool has(const std::string& keyword) const; + template + std::vector keys() const; + template const FieldData* try_get(const std::string& keyword) { const FieldData * field_data; diff --git a/src/opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.cpp b/src/opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.cpp index 0eaa95283..4410f1380 100644 --- a/src/opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.cpp +++ b/src/opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.cpp @@ -90,6 +90,13 @@ const std::string& FieldPropsManager::default_region() const { return this->fp->default_region(); } +template +std::vector FieldPropsManager::keys() const { + return this->fp->keys(); +} + + + template bool FieldPropsManager::supported(const std::string&); template bool FieldPropsManager::supported(const std::string&); @@ -99,6 +106,9 @@ template bool FieldPropsManager::has(const std::string&) const; template std::vector FieldPropsManager::defaulted(const std::string&) const; template std::vector FieldPropsManager::defaulted(const std::string&) const; +template std::vector FieldPropsManager::keys() const; +template std::vector FieldPropsManager::keys() const; + template std::vector FieldPropsManager::get_global(const std::string& keyword) const; template std::vector FieldPropsManager::get_global(const std::string& keyword) const; diff --git a/tests/parser/FieldPropsTests.cpp b/tests/parser/FieldPropsTests.cpp index 19b17bee1..7e86664f1 100644 --- a/tests/parser/FieldPropsTests.cpp +++ b/tests/parser/FieldPropsTests.cpp @@ -97,6 +97,17 @@ PERMX // PERMX keyword is not fully initialized BOOST_CHECK(!fpm.try_get("PERMX")); BOOST_CHECK(!fpm.has("PERMX")); + + { + const auto& keys = fpm.keys(); + BOOST_CHECK_EQUAL(keys.size(), 1); + BOOST_CHECK(std::find(keys.begin(), keys.end(), "PORO") != keys.end()); + BOOST_CHECK(std::find(keys.begin(), keys.end(), "PERMX") == keys.end()); + } + { + const auto& keys = fpm.keys(); + BOOST_CHECK_EQUAL(keys.size(), 0); + } }