19#if defined( __cpp_lib_ranges_zip ) && defined( __cpp_lib_ranges_as_const )
20# define GAUDI_FUNCTIONAL_USES_STD_RANGES 1
23# include <range/v3/view/const.hpp>
24# include <range/v3/view/zip.hpp>
32 template <
typename OS,
typename Arg>
39 template <
typename OS,
typename Arg,
typename... Args>
40 requires(
sizeof...( Args ) > 0 )
47 template <
typename A,
typename... Rest>
48 bool check_sizes(
const A& first,
const Rest&... rest )
noexcept {
49 return ( ( first.size() == rest.size() ) && ... );
54 template <
typename... Args>
57 std::ostringstream mess;
58 mess <<
"Zipped containers have different sizes : ";
66 template <
typename... Args>
67 inline decltype( auto )
range( Args&&... args ) {
71#if defined( GAUDI_FUNCTIONAL_USES_STD_RANGES )
72 return std::ranges::zip_view( std::forward<Args>( args )... );
74 return ranges::views::zip( std::forward<Args>( args )... );
79 template <
typename... Args>
84#if defined( GAUDI_FUNCTIONAL_USES_STD_RANGES )
85 return std::ranges::as_const_view( std::ranges::zip_view( std::forward<Args>( args )... ) );
87 return ranges::views::const_( ranges::views::zip( std::forward<Args>( args )... ) );
Define general base for Gaudi exception.
constexpr static const auto FAILURE
OS & printSizes(OS &out, Arg &&arg)
Print the parameter.
decltype(auto) verifySizes(Args &... args)
Verify the data container sizes have the same sizes.
decltype(auto) const_range(Args &&... args)
Zips multiple containers together to form a single const range.
decltype(auto) range(Args &&... args)
Zips multiple containers together to form a single range.
bool check_sizes(const A &first, const Rest &... rest) noexcept
Compare sizes of 1 or more containers.
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.