/*!
* @class IndexDfi
*
* @extends IndexWotd
*
* @headerfile <seqan/index.h>
*
* @brief The Deferred Frequency Index (see Weese and Schulz, "Efficient string
* mining under constraints via the deferred frequency index").
*
* @signature template <typename TText, typename TPredHull, typename TPred>
* class Index<TText, IndexWotd< Dfi<TPredHull, TPred> > >;
*
* @tparam TText The @link TextConcept text @endlink.
* @tparam TPred An arbitrary frequency predicate.
* @tparam TPredHull A monotonic hull of <tt>TPred</tt>
*
* This index is based on a lazy suffix tree (see @link IndexWotd @endlink). All
* <tt>TPredHull</tt> sufficing nodes can be iterated using a @link
* TopDownIterator @endlink. To iterate the exact solution set of
* <tt>TPred</tt>, use a @link TopDownHistoryIterator @endlink of this index.
*
* @fn IndexDfi#indexSA
*
* @headerfile <seqan/index.h>
*
* @brief Shortcut for <tt>getFibre(.., DfiSA)</tt>.
*
* @signature TSa indexSA(index);
*
* @param[in] index The @link IndexDfi @endlink object holding the fibre.
*
* @return TSa A reference to the @link DfiIndexFibres#DfiSA @endlink fibre
* (partially sorted suffix array).
*
* @fn IndexDfi#indexDir
*
* @headerfile <seqan/index.h>
*
* @brief Shortcut for <tt>getFibre(.., DfiDir())</tt>.
*
* @signature TFibre indexDir(index);
*
* @param[in] index The @link IndexDfi @endlink object holding the fibre.
*
* @return TFibre A reference to the @link DfiIndexFibres#DfiDir @endlink fibre
* (tree structure).
*
* @fn IndexDfi#saAt
*
* @headerfile <seqan/index.h>
*
* @brief Shortcut for <tt>value(indexSA(..), ..)</tt>.
*
* @note Advanced functionality, not commonly used.
*
* @signature TValue saAt(position, index);
*
* @param[in] index The @link IndexDfi @endlink object holding the fibre.
* @param[in] position A position in the array on which the value should be
* accessed.
*
* @return TValue A reference or proxy to the value in the @link
* DfiIndexFibres#DfiSA @endlink fibre. To be more precise, a
* reference to a position containing a value of type @link
* SAValue @endlink is returned (or a proxy).
*
* @fn IndexDfi#dirAt
*
* @headerfile <seqan/index.h>
*
* @brief Shortcut for <tt>value(indexDir(index), position)</tt>.
*
* @signature TFibre dirAt(position, index);
*
* @param[in] index The @link IndexDfi @endlink object holding the fibre.
* @param[in] position A position in the array on which the value should be
* accessed.
*
* @return TFibre A reference to the @link DfiIndexFibres#DfiDir @endlink fibre.
*/