1 #ifndef GENESIS_POPULATION_FORMATS_SIMPLE_PILEUP_INPUT_ITERATOR_H_
2 #define GENESIS_POPULATION_FORMATS_SIMPLE_PILEUP_INPUT_ITERATOR_H_
41 namespace population {
78 template<
class T = SimplePileupReader::Record>
109 std::shared_ptr< utils::BaseInputSource > source,
112 : input_stream_( std::make_shared<utils::InputStream>( source ))
146 std::shared_ptr< utils::BaseInputSource > source,
147 std::vector<bool>
const& sample_filter,
150 : input_stream_( std::make_shared<utils::InputStream>( source ))
152 , sample_filter_( sample_filter )
153 , use_sample_filter_(
true )
174 explicit operator bool()
const
241 return good_ == it.good_;
246 return !(*
this == it);
265 std::shared_ptr<utils::InputStream> input_stream_;
272 std::vector<bool> sample_filter_;
273 bool use_sample_filter_ =
false;
281 inline void SimplePileupInputIterator<SimplePileupReader::Record>::increment_()
284 SimplePileupReader::Record tmp;
285 if( use_sample_filter_ ) {
288 good_ = reader_.parse_line_record( *input_stream_, tmp );
294 ( tmp.chromosome < record_.chromosome ) ||
295 ( tmp.chromosome == record_.chromosome && tmp.position <= record_.position )
298 throw std::runtime_error(
299 "Malformed pileup " + input_stream_->source_name() +
" at " + input_stream_->at() +
300 ": unordered chromosomes and positions"
303 record_ = std::move( tmp );
307 inline void SimplePileupInputIterator<Variant>::increment_()
319 tmp.samples.resize( record_.samples.size() );
320 if( use_sample_filter_ ) {
321 good_ = reader_.parse_line_variant( *input_stream_, tmp, sample_filter_ );
323 good_ = reader_.parse_line_variant( *input_stream_, tmp );
329 ( tmp.chromosome < record_.chromosome ) ||
330 ( tmp.chromosome == record_.chromosome && tmp.position <= record_.position )
333 throw std::runtime_error(
334 "Malformed pileup " + input_stream_->source_name() +
" at " + input_stream_->at() +
335 ": unordered chromosomes and positions"
338 record_ = std::move( tmp );
344 #endif // include guard