52 template <genetic_code gc = genetic_code::CANONICAL, nucleot
ide_alphabet nucl_type>
55 if constexpr (std::same_as<nucl_type, dna4> || std::same_as<nucl_type, dna5> || std::same_as<nucl_type, dna15>)
58 return seqan3::detail::translation_table<nucl_type, gc>::VALUE[
to_rank(n1)][
to_rank(n2)][
to_rank(n3)];
60 else if constexpr (std::same_as<nucl_type, rna4> || std::same_as<nucl_type, rna5> || std::same_as<nucl_type, rna15>)
67 return seqan3::detail::translation_table<rna2dna_t, gc>::VALUE[
to_rank(n1)][
to_rank(n2)][
to_rank(n3)];
73 return seqan3::detail::translation_table<dna15, gc>::VALUE[
to_rank(
static_cast<dna15>(n1))]
98 template <genetic_code gc = genetic_code::CANONICAL,
typename tuple_type>
100 requires (std::tuple_size<tuple_type>::value == 3) &&
107 return translate_triplet(std::get<0>(input_tuple), std::get<1>(input_tuple), std::get<2>(input_tuple));
129 template <genetic_code gc = genetic_code::CANONICAL, std::ranges::input_range range_type>
135 auto n1 = std::ranges::begin(input_range);
139 assert(n1 != std::ranges::end(input_range));
140 assert(n2 != std::ranges::end(input_range));
141 assert(n3 != std::ranges::end(input_range));
165 template <genetic_code gc = genetic_code::CANONICAL, std::ranges::random_access_range rng_t>
171 assert(std::ranges::begin(input_range) != std::ranges::end(input_range));
172 assert(std::ranges::begin(input_range) + 1 != std::ranges::end(input_range));
173 assert(std::ranges::begin(input_range) + 2 != std::ranges::end(input_range));