17 #include <type_traits>
34 SEQAN3_CONCEPT has_range_value_type = requires {
typename std::ranges::range_value_t<std::remove_cvref_t<t>>; };
39 template <
bool const_range,
typename range_t>
44 template <
bool const_range,
typename range_t>
49 template <
bool const_v,
typename range_t>
64 #ifdef SEQAN3_DEPRECATED_310
72 template <std::ranges::input_range rng_t>
74 requires (!std::input_or_output_iterator<rng_t>)
88 #ifdef SEQAN3_DEPRECATED_310
96 template <std::ranges::input_range rng_t>
98 requires (!std::input_or_output_iterator<rng_t>)
112 #ifdef SEQAN3_DEPRECATED_310
120 template <std::ranges::input_range rng_t>
122 requires (!std::input_or_output_iterator<rng_t>)
136 #ifdef SEQAN3_DEPRECATED_310
144 template <std::ranges::input_range rng_t>
146 requires (!std::input_or_output_iterator<rng_t>)
160 #ifdef SEQAN3_DEPRECATED_310
168 template <std::ranges::range rng_t>
170 requires (!std::input_or_output_iterator<rng_t>)
184 #ifdef SEQAN3_DEPRECATED_310
192 template <std::ranges::sized_range rng_t>
194 requires (!std::input_or_output_iterator<rng_t>)
218 template <
typename t>
220 requires detail::has_range_value_type<t>
225 using type = std::ranges::range_value_t<std::remove_cvref_t<t>>;
229 template <
typename t>
230 requires detail::has_range_value_type<t> && detail::has_range_value_type<std::ranges::range_value_t<std::remove_cvref_t<t>>>
239 template <
typename t>
256 template <
typename t>
258 requires detail::has_range_value_type<t>
263 template <
typename t>
264 requires detail::has_range_value_type<t> && detail::has_range_value_type<std::ranges::range_value_t<std::remove_cvref_t<t>>>
265 constexpr
size_t range_dimension_v<t> = range_dimension_v<std::ranges::range_value_t<std::remove_cvref_t<t>>> + 1;
272 #ifdef SEQAN3_DEPRECATED_310
281 template <
typename t1,
typename t2>
282 SEQAN3_CONCEPT range_compatible_concept = requires (t1, t2)
284 requires (range_dimension_v<t1> == range_dimension_v<t2>);
290 template <
typename t1,
typename t2>
std::ranges::sentinel_t< maybe_const_range_t< const_v, range_t > > maybe_const_sentinel_t
Returns the const sentinel of range_t if const_range is true; otherwise the non-const sentinel.
Definition: type_traits.hpp:50
constexpr size_t range_dimension_v
Returns the number of times you can call seqan3::value_type_t recursively on t (type trait).
Definition: type_traits.hpp:260
std::ranges::iterator_t< maybe_const_range_t< const_range, range_t > > maybe_const_iterator_t
Returns the const iterator of range_t if const_range is true; otherwise the non-const iterator.
Definition: type_traits.hpp:45
typename range_innermost_value< t >::type range_innermost_value_t
Shortcut for seqan3::range_innermost_value (transformation_trait shortcut).
Definition: type_traits.hpp:240
constexpr size_t size
The size of a type pack.
Definition: traits.hpp:150
Two types are "compatible" if their seqan3::range_dimension_v and their seqan3::range_innermost_value...
Provides various transformation traits for use on iterators.
Provides C++20 additions to the <iterator> header.
The internal SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
typename value_type< t >::type value_type_t
This is helper structure to deprecate seqan3::value_type_t and will be removed before SeqAn 3....
Definition: pre.hpp:37
typename difference_type< t >::type difference_type_t
This is helper structure to deprecate seqan3::difference_type_t and will be removed before SeqAn 3....
Definition: pre.hpp:233
typename reference< t >::type reference_t
This is helper structure to deprecate seqan3::reference_t and will be removed before SeqAn 3....
Definition: pre.hpp:85
typename rvalue_reference< t >::type rvalue_reference_t
This is helper structure to deprecate seqan3::rvalue_reference_t and will be removed before SeqAn 3....
Definition: pre.hpp:133
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
Adaptations of concepts from the Ranges TS.
This is helper structure to deprecate seqan3::const_reference and will be removed before SeqAn 3....
Definition: pre.hpp:177
difference_type_t< std::ranges::iterator_t< rng_t > > type
Return the difference_type member definition from the queried type's iterator.
Definition: type_traits.hpp:175
This is helper structure to deprecate seqan3::difference_type and will be removed before SeqAn 3....
Definition: pre.hpp:229
reference_t< std::ranges::iterator_t< rng_t > > type
Return the reference member definition from the queried type's iterator.
Definition: type_traits.hpp:103
This is helper structure to deprecate seqan3::reference and will be removed before SeqAn 3....
Definition: pre.hpp:81
rvalue_reference_t< std::ranges::iterator_t< rng_t > > type
Return the rvalue_reference member definition from the queried type's iterator.
Definition: type_traits.hpp:127
This is helper structure to deprecate seqan3::rvalue_reference and will be removed before SeqAn 3....
Definition: pre.hpp:129
decltype(std::ranges::size(std::declval< rng_t & >())) type
Return the size_type as returned by the size function.
Definition: type_traits.hpp:199
This is helper structure to deprecate seqan3::size_type and will be removed before SeqAn 3....
Definition: pre.hpp:279
value_type_t< std::ranges::iterator_t< rng_t > > type
Return the value_type member definition from the queried type's iterator.
Definition: type_traits.hpp:79
This is helper structure to deprecate seqan3::value_type and will be removed before SeqAn 3....
Definition: pre.hpp:33
Recursively determines the value_type on containers and/or iterators.
Definition: type_traits.hpp:223
std::ranges::range_value_t< std::remove_cvref_t< t > > type
The return type (recursion not shown).
Definition: type_traits.hpp:225
Provides various type traits on generic types.
Provides various transformation trait base templates and shortcuts.