18namespace seqan3::detail
31template <
typename alignment_configuration_t>
32 requires seqan3::detail::is_type_specialisation_of_v<alignment_configuration_t, configuration>
33class policy_alignment_result_builder
37 using traits_type = alignment_configuration_traits<alignment_configuration_t>;
39 using result_type =
typename traits_type::alignment_result_type;
41 static_assert(!std::same_as<result_type, empty_type>,
"The alignment result type was not configured.");
46 policy_alignment_result_builder() =
default;
47 policy_alignment_result_builder(policy_alignment_result_builder
const &) =
default;
48 policy_alignment_result_builder(policy_alignment_result_builder &&) =
default;
49 policy_alignment_result_builder & operator=(policy_alignment_result_builder
const &) =
default;
50 policy_alignment_result_builder & operator=(policy_alignment_result_builder &&) =
default;
51 ~policy_alignment_result_builder() =
default;
56 policy_alignment_result_builder(alignment_configuration_t
const & SEQAN3_DOXYGEN_ONLY(config))
84 template <
typename sequence_pair_t,
87 typename matrix_coordinate_t,
88 typename alignment_matrix_t,
90 requires std::invocable<callback_t, result_type>
91 void make_result_and_invoke([[maybe_unused]] sequence_pair_t && sequence_pair,
92 [[maybe_unused]] index_t &&
id,
93 [[maybe_unused]] score_t score,
94 [[maybe_unused]] matrix_coordinate_t end_positions,
95 [[maybe_unused]] alignment_matrix_t
const & alignment_matrix,
96 callback_t && callback)
101 result_type result{};
103 if constexpr (traits_type::output_sequence1_id)
104 result.data.sequence1_id =
id;
106 if constexpr (traits_type::output_sequence2_id)
107 result.data.sequence2_id =
id;
109 if constexpr (traits_type::compute_score)
111 static_assert(!std::same_as<
decltype(result.data.score), invalid_t>,
112 "Invalid configuration. Expected result with score!");
113 result.data.score = std::move(score);
116 if constexpr (traits_type::compute_end_positions)
118 static_assert(!std::same_as<
decltype(result.data.end_positions), invalid_t>,
119 "Invalid configuration. Expected result with end positions!");
121 result.data.end_positions.first = end_positions.col;
122 result.data.end_positions.second = end_positions.row;
125 if constexpr (traits_type::requires_trace_information)
127 aligned_sequence_builder builder{get<0>(sequence_pair), get<1>(sequence_pair)};
128 auto aligned_sequence_result = builder(alignment_matrix.trace_path(end_positions));
130 if constexpr (traits_type::compute_begin_positions)
132 result.data.begin_positions.first = aligned_sequence_result.first_sequence_slice_positions.first;
133 result.data.begin_positions.second = aligned_sequence_result.second_sequence_slice_positions.first;
137 callback(std::move(result));
Provides seqan3::detail::aligned_sequence_builder.
Provides helper type traits for the configuration and execution of the alignment algorithm.
Provides seqan3::configuration and utility functions.
Provides seqan3::detail::empty_type.
Provides type traits for working with templates.