SeqAn3  3.0.3
The Modern C++ library for sequence analysis.
policy_scoring_scheme.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 
13 #pragma once
14 
18 
19 namespace seqan3::detail
20 {
21 
33 template <typename alignment_configuration_t, typename scoring_scheme_t>
34 class policy_scoring_scheme
35 {
36 protected:
38  scoring_scheme_t scoring_scheme{};
39 
43  policy_scoring_scheme() = default;
44  policy_scoring_scheme(policy_scoring_scheme const &) = default;
45  policy_scoring_scheme(policy_scoring_scheme &&) = default;
46  policy_scoring_scheme & operator=(policy_scoring_scheme const &) = default;
47  policy_scoring_scheme & operator=(policy_scoring_scheme &&) = default;
48  ~policy_scoring_scheme() = default;
49 
53  explicit policy_scoring_scheme(alignment_configuration_t const & config) :
54  scoring_scheme{seqan3::get<align_cfg::scoring_scheme>(config).scheme}
55  {}
57 
73  template <typename alphabet_t>
75  requires simd_concept<std::remove_cvref_t<alphabet_t>>
77  auto scoring_scheme_profile_column(alphabet_t && alphabet) const noexcept
78  {
79  return scoring_scheme.make_score_profile(std::forward<alphabet_t>(alphabet));
80  }
81 
83  template <semialphabet alphabet_t>
84  alphabet_t scoring_scheme_profile_column(alphabet_t && alphabet) const noexcept
85  {
86  return std::forward<alphabet_t>(alphabet);
87  }
88 };
89 
90 } // namespace seqan3::detail
Provides seqan3::align_cfg::scoring_scheme.
Provides seqan3::configuration and utility functions.
The generic alphabet concept that covers most data types used in ranges.
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
constexpr auto const & get(configuration< configs_t... > const &config) noexcept
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: configuration.hpp:429
Provides seqan3::simd::simd_concept.