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

◆ inclusive_scan_left() [2/2]

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

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

On record types, this function operates on the underlying values, not on the fields themselves.

Note
The first stored value is the result of the application of the monoid to it's identity and the first element of the product_type.
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 T> struct inclusive_scan_left;
template<typename Function, product_type T>
using inclusive_scan_left_t = typename inclusive_scan_left<Function,T>::type;
}
constexpr auto inclusive_scan_left(Function f, T &&t, Value init)
Computes the inclusive prefix scan of all elements of a product type using a tail recursive call.
Definition scan.hpp:74

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

Examples:

Tuple:

#include <kumi/kumi.hpp>
#include <iostream>
int main()
{
auto t = kumi::tuple{2.,1,short{55},'z'};
auto output = kumi::inclusive_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:136
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 = 2.,"b"_id = 1,"c"_id = short{55},"d"_id = 'z'};
auto output = kumi::inclusive_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 tagged fields, tags are unique.
Definition record.hpp:36