/*!
* @class GffStream
*
* @headerfile <seqan/gff_io.h>
*
* @brief High-level GFF/GTF I/O class.
*
* @signature class GffStream;
*
* The GffStream class allows to read and write GTF and GFF files.
*
* @section Remarks
*
* Note that the class <tt>GffStream</tt> allows to read both GFF 2, 3, and GTF.
* For writing, only GFF 3 and GTF are supported.
*
* @section Examples
*
* The following example demonstrates reading a GFF file and printing the
* annotation locations.
*
* @include demos/gff_io/gff_stream_read.cpp
*
* @see GffStream::FileFormat
*
* @fn GffStream::GffStream
*
* @brief Constructor.
*
* @signature GffStream::GffStream();
* @signature GffStream::GffStream(fileName[, mode=READ[, fileFormat=GFF]]);
*
* @param[in] fileName The path to the file to open, <tt>char const *</tt>.
* @param[in] mode The open mode, GffStream::Mode, default is READ.
* @param[in] fileFormat The open mode, GffStream::FileFormat, default is auto-
* detect.
*
* @see GffStream::Mode
* @see GffStream#open
*
* @var TCharStringSet GffStream::sequenceNames;
*
* @brief The names of the sequences (StringSet of CharString), updated when new
* sequences are seen in GFF file.
*
* @var GffStream::FileFormat GffStream::fileFormat;
*
* @brief File format to use for writing.
*
* @fn GffStream#open
*
* @brief Open a GffStream .
*
* @signature bool open(gffStream, fileName[, mode[, fileFormat]]);
*
* @param[in,out] gffStream The GffStream to open.
* @param[in] fileName The path to the file to open, <tt>char const *</tt>.
* @param[in] mode The open mode, GffStream::Mode, defaults to
* <tt>GffStream::Mode::READ</tt>.
* @param[in] fileFormat File format to use for writing, GffStream::FileFormat.
*
* @return bool <tt>true</tt> on success, <tt>false</tt> on failure.
*
* @see GffStream#isGood
* @see GffStream::Mode
*
* @fn GffStream#addSequenceName
*
* @brief Add the name of a sequence to a GffStream .
*
* @signature void addSequenceName(gffStream, seqName);
*
* @param[in,out] gffStream The GffStream to add the name to
* @param[in] seqName The name of the sequence to append, CharString.
*
* @fn GffStream#readRecord
*
* @brief Read a record from a GffStream
*
* @signature int readRecord(record, gffStream);
*
* @param[out] record The GffRecord to read into, GffRecord.
* @param[in,out] gffStream The GffStream to read from, GffStream.
*
* @return int <tt>0</tt> on success, non-<tt>0</tt> on failure.
*
* @fn GffStream#writeRecord
*
* @brief Write a record to a GffStream.
*
* @signature int writeRecord(gffStream, record);
*
* @param[in,out] gffStream The GffStream to write to.
* @param[in] record The GffRecord to write.
*
* @return int <tt>0</tt> on success, non-<tt>0</tt> on failure.
*
* @fn GffStream#flush
*
* @brief Flush to a GffStream.
*
* @signature int flush(gffStream);
*
* @param[in,out] gffStream The GffStream to flush. Types: GffStream
*
* @return int <tt>0</tt> on success, non-<tt>0</tt> on failure.
*
* @fn GffStream#close
*
* @brief Closes a GffStream
*
* @signature int close(gffStream);
*
* @param[in,out] gffStream The GffStream to close. Types: GffStream
*
* @return int <tt>0</tt> on success, non-<tt>0</tt> on failure.
*
* @fn GffStream#isGood
*
* @brief Query a GffStream for errors.
*
* @signature bool isGood(gffStream);
*
* @param[in] gffStream The GffStream to query.
*
* @return bool <tt>true</tt> if stream is good, <tt>false</tt> otherwise.
*
* @fn GffStream#atEnd
*
* @brief Query a GffStream for being at the end of the file.
*
* @signature bool atEnd(gffStream);
*
* @param[in] gffStream The GffStream to query. Types: GffStream
*
* @return bool <tt>true</tt> if stream is at the end, <tt>false</tt> otherwise.
*/