/*!
* @class JournaledString
*
* @extends String
*
* @headerfile <seqan/sequence_journaled.h>
*
* @brief Journaled versions of arbitrary underlying strings.
*
* @signature template <typename TValue, typename THostSpec[, typename
* TJournalSpec[, typename TBufferSpec]]> class String<TValue,
* Journaled<THostSpec, TJournalSpec, TBufferSpec> >;
*
* @tparam TValue The element type of the string.
* @tparam THostSpec Specialization type for the host string.
* @tparam TJournalSpec Specialization type for the journal. Default:
* <tt>SortedArray</tt>.
* @tparam TBufferSpec Specialization type for the buffer string. Default:
* <tt>Alloc<></tt>.
*
* @mfn JournaledString#Host
*
* @brief The host type.
*
* @signature Host<TJournaledString>::Type;
*
* @tparam TJournaledString The JournaldString to get the host type for.
*
* @return Type The host type.
*
* @mfn JournaledString#InsertionBuffer
*
* @brief Return type of insertion buffer string for a journaled string.
*
* @signature InsertionBuffer<TJournaledString>::Type;
*
* @tparam TJournaledString The journaled string to get the insertion buffer
* type for.
*
* @return Type The insertion buffer type.
*
* @mfn JournaledString#JournalType
*
* @brief Query a JournaledString for its journal type.
*
* @signature JournalType<TJournaledString>::Type;
*
* @tparam TJournaledString The JournaledString to query.
*
* @return Type the journal type.
*
* @fn JournaledString#setHost
*
* @brief Set the host of a JournaledString.
*
* @signature void setHost(js, str);
*
* @param[in,out] js The JournaledString to set the host for.
* @param[in] str The string to set as the host.
*
* @fn JournaledString#host
*
* @brief Return the host of a JournaledString.
*
* @signature THost host(js);
*
* @param[in] js The JournaledString to query.
*
* @return THost Reference to the host of <tt>js</tt>.
*
* @fn JournaledString#clear
*
* @brief Remove all changes from the journal, resetting the JournaledString to
* its state after construction.
*
* @signature void clear(js);
*
* @param[in,out] js The JournaledString to clear.
*
* @fn JournaledString#flatten
*
* @brief Apply the journal to the underlying string, modifying the underlying
* string.
*
* @signature void flatten(js);
*
* @param[in,out] js The JournaledString to flatten.
*
* @fn JournaledString#virtualToHostPosition
*
* @brief Translates virtual (view) position to position in host.
*
* @signature TPos virtualToHostPosition(js, pos);
*
* @param[in] js The JournaledString to translate the position for.
* @param[in] pos The virtual position to translate.
*
* @return TPos Position in the host.
*
* @fn JournaledString#hostToVirtualPosition
*
* @brief Translates host position to virtual position.
*
* @signature TPos hostToVirtualPosition(js, pos);
*
* @param[in] js The JournaledString to translate the position for.
* @param[in] pos The host position to translate.
*
* @return TPos The virtual view position.
*
* @fn JournaledString#isFlat
*
* @brief Returns whether a JournaledString has modifications.
*
* @signature bool isFlat(js);
*
* @param[in] js The JournaledString to query.
*
* @return bool Indicates whether the string has been modified.
*/