Add method DynamicState::find_not()

This commit is contained in:
Joakim Hove
2019-03-18 08:02:49 +01:00
parent 25522dc424
commit 205c4a94db
2 changed files with 26 additions and 15 deletions

View File

@@ -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;

View File

@@ -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 );