SeqAn3 3.2.0-rc.1
The Modern C++ library for sequence analysis.
detail.hpp
Go to the documentation of this file.
1// -----------------------------------------------------------------------------------------------------
2// Copyright (c) 2006-2021, Knut Reinert & Freie Universität Berlin
3// Copyright (c) 2016-2021, Knut Reinert & MPI für molekulare Genetik
4// This file may be used, modified and/or redistributed under the terms of the 3-clause BSD-License
5// shipped with this file and also available at: https://github.com/seqan/seqan3/blob/master/LICENSE.md
6// -----------------------------------------------------------------------------------------------------
7
13#pragma once
14
19
20namespace seqan3::detail
21{
22
23// ------------------------------------------------------------------
24// alphabet_tuple_like
25// ------------------------------------------------------------------
26
37template <typename t>
38concept alphabet_tuple_like = requires
39{
40 requires t::seqan3_alphabet_tuple_like;
41};
43
44// ------------------------------------------------------------------
45// required_types
46// ------------------------------------------------------------------
47
57template <typename t>
59{
62};
63
73template <typename t>
75 requires requires { typename t::seqan3_required_types; }
78{
80 using type = typename t::seqan3_required_types;
81};
82
86template <typename t>
88
89// ------------------------------------------------------------------
90// recursive_required_types
91// ------------------------------------------------------------------
92
93//TODO: This can be replaced with metaprogramming magic once a few more functions land in list_traits.
94
99template <typename t>
101{
104};
105
110template <typename t>
112 requires requires
113 {
114 typename t::seqan3_recursive_required_types;
115 }
118{
120 using type = typename t::seqan3_recursive_required_types;
121};
122
126template <typename t>
128
129// ------------------------------------------------------------------
130// Callable concept helpers for meta::invoke
131// ------------------------------------------------------------------
132
136template <typename T>
138{
140 template <typename type>
142};
143
147template <typename T>
149{
151 template <typename type>
153};
154
158template <typename T>
160{
162 template <typename type>
164};
165
169template <typename T>
171{
173 template <typename type>
175};
176
180template <typename T>
182{
184 template <typename type>
186};
187
188} // namespace seqan3::detail
189
190// ------------------------------------------------------------------
191// Forwards
192// ------------------------------------------------------------------
193
194namespace seqan3
195{
196
197// forward
198template <typename ...alternative_types>
200 requires (detail::writable_constexpr_alphabet<alternative_types> && ...) &&
201 (std::regular<alternative_types> && ...) &&
202 (sizeof...(alternative_types) >= 2)
204class alphabet_variant;
205
206template <typename derived_type,
207 typename ...component_types>
209 requires (detail::writable_constexpr_semialphabet<component_types> && ...) &&
210 (std::regular<component_types> && ...)
213
214} // namespace seqan3
Core alphabet concept and free function/type trait wrappers.
The CRTP base for a combined alphabet that contains multiple values of different alphabets at the sam...
Definition: alphabet_tuple_base.hpp:124
A combined alphabet that can hold values of either of its alternatives..
Definition: alphabet_variant.hpp:120
Provides concepts for core language types and relations that don't have concepts in C++20 (yet).
seqan3::alphabet_tuple_base and its derivates model this concept.
Provides lazy template instantiation traits.
The internal SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
The main SeqAn3 namespace.
Definition: cleanup.hpp:4
'Callable' helper class that is invokable by meta::invoke. Returns a std::true_type if the type is as...
Definition: detail.hpp:160
'Callable' helper class that is invokable by meta::invoke. Returns a std::true_type if the type is co...
Definition: detail.hpp:138
'Callable' helper class that is invokable by meta::invoke. Returns a std::true_type if the T is impli...
Definition: detail.hpp:149
typename t::seqan3_recursive_required_types type
The returned type.
Definition: detail.hpp:120
Like seqan3::detail::required_types, but recursive.
Definition: detail.hpp:101
typename recursive_required_types< t >::type recursive_required_types_t
Shortcut for seqan3::detail::recursive_required_types.
Definition: detail.hpp:127
typename t::seqan3_required_types type
The returned type.
Definition: detail.hpp:80
A seqan3::type_list with types that the given type depends on.
Definition: detail.hpp:59
typename required_types< t >::type required_types_t
A seqan3::type_list with types that the given type depends on. [Trait shortcut].
Definition: detail.hpp:87
'Callable' helper class that is invokable by meta::invoke. Returns a std::true_type if the type is we...
Definition: detail.hpp:171
'Callable' helper class that is invokable by meta::invoke. Returns a std::true_type if the type is co...
Definition: detail.hpp:182
Type that contains multiple types.
Definition: type_list.hpp:29
Provides seqan3::type_list.