Add util::map(array) for transforming arrays elementwise

This commit is contained in:
Nikita Lisitsa 2020-09-23 20:19:02 +03:00
parent 8ece2e1884
commit f193ddf41d

View file

@ -31,6 +31,11 @@ namespace psemek::util
array & operator = (array const &) = delete;
dims_type const & dims() const
{
return dims_;
}
std::size_t dim(std::size_t i) const
{
assert(i < N);
@ -298,4 +303,21 @@ namespace psemek::util
data_ = std::move(data);
}
template <typename F, typename T, std::size_t N>
auto map(F && f, array<T, N> const & a)
{
using R = std::decay_t<decltype(f(T{}))>;
array<R, N> r(a.dims());
auto begin = a.begin();
auto end = a.end();
auto out = r.begin();
for (; begin != end;)
*out++ = f(*begin++);
return r;
}
}