1 #ifndef GENESIS_POPULATION_WINDOW_SLIDING_VARIANTS_WINDOW_ITERATOR_H_
2 #define GENESIS_POPULATION_WINDOW_SLIDING_VARIANTS_WINDOW_ITERATOR_H_
40 #include <type_traits>
44 namespace population {
65 template<
class ForwardIterator,
class DataType =
typename ForwardIterator::value_type>
79 using InputType =
typename ForwardIterator::value_type;
103 ForwardIterator, DataType
107 ForwardIterator, DataType
139 if( parent_->width_ == 0 ) {
140 throw std::runtime_error(
"Cannot use SlidingVariantsWindowIterator of width 0." );
142 if( parent_->stride_ == 0 ) {
143 parent_->stride_ = parent_->width_;
145 if( parent_->stride_ > parent_->width_ ) {
146 throw std::runtime_error(
147 "Cannot use SlidingVariantsWindowIterator with stride > width."
174 void init_chromosome_()
177 if( base_iterator_type::current_ == base_iterator_type::end_ ) {
184 base_iterator_type::is_first_window_ =
true;
185 base_iterator_type::is_last_window_ =
false;
191 current_start_ = pos - (( pos - 1 ) % parent_->stride_ );
194 void increment_() override final
198 if( parent_->stride_ == parent_->width_ ) {
201 for(
size_t i = 0; i < parent_->stride_; ++i ) {
202 if( window_.
empty() ) {
211 for(
size_t i = 0; i < parent_->stride_; ++i ) {
215 we need a way to check
if we run out of data before
this so that we can set the last window
property already in
case
218 value_type& get_current_window_() const override final
223 BaseWindowIterator<ForwardIterator, DataType>
const* get_parent_() const override final
235 size_t current_start_ = 1;
236 size_t next_index_ = 0;
249 ForwardIterator
begin, ForwardIterator
end
309 std::unique_ptr<typename BaseWindowIterator<ForwardIterator, DataType>::BaseIterator>
318 std::unique_ptr<typename BaseWindowIterator<ForwardIterator, DataType>::BaseIterator>
321 return std::unique_ptr<DerivedIterator>(
new DerivedIterator(
nullptr ));
333 mutable size_t stride_ = 0;
345 template<
class ForwardIterator,
class DataType =
typename ForwardIterator::value_type>
346 SlidingVariantsWindowIterator<ForwardIterator, DataType>
348 ForwardIterator begin, ForwardIterator end,
size_t width = 0,
size_t stride = 0
366 template<
class ForwardIterator>
367 SlidingVariantsWindowIterator<ForwardIterator>
369 ForwardIterator begin, ForwardIterator end,
size_t width = 0,
size_t stride = 0
371 using DataType =
typename ForwardIterator::value_type;
375 it.entry_input_function = []( DataType
const& variant ) {
378 it.chromosome_function = []( DataType
const& variant ) {
379 return variant.chromosome;
381 it.position_function = []( DataType
const& variant ) {
382 return variant.position;
394 #endif // include guard