15 constexpr
bool HasShrinkToFit = requires(
const T &t) {
20 constexpr
bool HasSqueeze = requires(
const T &t) {
24 template<
typename OutputVector,
typename InputVector,
typename Converter>
25 auto transform(
const InputVector &input, Converter convert)
28 if constexpr (std::ranges::sized_range<InputVector>) {
29 output.reserve(input.size());
31 for (
const auto &value : input) {
32 output.push_back(std::invoke(convert, value));
37 template<
typename OutputVector,
typename InputVector,
typename Converter>
38 auto transformFilter(
const InputVector &input, Converter convert)
41 if constexpr (std::ranges::sized_range<InputVector>) {
42 output.reserve(input.size());
44 for (
const auto &value : input) {
45 if (
const std::optional<std::decay_t<decltype(value)>> result = std::invoke(convert, value)) {
46 output.push_back(*result);
49 if constexpr (HasShrinkToFit<InputVector>) {
50 output.shrink_to_fit();
51 }
else if constexpr (HasSqueeze<InputVector>) {
57 template<
typename Vec,
typename T>
58 auto contains(
const Vec &vec,
const T &value)
60 return std::find(std::begin(vec), std::end(vec), value) != std::end(vec);
63 template<
typename T,
typename Function>
64 auto map(Function mapValue, std::optional<T> &&optValue) -> std::optional<std::invoke_result_t<Function, T &&>>
67 return mapValue(std::move(*optValue));
72 template<
typename To,
typename From>
73 auto into(std::optional<From> &&value) -> std::optional<To>
83 #endif // ALGORITHMS_H Definition: Algorithms.h:12