File: KSeqReader.cpp

package info (click to toggle)
pbbam 2.4.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 14,144 kB
  • sloc: cpp: 60,214; xml: 2,908; ansic: 660; sh: 275; python: 203; makefile: 187
file content (54 lines) | stat: -rw-r--r-- 1,301 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "PbbamInternalConfig.h"

#include "KSeqReader.h"

#include "ErrnoReason.h"

#include <sstream>
#include <stdexcept>
#include <vector>

#include <cassert>

namespace PacBio {
namespace BAM {

KSeqReader::KSeqReader(const std::string& fn)
    : fp_{gzopen(fn.c_str(), "r")}, seq_{kseq_init(fp_.get())}
{
    // check file handle
    if (fp_ == nullptr) {
        std::ostringstream msg;
        msg << "[pbbam] kseq FASTX reader ERROR: could not open file:\n"
            << "  file: " << fn << '\n';
        MaybePrintErrnoReason(msg);
        throw std::runtime_error{msg.str()};
    }

    // check kseq sequence handle
    assert(seq_ != nullptr);
}

KSeqReader::KSeqReader(KSeqReader&&) noexcept = default;

KSeqReader& KSeqReader::operator=(KSeqReader&&) noexcept = default;

KSeqReader::~KSeqReader() = default;

std::string KSeqReader::Bases() const { return std::string{seq_->seq.s, seq_->seq.l}; }

std::string KSeqReader::Name() const { return std::string{seq_->name.s, seq_->name.l}; }

std::string KSeqReader::Qualities() const { return std::string{seq_->qual.s, seq_->qual.l}; }

bool KSeqReader::ReadNext()
{
    const auto result = kseq_read(seq_.get());
    if (result == -1) {  // EOF
        return false;
    }
    return true;
}

}  // namespace BAM
}  // namespace PacBio