KUMI v4.0.0
Flawless Fluorite
Loading...
Searching...
No Matches

◆ tiles()

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

Creates a tuple of product types, each containing N consecutive elements from t. Tiles starts at 0 and advance by O 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 tile to generate
OOffset from the begening of the previous tile
Parameters
tthe product type from which to extract the tiles
Returns
A tuple of product types, each containing N consecutive elements of t offset by O
Note
Tiles is the most general form of tiling each inner product_type is a tile over t starting at index tile_size * tile_number + 1. The last tile will be smaller if the size of the product type is not a multiple of the tile size.

Helper type

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

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

Examples:

Tuple:

#include <kumi/kumi.hpp>
#include <iostream>
int main()
{
auto t = kumi::tuple{1, 'y', 3.f, short{55}, -8, 66., "Pete"};
auto w = kumi::tiles<2,3>(t);
std::cout << " Standard Tiles" << "\n";
std::cout << w << "\n";
kumi::for_each([&](auto tile)
{
get<0>(tile)++;
},w);
std::cout << t << "\n";
std::cout << " Tiles with references " << "\n";
std::cout << w2 << "\n";
kumi::for_each([&](auto tile)
{
get<0>(tile)++;
},w2);
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 r = 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 w = kumi::tiles<2,3>(r);
std::cout << " Standard Tiles" << "\n";
std::cout << w << "\n";
kumi::for_each([&](auto tile)
{
},w);
std::cout << r << "\n";
std::cout << " Tiles with references " << "\n";
std::cout << w2 << "\n";
kumi::for_each([&](auto tile)
{
},w2);
std::cout << r << "\n";
}
decltype(auto) constexpr get(record< Ts... > &r) noexcept
Extracts the Ith field from a kumi::record.
Definition record.hpp:605
Fixed-size collection of heterogeneous tagged fields, tags are unique.
Definition record.hpp:36
constexpr auto values_of(T &&t) noexcept
Extracts the values of the fields of a kumi::product_type.
Definition tuple.hpp:754