SeqAn3
3.4.0
The Modern C++ library for sequence analysis.
Toggle main menu visibility
Loading...
Searching...
No Matches
utility/range/concept.hpp
Go to the documentation of this file.
1
// SPDX-FileCopyrightText: 2006-2025 Knut Reinert & Freie Universität Berlin
2
// SPDX-FileCopyrightText: 2016-2025 Knut Reinert & MPI für molekulare Genetik
3
// SPDX-License-Identifier: BSD-3-Clause
4
9
10
#pragma once
11
12
#include <ranges>
13
14
#include <
seqan3/core/platform.hpp
>
15
16
namespace
seqan3
17
{
40
template
<
typename
type>
41
concept
const_iterable_range
=
42
std::ranges::input_range<std::remove_const_t<type>> && std::ranges::input_range<type const>
43
&& (std::ranges::forward_range<std::remove_const_t<type>> == std::ranges::forward_range<type const>)
44
&& (std::ranges::bidirectional_range<
std::remove_const_t<type>
> == std::ranges::bidirectional_range<type const>)
45
&& (std::ranges::random_access_range<std::remove_const_t<type>> == std::ranges::random_access_range<type const>);
47
80
template
<
typename
iterator_t>
81
concept
pseudo_random_access_iterator
=
82
std::forward_iterator<iterator_t>
83
&& !
std::is_base_of_v<std::random_access_iterator_tag, typename std::iterator_traits<iterator_t>::iterator_category
>
84
&& std::totally_ordered<iterator_t> && std::sized_sentinel_for<iterator_t, iterator_t>
85
&&
requires
(iterator_t i, iterator_t
const
j, std::iter_difference_t<iterator_t>
const
n) {
86
requires
std::same_as<
decltype
(i += n), iterator_t &>;
87
requires
std::same_as<
decltype
(j + n), iterator_t>;
88
requires
std::same_as<
decltype
(n + j), iterator_t>;
89
requires
std::same_as<
decltype
(--i), iterator_t &>;
90
requires
std::same_as<
decltype
(i--), iterator_t>;
91
requires
std::same_as<
decltype
(i -= n), iterator_t &>;
92
requires
std::same_as<
decltype
(j - n), iterator_t>;
93
requires
std::same_as<
decltype
(j[n]), std::iter_reference_t<iterator_t>>;
94
};
96
113
template
<
typename
rng_t>
114
concept
pseudo_random_access_range
=
115
std::ranges::forward_range<rng_t> &&
pseudo_random_access_iterator<std::ranges::iterator_t<rng_t>
>;
117
}
// namespace seqan3
const_iterable_range
Specifies requirements of an input range type for which the const version of that type satisfies the ...
pseudo_random_access_iterator
This concept checks if an iterator type models pseudo random access.
pseudo_random_access_range
This concept checks if a type models a pseudo random access range.
std::is_base_of_v
T is_base_of_v
seqan3
The main SeqAn3 namespace.
Definition
aligned_sequence_concept.hpp:26
platform.hpp
Provides platform and dependency checks.
std::remove_const_t
Hide me
Version:
seqan3
utility
range
concept.hpp
Generated on
for SeqAn3 by
1.17.0