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

◆ exclusive_scan_left() [2/2]

template<concepts::monoid M, concepts::sized_product_type_or_more< 1 > T>
auto kumi::exclusive_scan_left ( M && m,
T && t )
inlinenodiscardconstexpr

Computes the exclusive prefix scan of all elements of a product type using a tail recursive call.

Note
The first stored value is the identity of the provided monoid.
Parameters
mMonoid callable function to apply
tProduct type to operate on
Returns
A tuple of prefix partial accumulations where each element 'I' equals m( m( m(init, get<0>(t)), ...), get<I-1>(t))

Helper type

namespace kumi::result
{
template<typename Function, product_type Tuple> struct exclusive_scan_left;
template<typename Function, product_type Tuple>
using exclusive_scan_left_t = typename exclusive_scan_left<Function,Tuple>::type;
}
constexpr auto exclusive_scan_left(Function f, T &&t, Value init)
Computes the exclusive prefix scan of all elements of a product type using a tail recursive call.
Definition scan.hpp:152

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

Examples:

#include <kumi/kumi.hpp>
#include <iostream>
int main()
{
auto t = kumi::tuple{2.,1,short{55},'z'};
auto output = kumi::exclusive_scan_left( [](auto acc, auto elt)
{
return acc + sizeof(elt);
}
, t
, std::size_t{42}
);
std::cout << output << "\n";
auto u = kumi::tuple{1,3,2,4,0,5,9,6,7};
}
constexpr numeric_add plus
Forms a binary monoid callable that can be used in kumi::algoritm. It represents the addition.
Definition monoid.hpp:124
Fixed-size collection of heterogeneous values.
Definition tuple.hpp:29
#include <kumi/kumi.hpp>
#include <iostream>
int main()
{
using namespace kumi::literals;
auto r = kumi::record{"a"_id = 2.,"b"_id = 1,"c"_id = short{55},"d"_id = 'z'};
auto output = kumi::exclusive_scan_left( [](auto acc, auto elt)
{
return acc + sizeof(elt);
}
, r
, std::size_t{42}
);
std::cout << output << "\n";
auto u = kumi::record{"a"_id = 1,"b"_id = 3,"c"_id = 2,"d"_id = 4, "e"_id = 0
, "f"_id = 5,"g"_id = 9,"h"_id = 6,"i"_id = 7};
}
Fixed-size collection of heterogeneous fields necessarily named, names are unique.
Definition record.hpp:29