From 03df63a44d020bfcaa5e758504551480a9894ac0 Mon Sep 17 00:00:00 2001 From: Christopher Rackauckas Date: Mon, 13 Aug 2018 21:07:44 +0200 Subject: [PATCH] fix multiscale iteration --- src/level_iterations.jl | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/level_iterations.jl b/src/level_iterations.jl index 1f57fc0..0299e26 100644 --- a/src/level_iterations.jl +++ b/src/level_iterations.jl @@ -5,10 +5,26 @@ struct LevelIterIdx{T} end LevelIterIdx(S::AbstractMultiScaleArray, n::Int) = LevelIterIdx(level_iter(S, n)) -Base.start(l::LevelIterIdx) = (start(l.iter), 1) -function Base.next(l::LevelIterIdx, state) +start(l::LevelIterIdx) = (start(l.iter), 1) +function next(l::LevelIterIdx, state) val, new_state = next(l.iter, state[1]) end_idx = state[2] + length(val) - 1 ((val, state[2], end_idx), (new_state, end_idx + 1)) end -Base.done(l::LevelIterIdx, state) = done(l.iter, state[1]) +done(l::LevelIterIdx, state) = done(l.iter, state[1]) + +function Base.iterate(l::LevelIterIdx) + x = iterate(l.iter) + x == nothing && return nothing + val, new_state = x + end_idx = 1 + length(val) - 1 + ((val, 1, end_idx), (new_state, end_idx + 1)) +end + +function Base.iterate(l::LevelIterIdx,state) + x = iterate(l.iter,state[1]) + x == nothing && return nothing + val, new_state = x + end_idx = state[2] + length(val) - 1 + ((val, state[2], end_idx), (new_state, end_idx + 1)) +end