The Gaudi Framework  master (42b00024)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Gaudi::Functional::details::zip Namespace Reference

Functions

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

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 73 of file details.h.

73  {
74  return true;
75  }

◆ 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 79 of file details.h.

79  {
80  return a.size() == b.size();
81  }

◆ 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 85 of file details.h.

85  {
86  return ( check_sizes( a, b ) && check_sizes( b, c... ) );
87  }

◆ 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 115 of file details.h.

115  {
116 #ifndef NDEBUG
117  verifySizes( args... );
118 #endif
119 #if defined( GAUDI_FUNCTIONAL_USES_STD_RANGES )
120  return std::ranges::as_const_view( std::ranges::zip_view( std::forward<Args>( args )... ) );
121 #else
122  return ranges::views::const_( ranges::views::zip( std::forward<Args>( args )... ) );
123 #endif
124  }

◆ printSizes() [1/2]

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

Print the parameter.

Definition at line 59 of file details.h.

59  {
60  out << "SizeOf'" << System::typeinfoName( typeid( Arg ) ) << "'=" << std::forward<Arg>( arg ).size();
61  }

◆ 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 65 of file details.h.

65  {
66  printSizes( out, arg );
67  out << ", ";
68  printSizes( out, args... );
69  }

◆ 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 102 of file details.h.

102  {
103 #ifndef NDEBUG
104  verifySizes( args... );
105 #endif
106 #if defined( GAUDI_FUNCTIONAL_USES_STD_RANGES )
107  return std::ranges::zip_view( std::forward<Args>( args )... );
108 #else
109  return ranges::views::zip( std::forward<Args>( args )... );
110 #endif
111  }

◆ 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 91 of file details.h.

91  {
92  if ( !check_sizes( args... ) ) {
93  std::ostringstream mess;
94  mess << "Zipped containers have different sizes : ";
95  printSizes( mess, args... );
96  throw GaudiException( mess.str(), "Gaudi::Functional::details::zip::verifySizes", StatusCode::FAILURE );
97  }
98  }
GaudiException
Definition: GaudiException.h:32
gaudirun.c
c
Definition: gaudirun.py:525
System::typeinfoName
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:315
Gaudi::Functional::details::zip::check_sizes
bool check_sizes(const A &a, const B &b, const C &... c) noexcept
Compare sizes of 3 or more containers.
Definition: details.h:85
Gaudi::Functional::details::zip::verifySizes
decltype(auto) verifySizes(Args &... args)
Verify the data container sizes have the same sizes.
Definition: details.h:91
gaudirun.args
args
Definition: gaudirun.py:336
Gaudi::Functional::details::zip::printSizes
void printSizes(OS &out, Arg &&arg, Args &&... args)
Print the parameters.
Definition: details.h:65
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:101
Gaudi::Functional::details::out
OptOut && out
Definition: details.h:196