From 4d9387ee235ec033e91ae47d2c41967ebce95bfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A5rd=20Skaflestad?= Date: Fri, 17 Jun 2022 14:55:24 +0200 Subject: [PATCH] Extract Helper for Single Table Record Construction Use case is table copy for PVTW. --- .../eclipse/EclipseState/Tables/Tables.cpp | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/src/opm/input/eclipse/EclipseState/Tables/Tables.cpp b/src/opm/input/eclipse/EclipseState/Tables/Tables.cpp index 3a2c4b6db..4c0da6c03 100644 --- a/src/opm/input/eclipse/EclipseState/Tables/Tables.cpp +++ b/src/opm/input/eclipse/EclipseState/Tables/Tables.cpp @@ -1489,21 +1489,36 @@ struct flat_props { static constexpr const char* errmsg() { return ""; } }; -template< typename T, std::size_t N > -double flat_get( const DeckRecord& rec ) { - if( !flat_props< T, N >::can_default() - && rec.getItem( N ).defaultApplied( 0 ) ) { - throw std::invalid_argument( flat_props< T, N >::errmsg() ); +template +double flat_get(const DeckRecord& rec) +{ + const auto& item = rec.getItem(N); + + if (item.defaultApplied(0) && !flat_props::can_default()) { + throw std::invalid_argument { + flat_props::errmsg() + }; } - return rec.getItem( N ).getSIDouble( 0 ); + return item.getSIDouble(0); } -template< typename T, std::size_t... Is > -std::vector< T > flat_records( const DeckKeyword& kw, seq< Is... > ) { - std::vector< T > xs; - for( const auto& record : kw ) - xs.emplace_back( T { flat_get< T, Is >( record )... } ); +template +T flat_get(const DeckRecord& record, seq) +{ + return { flat_get(record)... }; +} + +template +std::vector +flat_records(const DeckKeyword& kw, seq s) +{ + auto xs = std::vector{}; + xs.reserve(kw.size()); + + for (const auto& record : kw) { + xs.push_back(flat_get(record, s)); + } return xs; }