Skip to content
Snippets Groups Projects
Commit 8b38c49d authored by Benedikt Hegner's avatar Benedikt Hegner
Browse files

Merge branch 'GaudiFunctional-RangeZipSizeCheckImprovedErrorMessage' into 'master'

Gaudi functional range zip - size check improved error message

See merge request !297
parents 3e387b53 b1cff530
Branches
Tags
1 merge request!297Gaudi functional range zip - size check improved error message
Pipeline #
......@@ -24,6 +24,21 @@ namespace Gaudi { namespace Functional { namespace details {
namespace zip
{
/// Print the parameter
template <typename OS, typename Arg>
void printSizes(OS& out, Arg&& arg)
{
out << "SizeOf'" << System::typeinfoName(typeid(Arg))
<< "'=" << std::forward<Arg>(arg).size();
}
/// Print the parameters
template <typename OS, typename Arg, typename... Args>
void printSizes(OS& out, Arg&& arg, Args&&... args)
{
printSizes(out,arg); out << ", "; printSizes(out,args...);
}
/// Resolve case there is only one container in the range
template < typename A >
inline bool check_sizes( const A& ) noexcept { return true; }
......@@ -47,9 +62,14 @@ namespace Gaudi { namespace Functional { namespace details {
inline decltype(auto) verifySizes( Args&... args )
{
if ( UNLIKELY( !check_sizes( args... ) ) )
{ throw GaudiException( "Zipped containers have different sizes.",
{
std::ostringstream mess;
mess << "Zipped containers have different sizes : ";
printSizes(mess,args...);
throw GaudiException( mess.str(),
"Gaudi::Functional::details::zip::verifySizes",
StatusCode::FAILURE ); }
StatusCode::FAILURE );
}
}
/// Zips multiple containers together to form a single range
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment