SeqAn3 3.4.0-rc.1
The Modern C++ library for sequence analysis.
Loading...
Searching...
No Matches
alphabet/composite/detail.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2006-2024 Knut Reinert & Freie Universität Berlin
2// SPDX-FileCopyrightText: 2016-2024 Knut Reinert & MPI für molekulare Genetik
3// SPDX-License-Identifier: BSD-3-Clause
4
10#pragma once
11
17
18namespace seqan3::detail
19{
20
21// ------------------------------------------------------------------
22// alphabet_tuple_like
23// ------------------------------------------------------------------
24
35template <typename t>
36concept alphabet_tuple_like = requires { requires t::seqan3_alphabet_tuple_like; };
38
39// ------------------------------------------------------------------
40// required_types
41// ------------------------------------------------------------------
42
52template <typename t>
53struct required_types
54{
56 using type = type_list<>;
57};
58
68template <typename t>
69 requires requires { typename t::seqan3_required_types; }
70struct required_types<t>
71{
73 using type = typename t::seqan3_required_types;
74};
75
79template <typename t>
80using required_types_t = typename required_types<t>::type;
81
82// ------------------------------------------------------------------
83// recursive_required_types
84// ------------------------------------------------------------------
85
86//TODO: This can be replaced with metaprogramming magic once a few more functions land in list_traits.
87
92template <typename t>
93struct recursive_required_types
94{
96 using type = type_list<>;
97};
98
103template <typename t>
104 requires requires { typename t::seqan3_recursive_required_types; }
105struct recursive_required_types<t>
106{
108 using type = typename t::seqan3_recursive_required_types;
109};
110
114template <typename t>
115using recursive_required_types_t = typename recursive_required_types<t>::type;
116
117// ------------------------------------------------------------------
118// Callable concept helpers for meta::invoke
119// ------------------------------------------------------------------
120
125template <typename T>
126struct constructible_from
127{
129 template <typename type>
131};
132
137template <typename T>
138struct implicitly_convertible_from
139{
141 template <typename type>
143};
144
149template <typename T>
150struct assignable_from
151{
153 template <typename type>
155};
156
161template <typename T>
162struct weakly_equality_comparable_with_
163{
165 template <typename type>
167};
168
173template <typename T>
174struct weakly_ordered_with_
175{
177 template <typename type>
179};
180
181// ------------------------------------------------------------------
182// Concept traits helper
183// ------------------------------------------------------------------
184
188template <typename lhs_t, typename rhs_t>
189struct weakly_equality_comparable_with_trait :
190 std::integral_constant<bool, weakly_equality_comparable_with<lhs_t, rhs_t>>
191{};
192
196template <typename lhs_t, typename rhs_t>
197struct weakly_ordered_with_trait : std::integral_constant<bool, weakly_ordered_with<lhs_t, rhs_t>>
198{};
199
200} // namespace seqan3::detail
201
202// ------------------------------------------------------------------
203// Forwards
204// ------------------------------------------------------------------
205
206namespace seqan3
207{
208
209// forward
210template <typename... alternative_types>
211 requires (detail::writable_constexpr_alphabet<alternative_types> && ...) && (std::regular<alternative_types> && ...)
212 && (sizeof...(alternative_types) >= 2)
213class alphabet_variant;
214
215template <typename derived_type, typename... component_types>
216 requires (detail::writable_constexpr_semialphabet<component_types> && ...) && (std::regular<component_types> && ...)
217class alphabet_tuple_base;
218
219} // namespace seqan3
Core alphabet concept and free function/type trait wrappers.
Provides alphabet helper concepts.
T invoke(T... args)
Provides lazy template instantiation traits.
The main SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26
Provides seqan3::type_list.
Provides concepts that do not have equivalents in C++20.
Hide me