KUMI v3.1.0
Exquisite Epidote
Loading...
Searching...
No Matches

◆ chunks()

template<std::size_t N, concepts::product_type T>
auto kumi::chunks ( T && t)
inlinenodiscardconstexpr

Creates a tuple of product types, each containing N consecutive elements from t. Chunks starts at 0 and advance by N element each time.

On record types, this function operates on elements as if they were ordered. The considered order is the order of declaration.

Template Parameters
NSize of the chunks to generate
Parameters
tthe product type from which to extract the chunks
Returns
A tuple of product types, each containing N consecutive elements of t
Note
Chunks behaves like paving tiles: each inner product_type is a tile over t starting at index chunk_size * tile_number + 1. The last chunk will be smaller if the size of the product_type is not a multiple of the chunk size.

Helper type

namespace kumi::result
{
template<std::size_t N, product_type T> struct chunks;
template<std::size_t N, product_type T>
using chunks_t = typename chunks<N, T>::type;
}
constexpr auto chunks(T &&t)
Creates a tuple of product types, each containing N consecutive elements from t. Chunks starts at 0 a...
Definition tiler.hpp:94

Computes the return type of a call to kumi::chunks

Examples:

Tuple:

#include <kumi/kumi.hpp>
#include <iostream>
int main()
{
auto t = kumi::tuple{1, 'y', 3.f, short{55}, -8, 66., "Pete"};
auto c = kumi::chunks<2>(t);
std::cout << " Standard Chunks " << "\n";
std::cout << c << "\n";
kumi::for_each([&](auto tile)
{
get<0>(tile)++;
},c);
std::cout << t << "\n";
std::cout << " Chunks with references " << "\n";
std::cout << c2 << "\n";
kumi::for_each([&](auto tile)
{
get<0>(tile)++;
},c2);
std::cout << t << "\n";
}
constexpr void for_each(Function f, T &&t, Ts &&... ts)
Applies the Callable object f on each element of a product type. f is applied on the values if the gi...
Definition for_each.hpp:36
Fixed-size collection of heterogeneous values.
Definition tuple.hpp:33

Record:

#include <kumi/kumi.hpp>
#include <iostream>
int main()
{
using namespace kumi::literals;
auto t = kumi::record{"a"_id = 1, "b"_id = 'y', "c"_id = 3.f, "d"_id = short{55}
, "e"_id = -8, "f"_id = 66., "g"_id = "Pete"};
auto c = kumi::chunks<2>(t);
std::cout << " Standard Chunks " << "\n";
std::cout << c << "\n";
kumi::for_each([&](auto tile)
{
},c);
std::cout << t << "\n";
std::cout << " Chunks with references " << "\n";
std::cout << c2 << "\n";
kumi::for_each([&](auto tile)
{
},c2);
std::cout << t << "\n";
}
constexpr auto values_of(T &&t) noexcept
Extracts the values of the fields of a product type.
Definition meta.hpp:54
decltype(auto) constexpr get(record< Ts... > &r) noexcept
Extracts the Ith field from a kumi::record.
Definition record.hpp:604
Fixed-size collection of heterogeneous tagged fields, tags are unique.
Definition record.hpp:36