/*!
* @class BedStream
*
* @headerfile <seqan/bed_io.h>
*
* @brief High-level BED I/O class.
*
* @signature class BedStream;
*
* @section Examples
*
* The following example demonstrates reading a BED file and printing the
* annotation locations.
*
* @include demos/bed_io/bed_stream_read.cpp
*
* @see BedStream::Mode
*
* @fn BedStream::BedStream
*
* @brief Constructor.
*
* @signature BedStream::BedStream();
* @signature BedStream::BedStream(fileName[, mode = READ]);
*
* @param[in] mode The open mode (@link BedStream::Mode @endlink).
* @param[in] fileName The path to the file to open (<tt>char const *</tt>).
*
* @see BedStream::Mode
*
* @var TCharStringSet BedStream::sequenceNames;
*
* @brief The names of the sequences (@link StringSet @endlink of @link
* CharString @endlink)
*
* The string set is updated when new sequences are seen in BED file.
*
* @fn BedStream#open
*
* @brief Open a @link BedStream @endlink.
*
* @signature bool open(bedStream, fileName[, mode = READ]);
*
* @param[in,out] bedStream The @link BedStream @endlink to open. Types:
* BedStream
* @param[in] fileName The path to the file to open, <tt>char const 8</tt>
* @param[in] mode The open mode, type is @link BedStream::Mode @endlink.
*
* @return bool <tt>true</tt> on success, <tt>false</tt> on failure.
*
* @see BedStream#isGood
* @see BedStream::Mode
*
* @fn BedStream#addSequenceName
*
* @brief Add the name of a sequence to a @link BedStream @endlink.
*
* @signature void addSequenceName(bedStream, seqName);
*
* @param[in,out] bedStream The @link BedStream @endlink to add the name to.
* @param[in] seqName The name of the sequence to append.
*
* @fn BedStream#readRecord
*
* @brief Read a record from a @link BedStream @endlink.
*
* @signature int readRecord(record, bedStream);
*
* @param[out] record The @link BedRecord @endlink to read into.
* @param[in,out] bedStream The @link BedStream @endlink to read from.
*
* @return int A status code, 0 on success, different value on failure.
*
* @fn BedStream#writeRecord
*
* @brief Write a record to a @link BedStream @endlink
*
* @signature int writeRecord(bedStream, record);
*
* @param[in,out] bedStream The @link BedStream @endlink to write to.
* @param[in] record The @link BedRecord @endlink to write.
*
* @return int A status code, 0 on success, different value on failure.
*
* @fn BedStream#flush
*
* @brief Flush to a @link BedStream @endlink
*
* @signature int flush(bedStream);
*
* @param[in,out] bedStream The @link BedStream @endlink to flush.
*
* @return int Status code, 0 on success, other value on failure.
*
* @fn BedStream#close
*
* @brief Closes a @link BedStream @endlink
*
* @signature int close(bedStream);
*
* @param[in,out] bedStream The @link BedStream @endlink to close.
*
* @return int A status code, 0 on success, different value on failure.
*
* @fn BedStream#isGood
*
* @brief Query a @link BedStream @endlink for errors.
*
* @signature bool isGood(bedStream);
*
* @param[in] bedStream The @link BedStream @endlink to query.
*
* @return TReturn <tt>true</tt> if stream is good, <tt>false</tt> otherwise.
*
* @see BedStream#open
*
* @fn BedStream#atEnd
*
* @brief Query a @link BedStream @endlink for being at the end of the file.
*
* @signature bool atEnd(bedStream);
*
* @param[in] bedStream The @link BedStream @endlink to query.
*
* @return bool <tt>true</tt> if stream is at the end, <tt>false</tt> otherwise.
*/