SeqAn3  3.0.0
The Modern C++ library for sequence analysis.
seqan3::gap_decorator< inner_type > Class Template Reference

A gap decorator allows the annotation of sequences with gap symbols while leaving the underlying sequence unmodified. More...

#include <seqan3/range/decorator/gap_decorator.hpp>

+ Inheritance diagram for seqan3::gap_decorator< inner_type >:

Public Types

using unaligned_seq_type = inner_type
 The underlying ungapped range type.
 
Range-associated member types
using value_type = gapped< value_type_t< inner_type > >
 The variant type of the alphabet type and gap symbol type (see seqan3::gapped).
 
using reference = value_type
 Use the value type as reference type because the underlying sequence must not be modified.
 
using const_reference = reference
 const_reference type equals reference type equals value type because the underlying sequence must not be modified.
 
using size_type = size_type_t< inner_type >
 The size_type of the underlying sequence.
 
using difference_type = difference_type_t< inner_type >
 The difference type of the underlying sequence.
 
using iterator = gap_decorator_iterator
 The iterator type of this container (a bidirectional iterator).
 
using const_iterator = iterator
 The const_iterator equals the iterator type. Since no references are ever returned and thus the underlying sequence cannot be modified through the iterator there is no need for const.
 

Public Member Functions

Constructors, destructor and assignment.
constexpr gap_decorator ()=default
 Default constructor. Attention: all operations on a solely default constructed decorator, except assigning a new range, are UB.
 
constexpr gap_decorator (gap_decorator const &)=default
 Copy constructor.
 
constexpr gap_decoratoroperator= (gap_decorator const &)=default
 Copy construction via assignment.
 
constexpr gap_decorator (gap_decorator &&rhs)=default
 Move constructor.
 
constexpr gap_decoratoroperator= (gap_decorator &&rhs)=default
 Move assignment.
 
 ~gap_decorator ()=default
 Use default deconstructor.
 
template<typename other_range_t >
 gap_decorator (other_range_t &&range)
 Construct with the ungapped range type.
 
size_type size () const noexcept
 Returns the total length of the aligned sequence. More...
 
Iterators
iterator begin () const noexcept
 Returns an iterator to the first element of the container. More...
 
const_iterator cbegin () const noexcept
 Returns an iterator to the first element of the container. More...
 
iterator end () const noexcept
 Returns an iterator to the element following the last element of the decorator. More...
 
const_iterator cend () const noexcept
 Returns an iterator to the element following the last element of the decorator. More...
 
Element access
reference at (size_type const i)
 Return the i-th element as a reference. More...
 
const_reference at (size_type const i) const
 Return the i-th element as a reference. More...
 
constexpr reference operator[] (size_type const i) const noexcept
 Return the i-th element as a reference. More...
 

Friends

Comparison operators

Compares two seqan3::gap_decorator 's by underlying sequence and gaps.

Parameters
[in]lhsThe left-hand side gap decorator to compare.
[in]rhsThe right-hand side gap decorator to compare.
Returns
A boolean flag indicating (in)equality of the aligned sequences.

Complexity

Worst case: $O(n*\log k)$ Constant in case the decorators have not the same number of (consecutive) gaps.

Exceptions

No-throw guarantee. Does not modify the aligned sequences.

bool operator== (gap_decorator const &lhs, gap_decorator const &rhs) noexcept
 Checks whether lhs is equal to rhs.
 
bool operator!= (gap_decorator const &lhs, gap_decorator const &rhs) noexcept
 Checks whether lhs is not equal to rhs.
 
bool operator< (gap_decorator const &lhs, gap_decorator const &rhs) noexcept
 Checks whether lhs is less than rhs.
 
bool operator<= (gap_decorator const &lhs, gap_decorator const &rhs) noexcept
 Checks whether lhs is less than or equal to rhs.
 
bool operator> (gap_decorator const &lhs, gap_decorator const &rhs) noexcept
 Checks whether lhs is greater than rhs.
 
bool operator>= (gap_decorator const &lhs, gap_decorator const &rhs) noexcept
 Checks whether lhs is greater than or equal to rhs.
 

