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

Functions

template<typename OS, typename Arg>
OS & printSizes (OS &out, Arg &&arg)
 Print the parameter.
 
template<typename OS, typename Arg, typename... Args>
requires ( sizeof...( Args ) > 0 )
OS & printSizes (OS &out, Arg &&arg, Args &&... args)
 Print the parameters.
 
template<typename A, typename... Rest>
bool check_sizes (const A &first, const Rest &... rest) noexcept
 Compare sizes of 1 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()

template<typename A, typename... Rest>
bool Gaudi::Functional::details::zip::check_sizes ( const A & first,
const Rest &... rest )
noexcept

Compare sizes of 1 or more containers.

Definition at line 48 of file zip.h.

48 {
49 return ( ( first.size() == rest.size() ) && ... );
50 }

◆ 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 80 of file zip.h.

80 {
81#ifndef NDEBUG
82 verifySizes( args... );
83#endif
84#if defined( GAUDI_FUNCTIONAL_USES_STD_RANGES )
85 return std::ranges::as_const_view( std::ranges::zip_view( std::forward<Args>( args )... ) );
86#else
87 return ranges::views::const_( ranges::views::zip( std::forward<Args>( args )... ) );
88#endif
89 }
decltype(auto) verifySizes(Args &... args)
Verify the data container sizes have the same sizes.
Definition zip.h:55

◆ printSizes() [1/2]

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

Print the parameter.

Definition at line 33 of file zip.h.

33 {
34 out << "SizeOf'" << System::typeinfoName( typeid( Arg ) ) << "'=" << arg.size();
35 return out;
36 }
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>
requires ( sizeof...( Args ) > 0 )
OS & Gaudi::Functional::details::zip::printSizes ( OS & out,
Arg && arg,
Args &&... args )

Print the parameters.

Definition at line 41 of file zip.h.

41 {
42 printSizes( out, arg ) << ", ";
43 return printSizes( out, args... );
44 }
OS & printSizes(OS &out, Arg &&arg)
Print the parameter.
Definition zip.h:33

◆ 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 67 of file zip.h.

67 {
68#ifndef NDEBUG
69 verifySizes( args... );
70#endif
71#if defined( GAUDI_FUNCTIONAL_USES_STD_RANGES )
72 return std::ranges::zip_view( std::forward<Args>( args )... );
73#else
74 return ranges::views::zip( std::forward<Args>( args )... );
75#endif
76 }

◆ 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 55 of file zip.h.

55 {
56 if ( !check_sizes( args... ) ) {
57 std::ostringstream mess;
58 mess << "Zipped containers have different sizes : ";
59 printSizes( mess, args... );
60 throw GaudiException( mess.str(), "Gaudi::Functional::details::zip::verifySizes", StatusCode::FAILURE );
61 }
62 }
Define general base for Gaudi exception.
constexpr static const auto FAILURE
Definition StatusCode.h:100
bool check_sizes(const A &first, const Rest &... rest) noexcept
Compare sizes of 1 or more containers.
Definition zip.h:48