32 template <
template <
typename ...>
typename container_type,
typename seq_alph_t,
typename ...rest_t>
37 -> container_type<seq_alph_t, rest_t...>;
40 template <
template <
typename ...>
typename container_type,
41 template <
typename ...>
typename allocator_type,
42 typename seq_alph_t,
typename ...rest_t>
47 -> container_type<seq_alph_t, allocator_type<seq_alph_t>, rest_t...>;
72 struct unaligned_seq<t>
111 template <
typename t>
114 std::equality_comparable_with<std::ranges::range_reference_t<t>,
gap>;
223 template <
typename t>
226 std::ranges::forward_range<t> &&
228 requires (t v, detail::unaligned_seq_t<t> unaligned)
233 std::same_as, std::ranges::iterator_t<t>);
236 std::same_as, std::ranges::iterator_t<t>);
265 template <sequence_container aligned_seq_t>
267 requires detail::is_gapped_alphabet<std::iter_value_t<aligned_seq_t>>
269 inline typename aligned_seq_t::iterator
insert_gap(aligned_seq_t & aligned_seq,
270 typename aligned_seq_t::const_iterator pos_it)
291 template <sequence_container aligned_seq_t>
293 requires detail::is_gapped_alphabet<std::iter_value_t<aligned_seq_t>>
295 inline typename aligned_seq_t::iterator
insert_gap(aligned_seq_t & aligned_seq,
296 typename aligned_seq_t::const_iterator pos_it,
297 typename aligned_seq_t::size_type
size)
321 template <sequence_container aligned_seq_t>
323 requires detail::is_gapped_alphabet<std::iter_value_t<aligned_seq_t>>
325 inline typename aligned_seq_t::iterator
erase_gap(aligned_seq_t & aligned_seq,
326 typename aligned_seq_t::const_iterator pos_it)
328 if (*pos_it != gap{})
329 throw gap_erase_failure(
"The position to be erased does not contain a gap.");
331 return aligned_seq.erase(pos_it);
354 template <sequence_container aligned_seq_t>
356 requires detail::is_gapped_alphabet<std::iter_value_t<aligned_seq_t>>
358 inline typename aligned_seq_t::iterator
erase_gap(aligned_seq_t & aligned_seq,
359 typename aligned_seq_t::const_iterator first,
360 typename aligned_seq_t::const_iterator last)
362 for (
auto it = first; it != last; ++it)
364 throw gap_erase_failure(
"The range to be erased contains at least one non-gap character.");
366 return aligned_seq.erase(first, last);
391 template <sequence_container aligned_seq_t, std::ranges::forward_range unaligned_sequence_type>
393 requires detail::is_gapped_alphabet<std::iter_value_t<aligned_seq_t>> &&
395 std::ranges::range_reference_t<unaligned_sequence_type>>
397 inline void assign_unaligned(aligned_seq_t & aligned_seq, unaligned_sequence_type && unaligned_seq)
401 tmp.resize(std::ranges::distance(unaligned_seq));
402 std::ranges::copy(unaligned_seq, std::ranges::begin(tmp));
403 swap(aligned_seq, tmp);
427 template <
typename range_type>
429 requires requires (range_type v)
431 v.insert_gap(std::ranges::iterator_t<range_type>{});
432 v.insert_gap(std::ranges::iterator_t<range_type>{},
typename range_type::size_type{});
435 std::ranges::iterator_t<range_type>
insert_gap(range_type & rng,
436 std::ranges::iterator_t<range_type>
const pos_it,
437 typename range_type::size_type
const size = 1)
439 return rng.insert_gap(pos_it,
size);
458 template <
typename range_type>
460 requires requires (range_type v) { v.erase_gap(std::ranges::iterator_t<range_type>{}); }
462 std::ranges::iterator_t<range_type>
erase_gap(range_type & rng,
463 std::ranges::iterator_t<range_type>
const pos_it)
465 return rng.erase_gap(pos_it);
486 template <
typename range_type>
488 requires requires (range_type v) { v.erase_gap(std::ranges::iterator_t<range_type>{}, std::ranges::iterator_t<range_type>{}); }
490 std::ranges::iterator_t<range_type>
erase_gap(range_type & rng,
491 std::ranges::iterator_t<range_type>
const first,
492 std::ranges::iterator_t<range_type>
const last)
494 return rng.erase_gap(first, last);
505 template <
typename ...elems>
511 template <
typename ...elems>
Adaptations of algorithms from the Ranges TS.
Includes customized exception types for the alignment module .
A combined alphabet that can hold values of either of its alternatives.
Definition: alphabet_variant.hpp:132
The alphabet of a gap character '-'.
Definition: gap.hpp:39
aligned_seq_t::iterator insert_gap(aligned_seq_t &aligned_seq, typename aligned_seq_t::const_iterator pos_it, typename aligned_seq_t::size_type size)
An implementation of seqan3::writable_aligned_sequence::insert_gap for sequence containers.
Definition: aligned_sequence_concept.hpp:295
void assign_unaligned(aligned_seq_t &aligned_seq, unaligned_sequence_type &&unaligned_seq)
An implementation of seqan3::writable_aligned_sequence::assign_unaligned_sequence for sequence contai...
Definition: aligned_sequence_concept.hpp:397
std::ranges::iterator_t< range_type > erase_gap(range_type &rng, std::ranges::iterator_t< range_type > const first, std::ranges::iterator_t< range_type > const last)
An implementation of seqan3::writable_aligned_sequence::erase_gap for ranges with the corresponding m...
Definition: aligned_sequence_concept.hpp:490
aligned_seq_t::iterator erase_gap(aligned_seq_t &aligned_seq, typename aligned_seq_t::const_iterator pos_it)
An implementation of seqan3::writable_aligned_sequence::erase_gap for sequence containers.
Definition: aligned_sequence_concept.hpp:325
std::ranges::iterator_t< range_type > erase_gap(range_type &rng, std::ranges::iterator_t< range_type > const pos_it)
An implementation of seqan3::writable_aligned_sequence::erase_gap for ranges with the corresponding m...
Definition: aligned_sequence_concept.hpp:462
aligned_seq_t::iterator erase_gap(aligned_seq_t &aligned_seq, typename aligned_seq_t::const_iterator first, typename aligned_seq_t::const_iterator last)
An implementation of seqan3::writable_aligned_sequence::erase_gap for sequence containers.
Definition: aligned_sequence_concept.hpp:358
std::ranges::iterator_t< range_type > insert_gap(range_type &rng, std::ranges::iterator_t< range_type > const pos_it, typename range_type::size_type const size=1)
An implementation of seqan3::writable_aligned_sequence::insert_gap for ranges with the corresponding ...
Definition: aligned_sequence_concept.hpp:435
aligned_seq_t::iterator insert_gap(aligned_seq_t &aligned_seq, typename aligned_seq_t::const_iterator pos_it)
An implementation of seqan3::writable_aligned_sequence::insert_gap for sequence containers.
Definition: aligned_sequence_concept.hpp:269
meta::list< types... > type_list
Type that contains multiple types, an alias for meta::list.
Definition: type_list.hpp:31
constexpr size_t size
The size of a type pack.
Definition: traits.hpp:150
The generic concept for an aligned sequence.
The (most general) container concept as defined by the standard library.
The generic concept for a (biological) sequence.
Resolves to std::is_assignable_v<t>.
The generic concept for an aligned sequence that is writable.
The internal SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
typename unaligned_seq< t >::type unaligned_seq_t
Helper type that delegates to seqan3::detail::unaligned_seq::type.
Definition: aligned_sequence_concept.hpp:79
constexpr auto remove_gap_from_value_type(container_type< gapped< seq_alph_t >, rest_t... >) -> container_type< seq_alph_t, rest_t... >
Helper function to deduce the unaligned sequence type from an aligned sequence container.
constexpr bool all_model_aligned_seq
True, if each type models seqan3::aligned_sequence; false otherwise.
Definition: aligned_sequence_concept.hpp:506
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
Additional non-standard concepts for ranges.
Adaptations of concepts from the standard library.
Adaptations of concepts from the Ranges TS.
decltype(remove_gap_from_value_type(std::declval< t >())) type
The unaligned sequence type of t.
Definition: aligned_sequence_concept.hpp:63
Default transformation trait that shall expose the unaligned sequence type of t when specialised.
Definition: aligned_sequence_concept.hpp:52