/*!
* @class VcfStream
*
* @headerfile <seqan/vcf_io.h>
*
* @brief High-level VCF I/O class.
*
* @signature class VcfStream;
*
* @section Examples
*
* The following example demonstrates reading a VCF file and printing the
* variant locations.
*
* @include demos/vcf_io/vcf_stream_read.cpp
*
* The output is as follows:
*
* @include demos/vcf_io/vcf_stream_read.cpp.stdout
*
* @fn VcfStream::VcfStream
*
* @brief Constructor.
*
* @signature VcfStream::VcfStream();
* @signature VcfStream::VcfStream(fileName[, mode]);
*
* @param[in] fileName Path to the fiel to open. Type: <tt>char const *</tt>.
* @param[in] mode The mode to open the file in. Type: @link VcfStream::Mode
* @endlink. Default: <tt>READ</tt>.
*
* @var VcfHeader VcfStream::header;
*
* @brief Member to store header information.
*
* @fn VcfStream#open
*
* @brief Open a VcfStream.
*
* @signature bool open(vcfStream, fileName[, mode]);
*
* @param[in,out] vcfStream The VcfStream to open.
* @param[in] fileName Path to the file to open. Type: <tt>char const *</tt>.
* @param[in] mode Mode to open the file in. Type @link VcfStream::Mode
* @endlink. Default: <tt>READ</tt>.
*
* @return bool <tt>true</tt> if the file could be opened and <tt>false</tt>
* otherwise.
*
* @fn VcfStream#readRecord
*
* @brief Read a record from a VcfStream.
*
* @signature int readRecord(record, stream);
*
* @param[in,out] record The @link VcfRecord @endlink to read into.
* @param[in,out] stream The VcfStream to read from.
*
* @return int Status code, 0 on success, non-0 value on error.
*
* @fn VcfStream#writeRecord
*
* @brief Write a record to a VcfStream.
*
* @signature int writeRecord(stream, record);
*
* @param[in,out] stream The VcfStream to write to.
* @param[in] record The @link VcfRecord @endlink to write.
*
* @return int Status code, 0 on success, non-0 value on error.
*
* @fn VcfStream#flush
*
* @brief Flush a VcfStream.
*
* @signature int flush(stream);
*
* @param[in,out] stream The VcfStream to flush.
*
* @return int Status code, 0 on success, non-0 on errors.
*
* @fn VcfStream#close
*
* @brief Close a VcfStream.
*
* @signature int close(stream);
*
* @param[in,out] stream The VcfStream to close.
*
* @return int Status code, 0 on success, non-0 on errors.
*
* @fn VcfStream#isGood
*
* @brief Query error state of VcfStream.
*
* @signature bool isGood(stream);
*
* @param[in] stream The VcfStream to query.
*
* @return bool true if the stream is ready for reading and writing.
*
* @fn VcfStream#atEnd
*
* @brief Query a VcfStream for being at the end.
*
* @signature bool atEnd(stream);
*
* @param[in] stream The VcfStream to query.
*
* @return bool true if the stream is a the end and false otherwise.
*/