/*!
* @defgroup GffIO GFF I/O
*
* @brief I/O functionality for the GFF and GTF file formats.
*
* @tag GffIO#Gff
*
* @brief Tag for selecting the GFF format.
*
* @signature typedef Tag<TagGff_> Gff;
*
* @tag GffIO#Gtf
*
* @brief Tag for selecting the GTF format.
*
* @signature typedef Tag<TagGtf_> Gtf;
*
* @fn GffIO#readRecord
*
* @brief Read one GFF/GTF record from a SinglePassRecordReader.
*
* @signature int readRecord(record, reader[, context[, tag]]);
*
* @param[out] record The GffRecord to write the results to.
* @param[in,out] reader The SinglePassRecordReader to use for reading.
* @param[in,out] context The GffIOContext to use for reading. If present then
* ref will be translated to rID using the reference name
* store from context.
* @param[in] tag The format to read from, one of Gtf and Gff. Note that the
* parser transparently parses both GFF and GTF.
*
* @return int A status code, 0 on success, a different value on failures.
*
* @fn GffIO#writeRecord
*
* @brief Writes on GFF/GTF record to a stream.
*
* @signature int writeRecord(stream, record[, context[, tag]]);
*
* @param[in,out] stream The @link StreamConcept @endlink to write to.
* @param[in] record The @link GffRecord @endlink to write.
* @param[in] context Optional @link GffIOContext @endlink to use for reference
* ids.
*
* @return int A status code, 0 on success, a different value on errors.
*/