34 template <
typename derived_t,
typename edit_traits>
41 static_assert(edit_traits::use_max_errors,
"This policy assumes that edit_traits::use_max_errors is true.");
85 max_errors = -get<align_cfg::min_score>(self->config).score;
89 if (std::ranges::empty(self->query))
92 self->score_mask = 0u;
104 self->score_mask =
word_type{1u} << (local_max_errors %
self->word_size);
106 self->_score = local_max_errors + 1u;
113 return (self->score_mask == this->last_score_mask) && (this->
last_block ==
self->vp.size() - 1u);
120 self->score_mask >>= 1u;
121 if (self->score_mask != 0u)
124 if constexpr (edit_traits::is_global)
132 self->score_mask =
word_type{1u} << (edit_traits::word_size - 1u);
140 self->score_mask <<= 1u;
141 if (self->score_mask)
144 self->score_mask = 1u;
161 assert(edit_traits::is_global);
164 return !edit_traits::compute_matrix;
172 if constexpr(edit_traits::is_semi_global)
173 self->update_best_score();
175 return self->on_hit();
202 template <
typename derived_t,
typename edit_traits>
209 static_assert(edit_traits::is_global || edit_traits::is_semi_global,
210 "This policy assumes that edit_traits::is_global or edit_traits::is_semi_global is true.");
263 if constexpr(edit_traits::use_max_errors)
303 static_assert(edit_traits::compute_score,
"score() can only be computed if you specify the result type within "
304 "your alignment config.");
305 if (!self->is_valid())
316 static_assert(edit_traits::compute_end_positions,
"end_positions() can only be computed if you specify the "
317 "result type within your alignment config.");
318 if (!self->is_valid())
319 return self->invalid_coordinate();
323 return {first, second};
329 template <
typename derived_t,
typename edit_traits>
334 static_assert(edit_traits::is_semi_global,
"This policy assumes that edit_traits::is_semi_global is true.");
392 if constexpr(edit_traits::use_max_errors)
394 assert(std::ranges::empty(self->query) || self->is_last_active_cell_within_last_row());
406 size_t offset = std::ranges::empty(self->database) ? 0u : 1u;
415 template <
typename derived_t,
typename edit_traits>
422 static_assert(edit_traits::compute_score_matrix,
423 "This policy assumes that edit_traits::compute_score_matrix is true.");
484 static_assert(edit_traits::compute_score_matrix,
"score_matrix() can only be computed if you specify the "
485 "result type within your alignment config.");
494 template <
typename derived_t,
typename edit_traits>
501 static_assert(edit_traits::compute_trace_matrix,
502 "This policy assumes that edit_traits::compute_trace_matrix is true.");
571 static_assert(edit_traits::compute_trace_matrix,
"trace_matrix() can only be computed if you specify the "
572 "result type within your alignment config.");
581 static_assert(edit_traits::compute_begin_positions,
"begin_positions() can only be computed if you specify the "
582 "result type within your alignment config.");
583 if (!self->is_valid())
584 return self->invalid_coordinate();
587 auto trace_path =
self->trace_matrix().trace_path(
back);
588 auto trace_path_it = std::ranges::begin(trace_path);
589 std::ranges::advance(trace_path_it, std::ranges::end(trace_path));
590 matrix_coordinate coordinate = trace_path_it.coordinate();
601 static_assert(edit_traits::compute_sequence_alignment,
"alignment() can only be computed if you specify the "
602 "result type within your alignment config.");
604 if (!self->is_valid())
605 return alignment_t{};
609 auto trace_path =
self->trace_matrix().trace_path(
back);
610 return builder(trace_path).alignment;
618 template <
typename value_t>
640 template <
typename other_value_t>
642 requires std::convertible_to<other_value_t, value_t>
646 get() = std::forward<other_value_t>(u);
652 value_t &
get() const noexcept
654 assert(
ptr !=
nullptr);
659 operator value_t & ()
const noexcept
680 template <std::ranges::viewable_range database_t,
681 std::ranges::viewable_range query_t,
682 typename align_config_t,
683 typename edit_traits>
688 edit_traits::use_max_errors,
689 edit_distance_unbanded_max_errors_policy,
691 edit_distance_unbanded<database_t, query_t, align_config_t, edit_traits>>,
693 edit_traits::is_global,
694 edit_distance_unbanded_global_policy,
696 edit_distance_unbanded<database_t, query_t, align_config_t, edit_traits>>,
698 edit_traits::is_semi_global,
699 edit_distance_unbanded_semi_global_policy,
701 edit_distance_unbanded<database_t, query_t, align_config_t, edit_traits>>,
703 edit_traits::compute_score_matrix,
704 edit_distance_unbanded_score_matrix_policy,
706 edit_distance_unbanded<database_t, query_t, align_config_t, edit_traits>>,
708 edit_traits::compute_trace_matrix,
709 edit_distance_unbanded_trace_matrix_policy,
711 edit_distance_unbanded<database_t, query_t, align_config_t, edit_traits>>
715 using typename edit_traits::word_type;
716 using typename edit_traits::score_type;
717 using typename edit_traits::database_type;
718 using typename edit_traits::query_type;
719 using typename edit_traits::align_config_type;
720 using edit_traits::word_size;
724 template <
typename other_derived_t,
typename other_edit_traits>
727 template <
typename other_derived_t,
typename other_edit_traits>
730 template <
typename other_derived_t,
typename other_edit_traits>
733 template <
typename other_derived_t,
typename other_edit_traits>
736 template <
typename other_derived_t,
typename other_edit_traits>
739 using typename edit_traits::database_iterator;
740 using typename edit_traits::query_alphabet_type;
741 using typename edit_traits::alignment_result_type;
742 using edit_traits::use_max_errors;
743 using edit_traits::is_semi_global;
744 using edit_traits::is_global;
745 using edit_traits::compute_score;
746 using edit_traits::compute_end_positions;
747 using edit_traits::compute_begin_positions;
748 using edit_traits::compute_sequence_alignment;
749 using edit_traits::compute_score_matrix;
750 using edit_traits::compute_trace_matrix;
751 using edit_traits::compute_matrix;
752 using typename edit_traits::score_matrix_type;
753 using typename edit_traits::trace_matrix_type;
870 align_config_t _config,
871 edit_traits
const & SEQAN3_DOXYGEN_ONLY(_traits)) :
873 query{
std::forward<query_t>(_query)},
874 config{
std::forward<align_config_t>(_config)},
879 static constexpr
size_t alphabet_size_ = alphabet_size<query_alphabet_type>;
911 template <
bool with_carry>
915 assert(state.carry_d0 <= 1u);
916 assert(state.carry_hp <= 1u);
917 assert(state.carry_hn <= 1u);
919 x = state.b | state.vn;
920 t = state.vp + (x & state.vp) + state.carry_d0;
922 state.d0 = (t ^ state.vp) | x;
923 state.hn = state.vp & state.d0;
924 state.hp = state.vn | ~(state.vp | state.d0);
926 if constexpr(with_carry)
927 state.carry_d0 = (state.carry_d0 != 0u) ? t <= state.vp : t < state.vp;
929 x = (state.hp << 1u) | state.carry_hp;
930 state.vn = x & state.d0;
931 state.vp = (state.hn << 1u) | ~(x | state.d0) | state.carry_hn;
933 if constexpr(with_carry)
935 state.carry_hp = state.hp >> (
word_size - 1u);
936 state.carry_hn = state.hn >> (
word_size - 1u);
941 template <
bool with_carry>
951 state.b =
bit_masks[block_offset + current_block];
953 compute_step<with_carry>(state);
955 state.db = ~(state.b ^ state.d0);
983 assert(std::ranges::empty(
query));
985 bool abort_computation =
false;
996 abort_computation =
on_hit();
999 if (abort_computation)
1030 else if (
vp.
size() == 1u)
1044 template <
typename callback_t>
1045 void operator()([[maybe_unused]]
size_t const idx, callback_t && callback)
1048 using result_value_type =
typename alignment_result_value_type_accessor<alignment_result_type>::type;
1072 if constexpr (traits_type::output_sequence1_id)
1073 res_vt.sequence1_id = idx;
1075 if constexpr (traits_type::output_sequence2_id)
1076 res_vt.sequence2_id = idx;
1078 if constexpr (traits_type::compute_score)
1079 res_vt.score = this->
score().
value_or(matrix_inf<score_type>);
1081 if constexpr (traits_type::compute_sequence_alignment)
1086 auto trace_res = builder(this->
trace_matrix().trace_path(cached_end_positions));
1087 res_vt.alignment =
std::move(trace_res.alignment);
1088 cached_begin_positions.first = trace_res.first_sequence_slice_positions.first;
1089 cached_begin_positions.second = trace_res.second_sequence_slice_positions.first;
1093 if constexpr (traits_type::compute_end_positions)
1094 res_vt.end_positions =
std::move(cached_end_positions);
1096 if constexpr (traits_type::compute_begin_positions)
1097 res_vt.begin_positions =
std::move(cached_begin_positions);
1103 template <
typename database_t,
typename query_t,
typename align_config_t,
typename traits_t>
1106 bool abort_computation =
false;
1109 while (database_it != database_it_end)
1114 compute_kernel<false>(state, block_offset, 0u);
1115 advance_score(state.hp, state.hn, score_mask);
1118 if constexpr(is_semi_global && !use_max_errors)
1119 this->update_best_score();
1122 if constexpr(use_max_errors)
1123 abort_computation = this->update_last_active_cell();
1127 if (abort_computation)
1134 template <
typename database_t,
typename query_t,
typename align_config_t,
typename traits_t>
1137 bool abort_computation =
false;
1139 while (database_it != database_it_end)
1144 size_t block_count = vp.size();
1145 if constexpr(use_max_errors)
1146 block_count = this->last_block + 1;
1149 for (
size_t current_block = 0u; current_block < block_count; current_block++)
1150 compute_kernel<true>(state, block_offset, current_block);
1152 advance_score(state.hp, state.hn, score_mask);
1155 if constexpr(is_semi_global && !use_max_errors)
1156 this->update_best_score();
1158 if constexpr(use_max_errors)
1161 bool additional_block = score_mask >> (word_size - 1u);
1162 bool reached_last_block = this->last_block + 1u == vp.size();
1164 if (reached_last_block)
1165 additional_block =
false;
1167 if (additional_block)
1169 size_t const current_block = this->last_block + 1u;
1171 vp[current_block] = vp0;
1172 vn[current_block] = vn0;
1173 compute_kernel<false>(state, block_offset, current_block);
1177 abort_computation = this->update_last_active_cell();
1183 if (abort_computation)
1196 template <
typename database_t,
typename query_t,
typename config_t,
typename traits_t>
Provides seqan3::detail::alignment_coordinate.
Provides seqan3::alignment_result.
Represents the begin/end of the pairwise alignment in the respective sequences.
Definition: alignment_coordinate.hpp:341
Builds the alignment for a given pair of sequences and the respective trace.
Definition: aligned_sequence_builder.hpp:118
The underlying data structure of seqan3::detail::edit_distance_unbanded that represents the score mat...
Definition: edit_distance_score_matrix_full.hpp:33
static size_t max_rows(word_type const score_mask, unsigned const last_block, score_type const score, score_type const max_errors) noexcept
Computes the number of max rows in the current column.
Definition: edit_distance_score_matrix_full.hpp:109
void add_column(std::vector< word_type > vp, std::vector< word_type > vn)
Adds a column to the score matrix.
Definition: edit_distance_score_matrix_full.hpp:201
void reserve(size_t const new_capacity)
Increase the capacity of the columns to a value that is greater or equal to new_capacity.
Definition: edit_distance_score_matrix_full.hpp:95
The underlying data structure of seqan3::detail::edit_distance_unbanded that represents the trace mat...
Definition: edit_distance_trace_matrix_full.hpp:33
void reserve(size_t const new_capacity)
Increase the capacity of the columns to a value that's greater or equal to new_capacity.
Definition: edit_distance_trace_matrix_full.hpp:92
void add_column(std::vector< word_type > left, std::vector< word_type > diagonal, std::vector< word_type > up)
Adds a column to the trace matrix.
Definition: edit_distance_trace_matrix_full.hpp:196
Only available when default_edit_distance_trait_type::is_global is true.
Definition: edit_distance_unbanded.hpp:207
bool is_valid() const noexcept
Returns true if the computation produced a valid alignment.
Definition: edit_distance_unbanded.hpp:256
friend derived_t
Befriends the derived type.
Definition: edit_distance_unbanded.hpp:210
size_t end_positions_first() const noexcept
Returns the first component of the end_positions.
Definition: edit_distance_unbanded.hpp:286
void update_best_score() noexcept
Update the current best known score if the current score is better.
Definition: edit_distance_unbanded.hpp:279
alignment_coordinate end_positions() const noexcept
Return the end position of the alignment Only available if default_edit_distance_trait_type::compute_...
Definition: edit_distance_unbanded.hpp:313
alignment_coordinate invalid_coordinate() const noexcept
Returns an invalid_coordinate for this alignment.
Definition: edit_distance_unbanded.hpp:272
void score_init() noexcept
Initialises global policy.
Definition: edit_distance_unbanded.hpp:249
score_type _best_score
The best score of the alignment in the last row (if is_semi_global = true) or the last entry in the s...
Definition: edit_distance_unbanded.hpp:241
std::optional< score_type > score() const noexcept
Return the score of the alignment. Only available if default_edit_distance_trait_type::compute_score ...
Definition: edit_distance_unbanded.hpp:300
edit_distance_unbanded_global_policy() noexcept=default
Defaulted.
Only available when default_edit_distance_trait_type::use_max_errors is true.
Definition: edit_distance_unbanded.hpp:39
friend derived_t
Befriends the derived type.
Definition: edit_distance_unbanded.hpp:41
void next_last_active_cell() noexcept
Increment the last active cell position.
Definition: edit_distance_unbanded.hpp:137
bool is_last_active_cell_within_last_row() const noexcept
Returns true if the current active cell is within the last row.
Definition: edit_distance_unbanded.hpp:110
bool update_last_active_cell() noexcept
Use the ukkonen trick and update the last active cell.
Definition: edit_distance_unbanded.hpp:151
static size_t max_rows(word_type const score_mask, unsigned const last_block, score_type const score, score_type const max_errors) noexcept
Computes the number of max rows in the current column.
Definition: edit_distance_unbanded.hpp:188
word_type last_score_mask
A mask with a bit set on the position of the last row.
Definition: edit_distance_unbanded.hpp:73
score_type max_errors
Which score value is considered as a hit?
Definition: edit_distance_unbanded.hpp:69
bool prev_last_active_cell() noexcept
Decrement the last active cell position.
Definition: edit_distance_unbanded.hpp:117
void max_errors_init(size_t block_count) noexcept
Initialises max_errors policy.
Definition: edit_distance_unbanded.hpp:81
size_t last_block
The block containing the last active cell.
Definition: edit_distance_unbanded.hpp:71
edit_distance_unbanded_max_errors_policy() noexcept=default
Defaulted.
Only available when default_edit_distance_trait_type::compute_score_matrix is true.
Definition: edit_distance_unbanded.hpp:420
score_matrix_type const & score_matrix() const noexcept
Return the score matrix of the alignment. Only available if default_edit_distance_trait_type::compute...
Definition: edit_distance_unbanded.hpp:482
edit_distance_unbanded_score_matrix_policy() noexcept=default
Defaulted.
friend derived_t
Befriends the derived type.
Definition: edit_distance_unbanded.hpp:423
score_matrix_type _score_matrix
The score matrix of the edit distance alignment.
Definition: edit_distance_unbanded.hpp:450
void score_matrix_init()
Initialises score-matrix policy.
Definition: edit_distance_unbanded.hpp:465
Only available when default_edit_distance_trait_type::is_semi_global is true.
Definition: edit_distance_unbanded.hpp:332
friend derived_t
Befriends the derived type.
Definition: edit_distance_unbanded.hpp:334
size_t end_positions_first() const noexcept
Returns the first component of the end_positions.
Definition: edit_distance_unbanded.hpp:402
void score_init() noexcept
Initialises semi-global policy.
Definition: edit_distance_unbanded.hpp:380
edit_distance_unbanded_semi_global_policy() noexcept=default
Defaulted.
void update_best_score() noexcept
Update the current best known score if the current score is better.
Definition: edit_distance_unbanded.hpp:388
database_iterator _best_score_col
In which column the best score of the alignment is located. Will only be tracked if is_semi_global is...
Definition: edit_distance_unbanded.hpp:372
Only available when default_edit_distance_trait_type::compute_trace_matrix is true.
Definition: edit_distance_unbanded.hpp:499
alignment_coordinate begin_positions() const noexcept
Return the begin position of the alignment. Only available if default_edit_distance_trait_type::compu...
Definition: edit_distance_unbanded.hpp:578
std::vector< word_type > db
The machine word which stores if trace_directions::diagonal is true.
Definition: edit_distance_unbanded.hpp:533
trace_matrix_type const & trace_matrix() const noexcept
Return the trace matrix of the alignment.
Definition: edit_distance_unbanded.hpp:569
void trace_matrix_init(size_t block_count)
Initialises trace-matrix policy.
Definition: edit_distance_unbanded.hpp:551
edit_distance_unbanded_trace_matrix_policy() noexcept=default
Defaulted.
trace_matrix_type _trace_matrix
The trace matrix of the edit distance alignment.
Definition: edit_distance_unbanded.hpp:536
auto alignment() const noexcept
Return the alignment, i.e. the actual base pair matching. Only available if default_edit_distance_tra...
Definition: edit_distance_unbanded.hpp:596
friend derived_t
Befriends the derived type.
Definition: edit_distance_unbanded.hpp:502
std::vector< word_type > hp
The machine word which stores the positive horizontal differences.
Definition: edit_distance_unbanded.hpp:531
This calculates an alignment using the edit distance and without a band.
Definition: edit_distance_unbanded.hpp:713
database_iterator database_it
The current position in the database.
Definition: edit_distance_unbanded.hpp:793
void operator()([[maybe_unused]] size_t const idx, callback_t &&callback)
Generic invocable interface.
Definition: edit_distance_unbanded.hpp:1045
void add_state()
Add a computation step.
Definition: edit_distance_unbanded.hpp:831
edit_distance_unbanded & operator=(edit_distance_unbanded &&)=default
Defaulted.
database_iterator database_it_end
The end position of the database.
Definition: edit_distance_unbanded.hpp:795
bool small_patterns()
Pattern is small enough that it fits into one machine word. Use faster computation with less overhead...
Definition: edit_distance_unbanded.hpp:1104
edit_distance_unbanded(edit_distance_unbanded &&)=default
Defaulted.
void compute()
Compute the alignment.
Definition: edit_distance_unbanded.hpp:1005
word_type score_mask
The mask with a bit set at the position where the score change.
Definition: edit_distance_unbanded.hpp:779
void compute_empty_query_sequence()
Special case if query sequence is empty.
Definition: edit_distance_unbanded.hpp:981
edit_distance_unbanded()=delete
The class template parameter may resolve to an lvalue reference which prohibits default constructibil...
query_t query
The vertical/query sequence.
Definition: edit_distance_unbanded.hpp:758
database_t database
The horizontal/database sequence.
Definition: edit_distance_unbanded.hpp:756
edit_distance_unbanded(database_t &&database, query_t &&query, config_t config, traits_t) -> edit_distance_unbanded< database_t, query_t, config_t, traits_t >
Deduce the type from the provided arguments.
static void compute_step(compute_state &state) noexcept
A single compute step in the current column.
Definition: edit_distance_unbanded.hpp:912
edit_distance_unbanded & operator=(edit_distance_unbanded const &)=default
Defaulted.
bool large_patterns()
Pattern is larger than one machine word. Use overflow aware computation.
Definition: edit_distance_unbanded.hpp:1135
edit_distance_unbanded(database_t _database, query_t _query, align_config_t _config, edit_traits const &_traits)
Constructor.
Definition: edit_distance_unbanded.hpp:868
static constexpr word_type vp0
How to pre-initialise vp.
Definition: edit_distance_unbanded.hpp:767
static constexpr word_type vn0
How to pre-initialise vn.
Definition: edit_distance_unbanded.hpp:769
~edit_distance_unbanded()=default
Defaulted.
static constexpr word_type hp0
How to pre-initialise hp.
Definition: edit_distance_unbanded.hpp:763
static constexpr word_type hn0
How to pre-initialise hn.
Definition: edit_distance_unbanded.hpp:765
edit_distance_unbanded(edit_distance_unbanded const &)=default
Defaulted.
std::vector< word_type > vp
The machine word which stores the positive vertical differences.
Definition: edit_distance_unbanded.hpp:781
void compute_kernel(compute_state &state, size_t const block_offset, size_t const current_block) noexcept
A single compute step in the current column at a given position.
Definition: edit_distance_unbanded.hpp:942
std::vector< word_type > bit_masks
The machine words which translate a letter of the query into a bit mask.
Definition: edit_distance_unbanded.hpp:790
std::vector< word_type > vn
The machine word which stores the negative vertical differences.
Definition: edit_distance_unbanded.hpp:783
void advance_score(word_type P, word_type N, word_type mask) noexcept
Increase or decrease the score.
Definition: edit_distance_unbanded.hpp:959
score_type _score
The score of the current column.
Definition: edit_distance_unbanded.hpp:772
align_config_t config
The configuration.
Definition: edit_distance_unbanded.hpp:760
bool on_hit() noexcept
Will be called if a hit was found (e.g., score <= max_errors).
Definition: edit_distance_unbanded.hpp:968
The same as value_t & but it is default constructible and is re-assignable.
Definition: edit_distance_unbanded.hpp:620
value_t * ptr
The stored reference.
Definition: edit_distance_unbanded.hpp:666
value_t & get() const noexcept
Get the stored reference.
Definition: edit_distance_unbanded.hpp:652
proxy_reference & operator=(other_value_t &&u) noexcept
Assign a value to the stored reference.
Definition: edit_distance_unbanded.hpp:644
proxy_reference(value_t &&)=delete
Deleted.
proxy_reference() noexcept=default
Defaulted.
Implementation of a masked alphabet to be used for tuple composites.
Definition: mask.hpp:35
Provides seqan3::configuration and utility functions.
Forwards for seqan3::edit_distance_unbanded related types.
Provides seqan3::detail::edit_distance_score_matrix_full.
Provides seqan3::detail::edit_distance_trace_matrix_full.
constexpr auto to_rank
Return the rank representation of a (semi-)alphabet object.
Definition: concept.hpp:146
@ offset
Sequence (seqan3::field::seq) relative start position (0-based), unsigned value.
typename decltype(detail::back(list_t{}))::type back
Return the last type from the type list.
Definition: traits.hpp:264
constexpr size_t size
The size of a type pack.
Definition: traits.hpp:150
auto const move
A view that turns lvalue-references into rvalue-references.
Definition: move.hpp:70
Provides seqan3::detail::matrix.
The internal SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
invoke_deferred_crtp_base< deferred_crtp_base< selector< enable_policy, policy_t, empty_state >::template select, edit_traits >, derived_t > edit_distance_base
A base class for edit_distance_unbanded.
Definition: edit_distance_fwd.hpp:131
SeqAn specific customisations in the standard namespace.
Adaptations of concepts from the Ranges TS.
A traits type for the alignment algorithm that exposes static information stored within the alignment...
Definition: type_traits.hpp:87
A strong type for designated initialisation of the column index of a matrix.
Definition: matrix_coordinate.hpp:34
typename alignment_traits_type::original_score_type score_type
The type of the score.
Definition: edit_distance_fwd.hpp:74
word_t word_type
The type of one machine word.
Definition: edit_distance_fwd.hpp:70
static constexpr bool is_global
Whether the alignment is a global alignment or not.
Definition: edit_distance_fwd.hpp:99
std::ranges::iterator_t< database_type > database_iterator
The type of an iterator of the database sequence.
Definition: edit_distance_fwd.hpp:85
static constexpr uint8_t word_size
The size of one machine word.
Definition: edit_distance_fwd.hpp:81
static constexpr bool compute_trace_matrix
Whether the alignment configuration indicates to compute and/or store the trace matrix.
Definition: edit_distance_fwd.hpp:113
static constexpr bool use_max_errors
When true the computation will use the ukkonen trick with the last active cell and bounds the error t...
Definition: edit_distance_fwd.hpp:95
static constexpr bool compute_score_matrix
Whether the alignment configuration indicates to compute and/or store the score matrix.
Definition: edit_distance_fwd.hpp:111
static constexpr bool compute_matrix
Whether the alignment configuration indicates to compute and/or store the score or trace matrix.
Definition: edit_distance_fwd.hpp:115
typename alignment_traits_type::alignment_result_type alignment_result_type
The alignment result type generated by the algorithm.
Definition: edit_distance_fwd.hpp:89
static constexpr bool compute_end_positions
Whether the alignment configuration indicates to compute and/or store the end positions.
Definition: edit_distance_fwd.hpp:108
typename alignment_result_value_type_accessor< alignment_result_type >::type result_value_type
The alignment result value type.
Definition: edit_distance_fwd.hpp:91
static constexpr bool compute_sequence_alignment
Whether the alignment configuration indicates to compute and/or store the alignment of the sequences.
Definition: edit_distance_fwd.hpp:103
static constexpr bool compute_begin_positions
Whether the alignment configuration indicates to compute and/or store the begin positions.
Definition: edit_distance_fwd.hpp:105
The internal state needed to compute the trace matrix.
Definition: edit_distance_unbanded.hpp:799
proxy_reference< word_type > db
The machine word which stores if trace_directions::diagonal is true.
Definition: edit_distance_unbanded.hpp:801
The internal state needed to compute the alignment.
Definition: edit_distance_unbanded.hpp:806
word_type b
The machine word which stores wether the current character matches.
Definition: edit_distance_unbanded.hpp:811
word_type d0
The machine word which stores the diagonal differences.
Definition: edit_distance_unbanded.hpp:813
proxy_reference< word_type > vn
The machine word which stores the negative vertical differences.
Definition: edit_distance_unbanded.hpp:821
word_type carry_hp
The carry-bit of hp.
Definition: edit_distance_unbanded.hpp:825
proxy_reference< word_type > vp
The machine word which stores the positive vertical differences.
Definition: edit_distance_unbanded.hpp:819
word_type carry_d0
The carry-bit of d0.
Definition: edit_distance_unbanded.hpp:823
word_type hn
The machine word which stores the negative horizontal differences.
Definition: edit_distance_unbanded.hpp:817
word_type carry_hn
The carry-bit of hn.
Definition: edit_distance_unbanded.hpp:827
hp_type hp
The machine word which stores the positive horizontal differences.
Definition: edit_distance_unbanded.hpp:815
A strong type for designated initialisation of the row index of a matrix.
Definition: matrix_coordinate.hpp:65