1#ifndef BTLLIB_SEQ_READER_GFA2_MODULE_HPP
2#define BTLLIB_SEQ_READER_GFA2_MODULE_HPP
4#include "btllib/cstring.hpp"
5#include "btllib/status.hpp"
12class SeqReaderGfa2Module
16 friend class SeqReader;
26 Stage stage = Stage::HEADER;
29 static bool buffer_valid(
const char* buffer,
size_t size);
30 template<
typename ReaderType,
typename RecordType>
31 bool read_buffer(ReaderType& reader, RecordType& record);
32 template<
typename ReaderType,
typename RecordType>
33 bool read_transition(ReaderType& reader, RecordType& record);
34 template<
typename ReaderType,
typename RecordType>
35 bool read_file(ReaderType& reader, RecordType& record);
39#define READ_GFA2(READLINE_SECTION, MIDEND_SECTION, END_SECTION) \
49 std::string tmp_string(tmp); \
50 if (tmp_string.length() > 0 && tmp_string[0] == 'S') { \
51 size_t pos = 0, pos2 = 0; \
52 pos2 = tmp_string.find('\t', 1); \
53 if (tmp_string.size() + 1 > record.header.s_cap) { \
54 record.header.change_cap(tmp_string.size() + 1); \
56 record.header = tmp_string.substr(1, pos2 - 1); \
57 for (int i = 0; i < int(SEQ) - 1; i++) { \
58 pos = tmp_string.find('\t', pos + 1); \
60 pos2 = tmp_string.find('\t', pos + 1); \
61 if (pos2 == std::string::npos) { \
62 pos2 = tmp_string.length(); \
64 if (tmp_string.size() + 1 > record.seq.s_cap) { \
65 record.seq.change_cap(tmp_string.size() + 1); \
67 record.seq = tmp_string.substr(pos + 1, pos2 - pos - 1); \
74template<
typename ReaderType,
typename RecordType>
76SeqReaderGfa2Module::read_buffer(ReaderType& reader, RecordType& record)
78 log_error(
"GFA2 files are unsupported right now.");
79 std::exit(EXIT_FAILURE);
94template<
typename ReaderType,
typename RecordType>
96SeqReaderGfa2Module::read_transition(ReaderType& reader, RecordType& record)
108template<
typename ReaderType,
typename RecordType>
110SeqReaderGfa2Module::read_file(ReaderType& reader, RecordType& record)
Definition: bloom_filter.hpp:16
void log_error(const std::string &msg)