SummaryConfig::merge

Combine two Summary configs, essentially concatenating the underlying
vectors.
This commit is contained in:
Jørgen Kvalsvik 2016-07-04 12:02:43 +02:00
parent ffc94fc0b2
commit 4f8ad8a533
3 changed files with 64 additions and 0 deletions

View File

@ -392,4 +392,20 @@ namespace {
return this->keywords.cend();
}
SummaryConfig& SummaryConfig::merge( const SummaryConfig& other ) {
this->keywords.insert( this->keywords.end(),
other.keywords.begin(),
other.keywords.end() );
return *this;
}
SummaryConfig& SummaryConfig::merge( SummaryConfig&& other ) {
auto begin = std::make_move_iterator( other.keywords.begin() );
auto end = std::make_move_iterator( other.keywords.end() );
this->keywords.insert( this->keywords.end(), begin, end );
other.keywords.clear();
return *this;
}
}

View File

@ -47,6 +47,9 @@ namespace Opm {
const_iterator begin() const;
const_iterator end() const;
SummaryConfig& merge( const SummaryConfig& );
SummaryConfig& merge( SummaryConfig&& );
private:
std::vector< ERT::smspec_node > keywords;
};

View File

@ -187,6 +187,51 @@ BOOST_AUTO_TEST_CASE(completions) {
BOOST_CHECK_EQUAL_COLLECTIONS(
keywords.begin(), keywords.end(),
names.begin(), names.end() );
}
BOOST_AUTO_TEST_CASE( merge ) {
const auto input1 = "WWCT\n/\n";
auto summary1 = createSummary( input1 );
const auto keywords = { "FOPT", "WWCT", "WWCT", "WWCT", "WWCT" };
const auto wells = { "PRODUCER", "WX2", "W_1", "W_3" };
const auto input2 = "FOPT\n";
const auto summary2 = createSummary( input2 );
summary1.merge( summary2 );
const auto kw_names = sorted_keywords( summary1 );
const auto well_names = sorted_names( summary1 );
BOOST_CHECK_EQUAL_COLLECTIONS(
keywords.begin(), keywords.end(),
kw_names.begin(), kw_names.end() );
BOOST_CHECK_EQUAL_COLLECTIONS(
wells.begin(), wells.end(),
well_names.begin(), well_names.end() );
}
BOOST_AUTO_TEST_CASE( merge_move ) {
const auto input = "WWCT\n/\n";
auto summary = createSummary( input );
const auto keywords = { "FOPT", "WWCT", "WWCT", "WWCT", "WWCT" };
const auto wells = { "PRODUCER", "WX2", "W_1", "W_3" };
summary.merge( createSummary( "FOPT\n" ) );
const auto kw_names = sorted_keywords( summary );
const auto well_names = sorted_names( summary );
BOOST_CHECK_EQUAL_COLLECTIONS(
keywords.begin(), keywords.end(),
kw_names.begin(), kw_names.end() );
BOOST_CHECK_EQUAL_COLLECTIONS(
wells.begin(), wells.end(),
well_names.begin(), well_names.end() );
}
constexpr auto ALL_keywords = {