/*!
* @class SparseString
*
* @headerfile <seqan/index.h>
*
* @brief A string storing only a fraction of the values of the original string.
*
* @signature template <typename TValueString, typename TSpec> class
* SparseString;
*
* @tparam TSpec The specialisation tag. Default: void.
* @tparam TValueString The type of the @link String string @endlink containing
* the values.
*
* @fn SparseString#clear
*
* @headerfile <seqan/index.h>
*
* @brief Resets the @link SparseString @endlink.
*
* @signature void clear(sparseString);
*
* @param[in,out] sparseString The @link SparseString @endlink to be cleared.
*
* @fn SparseString#empty
*
* @headerfile <seqan/index.h>
*
* @brief Returns whether or not the @link SparseString @endlink is empty.
*
* @signature bool empty(sparseString);
*
* @param[in] sparseString The SparseString to be checked.
*
* @return bool <tt>true</tt> if there are no elements in the sparse string and
* <tt>false</tt> otherwise.
*
* @fn SparseString#getValue
*
* @headerfile <seqan/index.h>
*
* @brief Returns the value of a SparseString.
*
* @signature TValue getValue(sparseString, pos);
*
* @param[in] sparseString The @link SparseString @endlink.
* @param[in] pos The position at which a value should be assign to the sparse
* string. Types: @link UnsignedIntegerConcept @endlink
*
* @return TValue The type @link GetValue @endlink of @link SparseString
* @endlink is returned.
*
* @fn SparseString#value
*
* @headerfile <seqan/index.h>
*
* @brief Returns the value of a @link SparseString @endlink.
*
* @signature TReference value(sparseString, pos);
*
* @param[in] sparseString The @link SparseString @endlink.
* @param[in] pos The position at which a value should be assign to the sparse
* string. Types: @link UnsignedIntegerConcept @endlink
*
* @return TReference The type @link Reference @endlink of @link SparseString
* @endlink is returned.
*
* @fn SparseString#getFibre
*
* @headerfile <seqan/index.h>
*
* @brief Returns a specific fibre of a @link SparseString @endlink.
*
* @signature TFibre getFibre(sparseString, fibreTag);
*
* @param[in] sparseString The sparseString holding the fibre.
* @param[in] fibreTag A tag that identifies the @link Fibre @endlink. Types:
* @link SparseStringFibres SparseString Fibres @endlink
*
* @return TFibre A reference to the @link Fibre @endlink object.
*
* @fn SparseString#length
*
* @headerfile <seqan/index.h>
*
* @brief Returns the number of elements in the @link SparseString @endlink.
*
* @signature TSize length(sparseString);
*
* @param[in] sparseString The sparse string suffix array.
*
* @return TSize The number of elements in the sparse string array. Types: The
* result of @link Size @endlink of the sparse string.
*
* @fn SparseString#resize
*
* @headerfile <seqan/index.h>
*
* @brief Resets the number of elements in the compressed suffix array.
*
* @note If the new length is smaller than the actual one then the last
* <tt>x<tt> items of the compressed suffix array are deleted with <tt>x =
* oldLength - newLength</tt>.
*
* @signature TSize resize(sparseString, newLength);
*
* @param[in,out] sparseString The sparse string.
* @param[in] newLength The number of elements which should be stored in the
* sparse string. Types: @link UnsignedIntegerConcept
* @endlink.
*
* @return TSize The number of elements in the sparse string. Types: The result
* of @link Size @endlink of the sparse string.
*
* @fn SparseString#open
*
* @headerfile <seqan/index.h>
*
* @brief This functions open a sparse string from disk.
*
* @signature bool open(string, fileName[, openMode]);
*
* @param[in] string The string to be opened. Types: SparseString
* @param[in] fileName C-style character string containing the file name.
* @param[in] openMode The combination of flags defining how the file should be
* opened. To open a file read-only, write-only or to read
* and write use <tt>OPEN_RDONLY</tt>, <tt>OPEN_WRONLY</tt>,
* or <tt>OPEN_RDWR</tt>.To create or overwrite a file add
* <tt>OPEN_CREATE</tt>. To append a file if existing add
* <tt>OPEN_APPEND</tt>. To circumvent problems, files are
* always opened in binary mode. Default: <tt>OPEN_RDWR |
* OPEN_CREATE | OPEN_APPEND</tt>
*
* @return bool <tt>true</tt> on success.
*
* @fn SparseString#save
*
* @headerfile <seqan/index.h>
*
* @brief This functions saves a sparse string to disk.
*
* @signature bool save(string, fileName[, openMode]);
*
* @param[in] string The string to be saved. Types: SparseString
* @param[in] fileName C-style character string containing the file name.
* @param[in] openMode The combination of flags defining how the file should be
* opened. To open a file read-only, write-only or to read
* and write use <tt>OPEN_RDONLY</tt>, <tt>OPEN_WRONLY</tt>,
* or <tt>OPEN_RDWR</tt>.To create or overwrite a file add
* <tt>OPEN_CREATE</tt>. To append a file if existing add
* <tt>OPEN_APPEND</tt>. To circumvent problems, files are
* always opened in binary mode. Default: <tt>OPEN_RDWR |
* OPEN_CREATE | OPEN_APPEND</tt>
*
* @return bool <tt>true</tt> on success.
*/