/**
>HEADER
Copyright (c) 2013 Rob Patro robp@cs.cmu.edu
This file is part of Sailfish.
Sailfish is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Sailfish is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Sailfish. If not, see .
class ReadProducer {};
template <> class ReadProducer {
public:
ReadProducer(jellyfish::parse_read& parser)
: s_(new ReadSeq), stream_(parser.new_thread()) {}
~ReadProducer() { delete s_; }
bool nextRead(ReadSeq*& s) {
if ((read_ = stream_.next_read())) {
// we iterate over the entire read
const char* start = read_->seq_s;
const char* const end = read_->seq_e;
uint32_t readLen = std::distance(start, end);
s_->seq = const_cast(read_->seq_s);
s_->len = readLen;
s_->name = const_cast(read_->header);
s_->nlen = read_->hlen;
s = s_;
return true;
} else {
return false;
}
}
void finishedWithRead(ReadSeq*& s) { s = nullptr; }
private:
ReadSeq* s_;
jellyfish::parse_read::read_t* read_; //{parser.new_thread()};
jellyfish::parse_read::thread stream_; //{parser.new_thread()};
};
template <> class ReadProducer {
public:
ReadProducer(StreamingReadParser& parser) : parser_(parser) {}
bool nextRead(ReadSeq*& s) {
if (parser_.nextRead(s)) {
return true;
} else {
s = nullptr;
return false;
}
}
void finishedWithRead(ReadSeq*& s) { parser_.finishedWithRead(s); }
private:
StreamingReadParser& parser_;
};
#endif // __READPRODUCER_HPP__