Skip to content
Snippets Groups Projects
Commit f379b57b authored by Rosen Matev's avatar Rosen Matev :sunny:
Browse files

Merge branch 'switch-to-meta-enum' into 'master'

TrackRungeKuttaExtrapolator: switch to meta_enum

See merge request !2358
parents 445316ed e626ad97
No related branches found
No related tags found
1 merge request!2358TrackRungeKuttaExtrapolator: switch to meta_enum
Pipeline #2373569 passed
......@@ -79,69 +79,12 @@ namespace RK {
Gaudi::Accumulators::MsgCounter<MSG::WARNING> m_max;
};
namespace Scheme {
enum class scheme_t {
CashKarp,
Fehlberg,
DormandPrice,
BogackiShampine3,
BogackiShampine5,
HeunEuler,
SharpSmart5,
Tsitouras5,
Tsitouras2009,
SharpVerner6,
SharpVerner7,
Verner6,
Verner7,
Verner8,
Verner9
};
namespace { // make sure table has internal linkage only...
static const auto table = std::array{std::pair{scheme_t::CashKarp, "CashKarp"},
std::pair{scheme_t::Fehlberg, "Fehlberg"},
std::pair{scheme_t::DormandPrice, "DormandPrice"},
std::pair{scheme_t::BogackiShampine3, "BogackiShampine3"},
std::pair{scheme_t::BogackiShampine5, "BogackiShampine5"},
std::pair{scheme_t::SharpSmart5, "SharpSmart5"},
std::pair{scheme_t::HeunEuler, "HeunEuler"},
std::pair{scheme_t::SharpVerner6, "SharpVerner6"},
std::pair{scheme_t::SharpVerner7, "SharpVerner7"},
std::pair{scheme_t::Verner6, "Verner6"},
std::pair{scheme_t::Verner7, "Verner7"},
std::pair{scheme_t::Verner8, "Verner8"},
std::pair{scheme_t::Verner9, "Verner9"},
std::pair{scheme_t::Tsitouras2009, "Tsitouras2009"},
std::pair{scheme_t::Tsitouras5, "Tsitouras5"}};
}
// provide support for Gaudi::Property<scheme_t>
std::string toString( const scheme_t& scheme ) {
auto i = std::find_if( begin( table ), end( table ),
[&]( const std::pair<scheme_t, const char*>& p ) { return p.first == scheme; } );
if ( i == end( table ) ) {
throw std::range_error( "Invalid RK::scheme_t" );
return "<<<INVALID>>>";
}
return i->second;
}
std::ostream& toStream( const scheme_t& scheme, std::ostream& os ) {
return os << std::quoted( toString( scheme ), '\'' );
}
StatusCode parse( scheme_t& result, std::string_view input ) {
if ( ( input.front() == '"' || input.front() == '\'' ) && input.front() == input.back() ) {
input.remove_prefix( 1 );
input.remove_suffix( 1 );
}
auto i = std::find_if( begin( table ), end( table ),
[&]( const std::pair<scheme_t, const char*>& p ) { return p.second == input; } );
if ( i == end( table ) ) return StatusCode::FAILURE;
result = i->first;
return StatusCode::SUCCESS;
}
// note: CashKarp appears twice, to flag it is as being the 'default' value...
meta_enum_class_with_unknown( scheme_t, unsigned char, CashKarp, CashKarp, Fehlberg, DormandPrice, BogackiShampine3,
BogackiShampine5, HeunEuler, SharpSmart5, Tsitouras5, Tsitouras2009, SharpVerner6,
SharpVerner7, Verner6, Verner7, Verner8, Verner9 )
// and allow printout..
std::ostream& operator<<( std::ostream& os, const scheme_t& s ) { return toStream( s, os ); }
} // namespace Scheme
using Scheme::scheme_t;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment