21namespace seqan3::detail
25template <
typename container_t>
26 requires (!std::ranges::view<container_t>)
34 template <std::ranges::input_range rng_t>
35 requires std::convertible_to<std::ranges::range_reference_t<rng_t>, std::ranges::range_value_t<container_t>>
36 auto impl(rng_t && rng, container_t &
container)
const
42 template <std::ranges::input_range rng_t>
43 auto impl(rng_t && rng, container_t &
container)
const
44 requires std::ranges::input_range<std::ranges::range_value_t<rng_t>>
46 auto adaptor = to_fn<std::ranges::range_value_t<container_t>>{};
58 template <std::ranges::input_range rng_t,
typename... args_t>
59 constexpr auto operator()(rng_t && rng, args_t &&... args)
const
61 auto new_container = container_t(std::forward<args_t>(args)...);
64 if constexpr (std::ranges::sized_range<rng_t> &&
requires (container_t c) { c.reserve(
size_t{}); })
67 impl(std::forward<rng_t>(rng), new_container);
75template <
template <
typename>
typename container_t>
76struct to_template_template_fn
84 template <std::ranges::input_range rng_t,
typename... args_t>
85 constexpr auto operator()(rng_t && rng, args_t &&... args)
const
87 auto adaptor = to_fn<container_t<std::ranges::range_value_t<rng_t>>>{};
88 return adaptor(std::forward<rng_t>(rng), std::forward<args_t>(args)...);
94namespace seqan3::ranges
113template <
typename container_t,
typename... args_t>
114constexpr auto to(args_t &&... args)
116 return detail::adaptor_from_functor{detail::to_fn<container_t>{}, std::forward<args_t>(args)...};
123template <
template <
typename...>
typename container_t,
typename... args_t>
124constexpr auto to(args_t &&... args)
126 return detail::adaptor_from_functor{detail::to_template_template_fn<container_t>{}, std::forward<args_t>(args)...};
133template <
typename container_t, std::ranges::input_range rng_t,
typename... args_t>
134constexpr auto to(rng_t && rng, args_t &&... args)
136 return detail::adaptor_from_functor{detail::to_fn<container_t>{},
137 std::forward<args_t>(args)...}(std::forward<rng_t>(rng));
144template <
template <
class...>
typename container_t, std::ranges::input_range rng_t,
typename... args_t>
145constexpr auto to(rng_t && rng, args_t &&... args)
147 return detail::adaptor_from_functor{detail::to_template_template_fn<container_t>{},
148 std::forward<args_t>(args)...}(std::forward<rng_t>(rng));
160template <
typename container_t,
typename... args_t>
163 return ranges::to<container_t>(std::forward<args_t>(args)...);
170template <
template <
typename...>
typename container_t,
typename... args_t>
173 return ranges::to<container_t>(std::forward<args_t>(args)...);
180template <
typename container_t, std::ranges::input_range rng_t,
typename... args_t>
183 return ranges::to<container_t>(std::forward<rng_t>(rng), std::forward<args_t>(args)...);
190template <
template <
typename...>
typename container_t, std::ranges::input_range rng_t,
typename... args_t>
193 return ranges::to<container_t>(std::forward<rng_t>(rng), std::forward<args_t>(args)...);
Provides seqan3::detail::adaptor_from_functor.
T back_inserter(T... args)
decltype(detail::transform< trait_t >(list_t{})) transform
Apply a transformation trait to every type in the list and return a seqan3::type_list of the results.
Definition: traits.hpp:470
constexpr size_t size
The size of a type pack.
Definition: traits.hpp:146
SEQAN3_DEPRECATED_330 constexpr auto to(rng_t &&rng, args_t &&... args)
Converts a range to a container.
Definition: to.hpp:181
SEQAN3_DEPRECATED_330 constexpr auto to(args_t &&... args)
Converts a range to a container.
Definition: to.hpp:161
The (most general) container concept as defined by the standard library.
The SeqAn namespace for views.
Definition: char_strictly_to.hpp:22
Provides concepts that do not have equivalents in C++20.