SeqAn3  3.0.1
The Modern C++ library for sequence analysis.
convert.hpp
1 // -----------------------------------------------------------------------------------------------------
2 // Copyright (c) 2006-2020, Knut Reinert & Freie Universität Berlin
3 // Copyright (c) 2016-2020, 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 
15 #pragma once
16 
17 #include <array>
18 
20 
21 // ============================================================================
22 // conversion to/from char/rank types
23 // ============================================================================
24 
25 namespace seqan3::detail
26 {
27 
34 template <alphabet out_t, alphabet in_t>
35 constexpr std::array<out_t, alphabet_size<in_t>> convert_through_char_representation
36 {
37  [] () constexpr
38  {
40  // for (decltype(alphabet_size<in_t>) i = 0; ...) causes indefinite compilation :(
41  for (auto i = decltype(alphabet_size<in_t>){0}; i < alphabet_size<in_t>; ++i)
42  assign_char_to(to_char(assign_rank_to(i, in_t{})), ret[i]);
43  return ret;
44  }()
45 };
46 
47 } // namespace seqan3::detail
seqan3::assign_rank_to
constexpr auto assign_rank_to
Assign a rank to an alphabet object.
Definition: concept.hpp:238
seqan3::to_char
constexpr auto to_char
Return the char representation of an alphabet object.
Definition: concept.hpp:320
array
seqan3::assign_char_to
constexpr auto assign_char_to
Assign a character to an alphabet object.
Definition: concept.hpp:416
concept.hpp
Core alphabet concept and free function/type trait wrappers.