DeckItem.push_back overload for size = 1

DeckItem.push_back using insert for 1 element turns out to be very
expensive and caused a performance degredation.
This commit is contained in:
Jørgen Kvalsvik
2016-11-11 14:32:49 +01:00
committed by jokva
parent cc677580f2
commit 70e7b02043
2 changed files with 27 additions and 3 deletions

View File

@@ -119,6 +119,26 @@ const std::vector< T >& DeckItem::getData() const {
return this->value_ref< T >();
}
template< typename T >
void DeckItem::push( T x ) {
auto& val = this->value_ref< T >();
val.push_back( std::move( x ) );
this->defaulted.push_back( false );
}
void DeckItem::push_back( int x ) {
this->push( x );
}
void DeckItem::push_back( double x ) {
this->push( x );
}
void DeckItem::push_back( std::string x ) {
this->push( std::move( x ) );
}
template< typename T >
void DeckItem::push( T x, size_t n ) {
auto& val = this->value_ref< T >();

View File

@@ -62,9 +62,12 @@ namespace Opm {
template< typename T > const std::vector< T >& getData() const;
const std::vector< double >& getSIDoubleData() const;
void push_back( int, size_t = 1 );
void push_back( double, size_t = 1 );
void push_back( std::string, size_t = 1 );
void push_back( int );
void push_back( double );
void push_back( std::string );
void push_back( int, size_t );
void push_back( double, size_t );
void push_back( std::string, size_t );
void push_backDefault( int );
void push_backDefault( double );
void push_backDefault( std::string );
@@ -90,6 +93,7 @@ namespace Opm {
template< typename T > std::vector< T >& value_ref();
template< typename T > const std::vector< T >& value_ref() const;
template< typename T > void push( T );
template< typename T > void push( T, size_t );
template< typename T > void push_default( T );
};