diff --git a/src/all_sequences/base_sequences.jl b/src/all_sequences/base_sequences.jl index e610e7bcec53377048187a09315e8629dd9dab5e..db04689d06ff8284ac52fe49ede9bba07a552bf1 100644 --- a/src/all_sequences/base_sequences.jl +++ b/src/all_sequences/base_sequences.jl @@ -21,7 +21,7 @@ Sub-types need to implement: abstract type BaseSequence{N} <: ContainerBlock end function Base.getindex(bs::BaseSequence{N}, index::Integer) where {N} - if index < 1 || index > length(bs) + if nrepeat(bs) > 0 && (index < 1 || index > length(bs)) throw(BoundsError(bs, index)) end base_index = ((index - 1) % N) + 1 @@ -29,7 +29,7 @@ function Base.getindex(bs::BaseSequence{N}, index::Integer) where {N} end Base.iterate(bs::BaseSequence) = Base.iterate(bs, 1) Base.iterate(bs::BaseSequence{N}, index::Integer) where {N} = index > length(bs) ? nothing : (bs[index], index + 1) -Base.length(bs::BaseSequence{N}) where {N} = nrepeat(bs) * N +Base.length(bs::BaseSequence{N}) where {N} = iszero(nrepeat(bs)) ? N : (nrepeat(bs) * N) Base.eltype(::Type{<:BaseSequence}) = ContainerBlock function start_time(bs::BaseSequence{N}, index::Integer) where {N} diff --git a/src/all_sequences/sequences.jl b/src/all_sequences/sequences.jl index af67159259080f8a0c28d957a394ef9a4240d380..99f759fbe50b09faf92b0089549957edc1fb52d4 100644 --- a/src/all_sequences/sequences.jl +++ b/src/all_sequences/sequences.jl @@ -20,10 +20,9 @@ Defines an MRI sequence from a vector of building blocks. struct Sequence{N} <: BaseSequence{N} blocks :: SVector{N, <:ContainerBlock} TR :: VariableType - nrepeat :: Int end -function Sequence(blocks::AbstractVector; TR=:min, nrepeat=0) +function Sequence(blocks::AbstractVector; TR=:min) if TR == :min TR = sum(duration, blocks; init=0.) end @@ -36,8 +35,7 @@ end Sequence(blocks...; kwargs...) = Sequence([blocks...]; kwargs...) get_index_single_TR(s::Sequence, i::Integer) = s.blocks[i] -Base.IteratorSize(::Type{<:Sequence}) = Base.IsInfinite() -nrepeat(::Sequence) = Inf +nrepeat(::Sequence) = 0 """ to_block(block_like)