The Gaudi Framework  master (ff829712)
Loading...
Searching...
No Matches
Gaudi::Functional::details::zip Namespace Reference

Functions

template<typename OS, typename Arg>
void printSizes (OS &out, Arg &&arg)
 Print the parameter.
 
template<typename OS, typename Arg, typename... Args>
void printSizes (OS &out, Arg &&arg, Args &&... args)
 Print the parameters.
 
template<typename A>
bool check_sizes (const A &) noexcept
 Resolve case there is only one container in the range.
 
template<typename A, typename B>
bool check_sizes (const A &a, const B &b) noexcept
 Compare sizes of two containers.
 
template<typename A, typename B, typename... C>
bool check_sizes (const A &a, const B &b, const C &... c) noexcept
 Compare sizes of 3 or more containers.
 
template<typename... Args>
decltype(auto) verifySizes (Args &... args)
 Verify the data container sizes have the same sizes.
 
template<typename... Args>
decltype(auto) range (Args &&... args)
 Zips multiple containers together to form a single range.
 
template<typename... Args>
decltype(auto) const_range (Args &&... args)
 Zips multiple containers together to form a single const range.
 

Function Documentation

◆ check_sizes() [1/3]

template<typename A>
bool Gaudi::Functional::details::zip::check_sizes ( const A & )
inlinenoexcept

Resolve case there is only one container in the range.

Definition at line 57 of file details.h.

57 {
58 return true;
59 }

◆ check_sizes() [2/3]

template<typename A, typename B>
bool Gaudi::Functional::details::zip::check_sizes ( const A & a,
const B & b )
inlinenoexcept

Compare sizes of two containers.

Definition at line 63 of file details.h.

63 {
64 return a.size() == b.size();
65 }

◆ check_sizes() [3/3]

template<typename A, typename B, typename... C>
bool Gaudi::Functional::details::zip::check_sizes ( const A & a,
const B & b,
const C &... c )
inlinenoexcept

Compare sizes of 3 or more containers.

Definition at line 69 of file details.h.

69 {
70 return ( check_sizes( a, b ) && check_sizes( b, c... ) );
71 }
bool check_sizes(const A &) noexcept
Resolve case there is only one container in the range.
Definition details.h:57

◆ const_range()

template<typename... Args>
decltype(auto) Gaudi::Functional::details::zip::const_range ( Args &&... args)
inline

Zips multiple containers together to form a single const range.

Definition at line 99 of file details.h.

99 {
100#ifndef NDEBUG
101 verifySizes( args... );
102#endif
103#if defined( GAUDI_FUNCTIONAL_USES_STD_RANGES )
104 return std::ranges::as_const_view( std::ranges::zip_view( std::forward<Args>( args )... ) );
105#else
106 return ranges::views::const_( ranges::views::zip( std::forward<Args>( args )... ) );
107#endif
108 }
decltype(auto) verifySizes(Args &... args)
Verify the data container sizes have the same sizes.
Definition details.h:75

◆ printSizes() [1/2]

template<typename OS, typename Arg>
void Gaudi::Functional::details::zip::printSizes ( OS & out,
Arg && arg )

Print the parameter.

Definition at line 43 of file details.h.

43 {
44 out << "SizeOf'" << System::typeinfoName( typeid( Arg ) ) << "'=" << std::forward<Arg>( arg ).size();
45 }
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition System.cpp:260

◆ printSizes() [2/2]

template<typename OS, typename Arg, typename... Args>
void Gaudi::Functional::details::zip::printSizes ( OS & out,
Arg && arg,
Args &&... args )

Print the parameters.

Definition at line 49 of file details.h.

49 {
50 printSizes( out, arg );
51 out << ", ";
52 printSizes( out, args... );
53 }
void printSizes(OS &out, Arg &&arg)
Print the parameter.
Definition details.h:43

◆ range()

template<typename... Args>
decltype(auto) Gaudi::Functional::details::zip::range ( Args &&... args)
inline

Zips multiple containers together to form a single range.

Definition at line 86 of file details.h.

86 {
87#ifndef NDEBUG
88 verifySizes( args... );
89#endif
90#if defined( GAUDI_FUNCTIONAL_USES_STD_RANGES )
91 return std::ranges::zip_view( std::forward<Args>( args )... );
92#else
93 return ranges::views::zip( std::forward<Args>( args )... );
94#endif
95 }

◆ verifySizes()

template<typename... Args>
decltype(auto) Gaudi::Functional::details::zip::verifySizes ( Args &... args)
inline

Verify the data container sizes have the same sizes.

Definition at line 75 of file details.h.

75 {
76 if ( !check_sizes( args... ) ) {
77 std::ostringstream mess;
78 mess << "Zipped containers have different sizes : ";
79 printSizes( mess, args... );
80 throw GaudiException( mess.str(), "Gaudi::Functional::details::zip::verifySizes", StatusCode::FAILURE );
81 }
82 }
Define general base for Gaudi exception.
constexpr static const auto FAILURE
Definition StatusCode.h:100