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)