SeqAn3 3.4.0-rc.4
The Modern C++ library for sequence analysis.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
char.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
23#pragma once
24
27
28namespace seqan3::detail
29{
33template <typename type>
34constexpr bool is_char_adaptation_v =
35 std::same_as<type, char> || std::same_as<type, char8_t> || std::same_as<type, char16_t>
36 || std::same_as<type, char32_t> || std::same_as<type, wchar_t>;
37} // namespace seqan3::detail
38
40{
41
48template <typename char_type>
49 requires detail::is_char_adaptation_v<char_type>
50struct alphabet<char_type>
51{
56 static constexpr auto alphabet_size =
57 detail::min_viable_uint_t<detail::size_in_values_v<char_type>>{detail::size_in_values_v<char_type>};
58
65 static constexpr char_type to_char(char_type const chr) noexcept
66 {
67 return chr;
68 }
69
76 static constexpr auto to_rank(char_type const chr) noexcept
77 {
78 return static_cast<detail::min_viable_uint_t<alphabet_size - 1>>(chr);
79 }
80
88 static constexpr char_type & assign_char_to(char_type const chr2, char_type & chr) noexcept
89 {
90 return chr = chr2;
91 }
92
100 static constexpr char_type & assign_rank_to(decltype(alphabet::to_rank(char_type{})) const rank,
101 char_type & chr) noexcept
102 {
103 return chr = rank;
104 }
105};
106
107} // namespace seqan3::custom
Core alphabet concept and free function/type trait wrappers.
constexpr auto alphabet_size
A type trait that holds the size of a (semi-)alphabet.
Definition alphabet/concept.hpp:834
Provides metaprogramming utilities for integer types.
A namespace for third party and standard library specialisations of SeqAn customisation points.
Definition char.hpp:40
static constexpr auto to_rank(char_type const chr) noexcept
Convert char to rank by casting to an unsigned integral type of same size.
Definition char.hpp:76
static constexpr char_type & assign_char_to(char_type const chr2, char_type &chr) noexcept
Assign a char to the char type (same as calling =).
Definition char.hpp:88
static constexpr char_type to_char(char_type const chr) noexcept
Converting char to char is no-op (it will just return the value you pass in).
Definition char.hpp:65
static constexpr char_type & assign_rank_to(decltype(alphabet::to_rank(char_type{})) const rank, char_type &chr) noexcept
Assigning a rank to a char is the same as assigning it a numeric value.
Definition char.hpp:100
A type that can be specialised to provide customisation point implementations so that third party typ...
Definition alphabet/concept.hpp:46
Hide me