/*!
* @class Align
*
* @implements EqualityComparableConcept
*
* @headerfile <seqan/align.h>
*
* @brief Tabular alignment of same-type sequences.
*
* @signature template <typename TSequence, typename TGapSpec> class Align;
*
* @tparam TSequence Type of the underlying sequence.
* @tparam TGapSpec Tag for selecting the @link Gaps @endlink specialization.
*
* The Alignment class is for storing tabular alignments of sequences having the
* same type. They do so by being a container of @link Gaps @endlink objects.
* The most common use case is storing pairwise alignments that are generated by
* one of the dynamic programming alignment algorithms.
*
* @section Example
*
* Here is an example of using an Align object with @link globalAlignment
* @endlink.
*
* @include demos/align/align.cpp
*
* The output is as follows:
*
* @include demos/align/align.cpp.stdout
*
* @see globalAlignment
* @see localAlignment
* @see Gaps
*
* @mfn Align#Col
*
* @headerfile <seqan/align.h>
*
* @brief The column type for @link Align @endlink objects.
*
* @signature Col<TAlign>::Type
*
* @tparam TAlign The @link Align @endlink object to query for its column type.
*
* @return Type The resulting type.
*
* @mfn Align#Cols
*
* @brief Return the type representing a column in an Align object.
*
* @signature Cols<TAlign>::Type
*
* @tparam TAlign The Align object to get the column type for.
*
* @return Type The resulting column type.
*
* @mfn Align#Value
*
* @brief Return the value type for an Align object.
*
* @signature Value<TAlign>::Type
*
* @tparam TAlign The Align object to get the value type for.
*
* @return Type The resulting value type.
*
* @mfn Align#GetValue
*
* @brief Return the get-value type for an Align object.
*
* @signature GetValue<TAlign>::Type
*
* @tparam TAlign The Align object to get the get-value type for.
*
* @return Type The resulting get-value type.
*
* @mfn Align#Reference
*
* @brief Return the reference type for an Align object.
*
* @signature GetValue<TAlign>::Type
*
* @tparam TAlign The Align object to get the reference type for.
*
* @return Type The resulting reference type.
*
* @mfn Align#Row
*
* @brief Return the row type (@link Gaps @endlink specialization).
*
* @signature Row<TAlign>::Type
*
* @tparam TAlign The Align object to get the row type for.
*
* @return Type The resulting row type.
*
* @mfn Align#Rows
*
* @brief Return the type used for rows in an Align object (a Gaps
* specialization).
*
* @signature Rows<TAlign>::Type
*
* @tparam TAlign The Align object to get the rows type for.
*
* @return Type The resulting rows type.
*
* @mfn Align#Source
*
* @brief Return the type of the underlying sequence.
*
* @signature Rows<TAlign>::Type;
*
* @tparam TAlign The Align object to get the underlying sequence type for.
*
* @return Type The resulting sequence type.
*
* @mfn Align#StringSetType
*
* @brief Return the type that would be used for a string set of the sources.
*
* @signature Rows<TAlign>::Type
*
* @tparam TAlign The Align object to get the string set type for.
*
* @return Type The resulting string set type.
*
* @fn Align#rows
*
* @brief Returns the rows of an Align object.
*
* @signature TRows rows(align);
*
* @param[in] align The Align object to get the rows for.
*
* @return TRows A container with the Gaps of the Align object.
*
* @fn Align#row
*
* @brief Returns a single row of an Align object.
*
* @signature TRow row(align, pos);
*
* @param[in] align The Align object to get the row of.
* @param[in] pos The number of the row to get.
*
* @return TRow Reference to the given row of align (Metafunction: @link
* Align#Row @endlink).
*
* @fn Align#cols
*
* @brief Returns the columns of an Align object.
*
* @signature TCols cols(align);
*
* @param[in] align The Align object to get the cols of.
*
* @return TCols The columns of the Align object (Metafunction: @link Align#Cols
* @endlink).
*
* @fn Align#col
*
* @brief Returns the columns of an Align object.
*
* @signature TCol col(align);
*
* @param[in] align The Align object to get the cols of.
*
* @return TCol The column of the Align object (Metafunction: @link Align#Col
* @endlink).
*
* @fn Align#write
*
* @brief Writing of Gaps to Streams in human-readable format.
*
* @deprecated Old-style I/O.
*
* @signature void write(stream, align);
*
* @param[in,out] stream The Stream to write to.
* @param[in] align The Align object to write out.
*
* @fn Align#clearClipping
*
* @brief Clear clipping on all rows.
*
* @signature void clearClipping(align);
*
* @param[in,out] align Align object to clear clippings of.
*
* @fn Align#operator<<
*
* @brief Stream-output for Align objects.
*
* @signature TStream operator<<(stream, align);
*
* @param[in,out] stream <tt>std::ostream</tt> to write to.
* @param[in] align Align object to write out.
*
* @return TStream Reference to stream after output of align.
*
* @fn Align#setStrings
*
* @brief Loads the sequences of a string set into an alignment.
*
* @signature void setStrings(align, stringSet);
*
* @param[in,out] align Align object to set underlying sequence of.
* @param[in] stringSet The @link StringSet @endlink with the data.
*
* @fn Align#clearGaps
*
* @brief Clear gaps of all Align rows.
*
* @signature void clearGaps(align);
*
* @param[in] align The Align object to clear all all gaps from.
*
* @fn Align#stringSet
*
* @brief Return string set with all ungapped sequences.
*
* @signature TStringSet stringSet(align);
*
* @param[in] align Align object to get sequences of.
*
* @return TStringSet The set of ungapped sequences (Metafunction: @link
* Align#StringSetType @endlink).
*/