00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef CGATOOLS_REFERENCE_CRRFILEWRITER_HPP_
00016 #define CGATOOLS_REFERENCE_CRRFILEWRITER_HPP_ 1
00017
00020
00021 #include "cgatools/core.hpp"
00022 #include "cgatools/util/Md5.hpp"
00023 #include "cgatools/reference/CompactDnaSequence.hpp"
00024
00025 namespace cgatools { namespace reference {
00026
00027 class CrrFile;
00028
00030 class CrrFileWriter
00031 {
00032 public:
00035 CrrFileWriter(std::ostream* out);
00036 ~CrrFileWriter();
00037
00039 void newChromosome(const std::string& name, bool circular);
00040
00042 void addSequence(const std::string& sequence);
00043
00046 void close();
00047
00048 private:
00049 struct ChromosomeInfo
00050 {
00051 ChromosomeInfo();
00052 ChromosomeInfo(const std::string& name, bool circular, uint64_t fileOffset);
00053
00054 std::string name_;
00055 bool circular_;
00056 uint64_t fileOffset_;
00057 util::Md5Context md5_;
00058 uint64_t length_;
00059 std::vector<AmbiguousRegion> amb_;
00060 };
00061
00062 void writeHeader(uint64_t chrTableOffset);
00063 void writeGuard();
00064 void writeChromosomeTable();
00065 void endChromosome();
00066 void addBase(char base);
00067
00068 std::ostream* out_;
00069 std::vector<ChromosomeInfo> chromosomes_;
00070 uint8_t packedBases_;
00071 uint32_t packedBaseCount_;
00072 bool closed_;
00073
00074 friend class CrrFile;
00075 };
00076
00077 } }
00078
00079 #endif // CGATOOLS_REFERENCE_CRRFILEWRITER_HPP_