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

◆ exclusive_scan_left() [1/2]

template<typename Function, concepts::product_type T, typename Value>
auto kumi::exclusive_scan_left ( Function f,
T && t,
Value init )
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 provided initial value.
Parameters
fBinary callable function to apply
tProduct type to operate on
initOptional initial value of the scan
Returns
A tuple of prefix partial accumulations where each element 'I' equals f( f( f(init, get<0>(t)), ...), get<I-1>(t))

Helper type

namespace kumi::result
{
template<typename Function, product_type Tuple, typename Value> struct exclusive_scan_left;
template<typename Function, product_type Tuple, typename Value>
using exclusive_scan_left_t = typename exclusive_scan_left<Function,Tuple,Value>::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