Related Functions

(Note that these are not member functions.)

Requirements for seqan3::AlignedSequence

You can expect these functions on all types that model seqan3::AlignedSequence.

aligned_seq_t::iterator insert_gap (aligned_seq_t &aligned_seq, typename aligned_seq_t::const_iterator pos_it)
 Insert a seqan3::gap into an aligned sequence. More...
 
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)
 Insert multiple seqan3::gap into an aligned sequence. More...
 
aligned_seq_t::iterator erase_gap (aligned_seq_t &aligned_seq, typename aligned_seq_t::const_iterator pos_it)
 Erase a seqan3::gap from an aligned sequence. More...
 
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)
 Erase multiple seqan3::gap from an aligned sequence. More...
 
void assign_unaligned (aligned_seq_t &aligned_seq, unaligned_sequence_type &&unaligned_seq)
 Assign an ungapped sequence to a gapped sequence. More...
 

Aligned sequence modifications

iterator insert_gap (iterator const it, size_type const count=1)
 Insert a gap of length count at the aligned sequence iterator position. More...
 
iterator erase_gap (iterator const it)
 Erase one gap symbol at the indicated iterator postion. More...
 
iterator erase_gap (iterator const first, iterator const last)
 Erase gap symbols at the iterator postions [first, last[. More...
 
template<typename unaligned_seq_t >
void assign_unaligned (gap_decorator &dec, unaligned_seq_t &&unaligned)
 Assigns a new sequence of type seqan3::gap_decorator::unaligned_seq_type to the decorator. More...
 

Detailed Description

template<std::ranges::ViewableRange inner_type>
class seqan3::gap_decorator< inner_type >

A gap decorator allows the annotation of sequences with gap symbols while leaving the underlying sequence unmodified.

Template Parameters
inner_typeThe type of range that will be decorated with gaps; must model std::ranges::RandomAccessRange and std::ranges::SizedRange.

This class may be used whenever you want to store or compute an alignment. The underlying (ungapped) sequence remains unmodified, and is augmented with gap information. The seqan3::gap_decorator behaves just like a vector over a gapped alphabet when iterating over it, inserting/erasing gaps or accessing a position. The only difference lies in the performance and size overhead (see below).

Performance

n The length of the underlying sequence. k The number of contiguous gaps (not gap symbols). l The total number of gap symbols.

access next random access gap insert/erase at end gap insert/erase random size overhead
decorator $O(1)$ $O(\log(k))$ $O(\log(k))$ $O(k)$ $O(k)$
vector $O(1)$ $O(1)$ $O(1)$ $O(n)$ $O(n)$

The size overhead refers to the space that is needed when using each of the data structures in addition to an already existing ungapped sequence.

Implementation details

This decorator stores a std::set over tuples of (pos, cumulative_size) where every entry represents one contiguous stretch of gaps. pos is the (virtual) insert position in the underlying range and cumulative_size is the length of that contiguous stretch of gaps plus the length of all preceding elements. Resolving random access requires logarithmic access into the set and inserting or removing a gap symbol additionally entails updating all subsequent elements in the set to preserve correct cumulative sizes.

The seqan3::gap_decorator::iterator type

Attention
The iterator of the seqan3::gap_decorator does not model the Cpp17InputIterator requirements of the STL because dereferencing the iterator returns a proxy and no operator-> is provided. Note that it does model the std::ranges::InputIterator.

Member Function Documentation

◆ at() [1/2]

template<std::ranges::ViewableRange inner_type>
reference seqan3::gap_decorator< inner_type >::at ( size_type const  i)
inline

Return the i-th element as a reference.

Parameters
iThe element to retrieve.
Returns
A reference of the gapped alphabet type.

Complexity

$O(\log k)$ where $k$ is the number of gaps.

Exceptions

Throws std::out_of_range exception if i is out of range.

◆ at() [2/2]

template<std::ranges::ViewableRange inner_type>
const_reference seqan3::gap_decorator< inner_type >::at ( size_type const  i) const
inline

Return the i-th element as a reference.

Parameters
iThe element to retrieve.
Returns
A reference of the gapped alphabet type.

Complexity

$O(\log k)$ where $k$ is the number of gaps.

Exceptions

Throws std::out_of_range exception if i is out of range.

◆ begin()

template<std::ranges::ViewableRange inner_type>
iterator seqan3::gap_decorator< inner_type >::begin ( ) const
inlinenoexcept

Returns an iterator to the first element of the container.

Returns
Iterator to the first element.

If the container is empty, the returned iterator will be equal to end().

Complexity

Constant.

Exceptions

No-throw guarantee.

◆ cbegin()

template<std::ranges::ViewableRange inner_type>
const_iterator seqan3::gap_decorator< inner_type >::cbegin ( ) const
inlinenoexcept

Returns an iterator to the first element of the container.

Returns
Iterator to the first element.

If the container is empty, the returned iterator will be equal to end().

Complexity

Constant.

Exceptions

No-throw guarantee.

◆ cend()

template<std::ranges::ViewableRange inner_type>
const_iterator seqan3::gap_decorator< inner_type >::cend ( ) const
inlinenoexcept

Returns an iterator to the element following the last element of the decorator.

Returns
Iterator to the behind last element.
Attention
This element acts as a placeholder; attempting to dereference it results in undefined behaviour.

Complexity

Constant.

Exceptions

No-throw guarantee.

◆ end()

template<std::ranges::ViewableRange inner_type>
iterator seqan3::gap_decorator< inner_type >::end ( ) const
inlinenoexcept

Returns an iterator to the element following the last element of the decorator.

Returns
Iterator to the behind last element.
Attention
This element acts as a placeholder; attempting to dereference it results in undefined behaviour.

Complexity

Constant.

Exceptions

No-throw guarantee.

◆ erase_gap() [1/2]

template<std::ranges::ViewableRange inner_type>
iterator seqan3::gap_decorator< inner_type >::erase_gap ( iterator const  it)
inline

Erase one gap symbol at the indicated iterator postion.

Parameters
itIterator indicating the gap to be erased.
Returns
Iterator following the last removed element.
Exceptions
seqan3::gap_erase_failureif character is no seqan3::gap.

Complexity

$O(\log k)$

◆ erase_gap() [2/2]

template<std::ranges::ViewableRange inner_type>
iterator seqan3::gap_decorator< inner_type >::erase_gap ( iterator const  first,
iterator const  last 
)
inline

Erase gap symbols at the iterator postions [first, last[.

Parameters
[in]firstThe iterator pointing to the position where to start inserting gaps.
[in]lastThe iterator pointing to the position where to stop erasing gaps.
Returns
Iterator following the last removed element.
Exceptions
seqan3::gap_erase_failureif [first, last[ does not correspond to a consecutive range of seqan3::gap 's.

Complexity

$O(\log k)$

◆ insert_gap()

template<std::ranges::ViewableRange inner_type>
iterator seqan3::gap_decorator< inner_type >::insert_gap ( iterator const  it,
size_type const  count = 1 
)
inline

Insert a gap of length count at the aligned sequence iterator position.

Parameters
itIterator indicating the gap start position in the aligned sequence.
countNumber of gap symbols to be inserted.
Returns
An iterator pointing to the start position of the insertion.

Complexity

Average and worst case (insertion before last gap): $O(k)$, Best case (back insertion): $O(\log k)$.

◆ operator[]()

template<std::ranges::ViewableRange inner_type>
constexpr reference seqan3::gap_decorator< inner_type >::operator[] ( size_type const  i) const
inlinenoexcept

Return the i-th element as a reference.

Parameters
iThe element to retrieve.
Returns
A reference of the gapped alphabet type.

This function delegates to an iterator seqan3::gap_decorator.

Complexity

$O(\log k)$ where $k$ is the number of gaps.

◆ size()

template<std::ranges::ViewableRange inner_type>
size_type seqan3::gap_decorator< inner_type >::size ( ) const
inlinenoexcept

Returns the total length of the aligned sequence.

Returns
The total length of the aligned sequence (gaps included).

Complexity

Constant.

Exceptions

No-throw guarantee.

Friends And Related Function Documentation

◆ assign_unaligned() [1/2]

void assign_unaligned ( aligned_seq_t &  aligned_seq,
unaligned_sequence_type &&  unaligned_seq 
)
related

Assign an ungapped sequence to a gapped sequence.

Template Parameters
aligned_seq_tType of the container to reassign; must model seqan3::AlignedSequence.
unaligned_seq_tType of the container to assign from; must correspond to the aligned type without gap information (see details.)
Parameters
[in,out]aligned_seqThe gapped sequence container to assign to.
[in,out]unaligned_seqThe unaligned sequence container to assign from.

An aligned sequence has to be assignable from its unaligned counter part. For example a std::vector<seqan3::gapped<seqan3::dna4>> as well as a seqan3::gap_decorator<std::vector<seqan3::dna4>> can be assigned from s std::vector<seqan3::dna4> via seqan3::assign_unaligned.

Attention
This is a concept requirement, not an actual function (however types modelling this concept will provide an implementation).

◆ assign_unaligned [2/2]

template<std::ranges::ViewableRange inner_type>
template<typename unaligned_seq_t >
void assign_unaligned ( gap_decorator< inner_type > &  dec,
unaligned_seq_t &&  unaligned 
)
friend

Assigns a new sequence of type seqan3::gap_decorator::unaligned_seq_type to the decorator.

Parameters
[in,out]decThe decorator to modify.
[in]unalignedThe unaligned sequence to assign.

◆ erase_gap() [1/2]

aligned_seq_t::iterator erase_gap ( aligned_seq_t &  aligned_seq,
typename aligned_seq_t::const_iterator  pos_it 
)
related

Erase a seqan3::gap from an aligned sequence.

Template Parameters
aligned_seq_tType of the range to modify; must model seqan3::AlignedSequence.
Parameters
[in,out]aligned_seqThe aligned sequence to modify.
[in]pos_itThe iterator pointing to the position where to erase a gap.
Exceptions
seqan3::gap_erase_failureif there is no seqan3::gap at pos_it.
Attention
This is a concept requirement, not an actual function (however types modelling this concept will provide an implementation).

◆ erase_gap() [2/2]

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 
)
related

Erase multiple seqan3::gap from an aligned sequence.

Template Parameters
aligned_seq_tType of the range to modify; must model seqan3::AlignedSequence.
Parameters
[in,out]aligned_seqThe aligned sequence to modify.
[in]firstThe iterator pointing to the position where to start erasing gaps.
[in]lastThe iterator pointing to the position where to stop erasing gaps.
Exceptions
seqan3::gap_erase_failureif one of the characters in [first, last) no seqan3::gap.
Attention
This is a concept requirement, not an actual function (however types modelling this concept will provide an implementation).

◆ insert_gap() [1/2]

aligned_seq_t::iterator insert_gap ( aligned_seq_t &  aligned_seq,
typename aligned_seq_t::const_iterator  pos_it 
)
related

Insert a seqan3::gap into an aligned sequence.

Template Parameters
aligned_seq_tType of the range to modify; must model seqan3::AlignedSequence.
Parameters
[in,out]aligned_seqThe aligned sequence to modify.
[in]pos_itThe iterator pointing to the position where to insert a gap.
Attention
This is a concept requirement, not an actual function (however types modelling this concept will provide an implementation).

◆ insert_gap() [2/2]

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 
)
related

Insert multiple seqan3::gap into an aligned sequence.

Template Parameters
aligned_seq_tType of the range to modify; must model seqan3::AlignedSequence.
Parameters
[in,out]aligned_seqThe aligned sequence to modify.
[in]pos_itThe iterator pointing to the position where to insert a gaps.
[in]sizeThe number of gap symbols to insert (will result in a gap of length size).
Attention
This is a concept requirement, not an actual function (however types modelling this concept will provide an implementation).

The documentation for this class was generated from the following file: