SeqAn3 3.1.0
The Modern C++ library for sequence analysis.
char.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
26#pragma once
27
30
31namespace seqan3::detail
32{
36template <typename type>
37constexpr bool is_char_adaptation_v = std::same_as<type, char> ||
38 std::same_as<type, char16_t> ||
39 std::same_as<type, char32_t> ||
40 std::same_as<type, wchar_t>;
41} // namespace seqan3::detail
42
44{
45
52template <typename char_type>
54 requires detail::is_char_adaptation_v<char_type>
56struct alphabet<char_type>
57{
62 static constexpr auto alphabet_size =
63 detail::min_viable_uint_t<detail::size_in_values_v<char_type>>{detail::size_in_values_v<char_type>};
64
71 static constexpr char_type to_char(char_type const chr) noexcept
72 {
73 return chr;
74 }
75
82 static constexpr auto to_rank(char_type const chr) noexcept
83 {
84 return static_cast<detail::min_viable_uint_t<alphabet_size - 1>>(chr);
85 }
86
94 static constexpr char_type & assign_char_to(char_type const chr2, char_type & chr) noexcept
95 {
96 return chr = chr2;
97 }
98
106 static constexpr char_type & assign_rank_to(decltype(alphabet::to_rank(char_type{})) const rank,
107 char_type & chr) noexcept
108 {
109 return chr = rank;
110 }
111};
112
113} // 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: concept.hpp:861
constexpr auto to_rank
Return the rank representation of a (semi-)alphabet object.
Definition: concept.hpp:155
Provides metaprogramming utilities for integer types.
A namespace for third party and standard library specialisations of SeqAn customisation points.
Definition: char.hpp:44
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:82
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:94
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:71
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:106
A type that can be specialised to provide customisation point implementations so that third party typ...
Definition: concept.hpp:49