/*!
* @class FMIndex
*
* @extends Index
*
* @headerfile <seqan/index.h>
*
* @brief An index based on the Burrows-Wheeler transform.
*
* @signature template <typename TText[, typename TSpec[, typename TConfig]]>
* class Index<TText, FMIndex<TSpec, TConfig> >;
*
* @tparam TText The text type. Types: @link String @endlink, @link StringSet
* @endlink
* @tparam TSpec FM index specialisation, defaults to <tt>void</tt>.
* @tparam TConfig A config object which determines the data types of the
* different fibres, defaults to
* <tt>FMIndexConfig<TSpec></tt>.
*
* @section Structure
*
* The FM index consists of various @link Fibre @endlink of which the most
* important ones are the compressed suffix array and the LF table, which
* provides all necessary information for the LF mapping.
*
* @fn FMIndex#indexLF
*
* @headerfile <seqan/index.h>
*
* @brief A shortcut for <tt>getFibre(index, FibreLF())</tt>.
*
* @signature TFibre indexLF(index);
*
* @param[in] index The FM index.
*
* @return TFibre A reference to the @link FMIndexFibres#FibreLF @endlink.
*
* @fn FMIndex#toSuffixPosition
*
* @headerfile <seqan/index.h>
*
* @brief This function computes the position of a specified position in the
* compressed suffix array (additionally containing entries for the
* sentinels). The returned position corresponds to the suffix array of
* the original text without sentinels.
*
* @signature TSAValue toSuffixPosition(index, pos, offset);
*
* @param[in] index The FM index.
* @param[in] pos The position in the suffix array of the FM index (with
* sentinels). Types: @link UnsignedIntegerConcept @endlink
* @param[in] offset The number of sequences in the original text. Types: @link
* UnsignedIntegerConcept @endlink
*
* @return TSAValue The function function computes the position of a specified
* position in the compressed suffix array (additionally
* containing entries for the sentinels). The returned position
* corresponds to the suffix array of the original text without
* sentinels. The return type is @link SAValue
* @endlink<@link Index @endlink<TText, FMIndex<TSpec,
* TConfig> > >::Type
*
* @fn FMIndex#begin
*
* @headerfile <seqan/index.h>
*
* @brief Returns an iterator pointing to the root node of the virtual prefix
* trie of the reversed text of the index.
*
* @signature TIterator begin(index, tag);
*
* @param[in] index The index to be traversed.
* @param[in] tag The specialisation of the iterator to be returned by the
* function. Types: VSTree Iterator
*
* @return TIterator Returns an iterator pointing to the root node of the
* virtual prefix trie of the reversed text of the the index.
* Types: <tt>The result of Iterator<Index<TText,
* TIndexSpec>, TSpec>::Type</tt>
*/