Porytiles
Loading...
Searching...
No Matches
transform.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <ranges>
4#include <set>
5#include <type_traits>
6#include <vector>
7
8namespace porytiles {
9
24template <typename T, typename F>
25[[nodiscard]] auto transform(const std::vector<T> &input, F &&func) -> std::vector<std::invoke_result_t<F, const T &>>
26{
27 return input | std::views::transform(std::forward<F>(func)) | std::ranges::to<std::vector>();
28}
29
43template <typename U, typename T>
44 requires std::constructible_from<U, T>
45[[nodiscard]] auto transform(const std::vector<T> &input) -> std::vector<U>
46{
47 return input | std::views::transform([](const T &val) { return U(val); }) | std::ranges::to<std::vector>();
48}
49
64template <typename T, typename F>
65[[nodiscard]] auto transform(const std::set<T> &input, F &&func) -> std::set<std::invoke_result_t<F, const T &>>
66{
67 return input | std::views::transform(std::forward<F>(func)) | std::ranges::to<std::set>();
68}
69
83template <typename U, typename T>
84 requires std::constructible_from<U, T>
85[[nodiscard]] auto transform(const std::set<T> &input) -> std::set<U>
86{
87 return input | std::views::transform([](const T &val) { return U(val); }) | std::ranges::to<std::set>();
88}
89
90} // namespace porytiles
auto transform(const std::vector< T > &input, F &&func) -> std::vector< std::invoke_result_t< F, const T & > >
Transforms a vector of type T into a vector of type U using a mapping function.
Definition transform.hpp:25