From 205c4a94db7ced1def765fd36c615fb090c0a2d8 Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Mon, 18 Mar 2019 08:02:49 +0100 Subject: [PATCH] Add method DynamicState::find_not() --- .../EclipseState/Schedule/DynamicState.hpp | 38 +++++++++++-------- tests/parser/DynamicStateTests.cpp | 3 ++ 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/opm/parser/eclipse/EclipseState/Schedule/DynamicState.hpp b/opm/parser/eclipse/EclipseState/Schedule/DynamicState.hpp index d1df87cbd..e712227e8 100644 --- a/opm/parser/eclipse/EclipseState/Schedule/DynamicState.hpp +++ b/opm/parser/eclipse/EclipseState/Schedule/DynamicState.hpp @@ -143,25 +143,33 @@ class DynamicState { } } - /// Will return the index of the first occurence of @value, or - /// -1 if @value is not found. - int find(const T& value) const { - auto iter = std::find( m_data.begin() , m_data.end() , value); - if( iter == this->m_data.end() ) return -1; + /// Will return the index of the first occurence of @value, or + /// -1 if @value is not found. + int find(const T& value) const { + auto iter = std::find( m_data.begin() , m_data.end() , value); + if( iter == this->m_data.end() ) return -1; - return std::distance( m_data.begin() , iter ); - } + return std::distance( m_data.begin() , iter ); + } + + /// Will return the index of the first value which is != @value, or -1 + /// if all values are == @value + int find_not(const T& value) const { + auto iter = std::find_if_not( m_data.begin() , m_data.end() , [&value] (const T& elm) { return value == elm; }); + if( iter == this->m_data.end() ) return -1; + + return std::distance( m_data.begin() , iter ); + } + + iterator begin() { + return this->m_data.begin(); + } + iterator end() { + return this->m_data.end(); + } - iterator begin() { - return this->m_data.begin(); - } - - - iterator end() { - return this->m_data.end(); - } private: std::vector< T > m_data; diff --git a/tests/parser/DynamicStateTests.cpp b/tests/parser/DynamicStateTests.cpp index 83d11783a..3dfdef37d 100644 --- a/tests/parser/DynamicStateTests.cpp +++ b/tests/parser/DynamicStateTests.cpp @@ -232,6 +232,8 @@ BOOST_AUTO_TEST_CASE( find ) { BOOST_CHECK_EQUAL( state.find( 137 ) , 0 ); BOOST_CHECK_EQUAL( state.find( 200 ) , -1 ); + BOOST_CHECK_EQUAL( state.find_not(137), -1); + BOOST_CHECK_EQUAL( state.find_not(200), 0); state.update( 0 , 200 ); BOOST_CHECK_EQUAL( state.find( 137 ) , -1 ); BOOST_CHECK_EQUAL( state.find( 200 ) , 0 ); @@ -239,6 +241,7 @@ BOOST_AUTO_TEST_CASE( find ) { state.update( 2 , 300 ); BOOST_CHECK_EQUAL( state.find( 200 ) , 0 ); BOOST_CHECK_EQUAL( state.find( 300 ) , 2 ); + BOOST_CHECK_EQUAL( state.find_not( 200 ) , 2 ); state.update( 4 , 400 ); BOOST_CHECK_EQUAL( state.find( 200 ) , 0 );