Skip to content

Commit 40fc321

Browse files
committed
use fields instead if tuple
1 parent 36561a0 commit 40fc321

File tree

1 file changed

+16
-18
lines changed

1 file changed

+16
-18
lines changed

src/vector_of_array.jl

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -429,23 +429,27 @@ Base.getindex(A::AbstractDiffEqArray, I::AbstractArray{Int}) = A.u[I]
429429
__parameterless_type(T) = Base.typename(T).wrapper
430430

431431
# `end` support for ragged inner arrays
432-
# Use tuple (dim, offset) as runtime value instead of type parameter
432+
# Use runtime fields instead of type parameters for type stability
433433
struct RaggedEnd
434-
data::Tuple{Int, Int} # (dimension, offset)
434+
dim::Int
435+
offset::Int
435436
end
436-
RaggedEnd(dim::Int) = RaggedEnd((dim, 0))
437+
RaggedEnd(dim::Int) = RaggedEnd(dim, 0)
437438

438-
Base.:+(re::RaggedEnd, n::Integer) = RaggedEnd((re.data[1], re.data[2] + Int(n)))
439-
Base.:-(re::RaggedEnd, n::Integer) = RaggedEnd((re.data[1], re.data[2] - Int(n)))
439+
Base.:+(re::RaggedEnd, n::Integer) = RaggedEnd(re.dim, re.offset + Int(n))
440+
Base.:-(re::RaggedEnd, n::Integer) = RaggedEnd(re.dim, re.offset - Int(n))
440441
Base.:+(n::Integer, re::RaggedEnd) = re + n
441442

442443
struct RaggedRange
443-
data::Tuple{Int, Int, Int, Int} # (dim, start, step, offset)
444+
dim::Int
445+
start::Int
446+
step::Int
447+
offset::Int
444448
end
445449

446-
Base.:(:)(stop::RaggedEnd) = RaggedRange((stop.data[1], 1, 1, stop.data[2]))
447-
Base.:(:)(start::Integer, stop::RaggedEnd) = RaggedRange((stop.data[1], Int(start), 1, stop.data[2]))
448-
Base.:(:)(start::Integer, step::Integer, stop::RaggedEnd) = RaggedRange((stop.data[1], Int(start), Int(step), stop.data[2]))
450+
Base.:(:)(stop::RaggedEnd) = RaggedRange(stop.dim, 1, 1, stop.offset)
451+
Base.:(:)(start::Integer, stop::RaggedEnd) = RaggedRange(stop.dim, Int(start), 1, stop.offset)
452+
Base.:(:)(start::Integer, step::Integer, stop::RaggedEnd) = RaggedRange(stop.dim, Int(start), Int(step), stop.offset)
449453

450454
@inline function _is_ragged_dim(VA::AbstractVectorOfArray, d::Integer)
451455
length(VA.u) <= 1 && return false
@@ -533,17 +537,11 @@ end
533537

534538
@inline _resolve_ragged_index(idx, ::AbstractVectorOfArray, ::Any) = idx
535539
@inline function _resolve_ragged_index(idx::RaggedEnd, VA::AbstractVectorOfArray, col)
536-
dim = idx.data[1]
537-
offset = idx.data[2]
538-
return lastindex(VA.u[col], dim) + offset
540+
return lastindex(VA.u[col], idx.dim) + idx.offset
539541
end
540542
@inline function _resolve_ragged_index(idx::RaggedRange, VA::AbstractVectorOfArray, col)
541-
dim = idx.data[1]
542-
start_val = idx.data[2]
543-
step_val = idx.data[3]
544-
offset = idx.data[4]
545-
stop_val = lastindex(VA.u[col], dim) + offset
546-
return Base.range(start_val; step = step_val, stop = stop_val)
543+
stop_val = lastindex(VA.u[col], idx.dim) + idx.offset
544+
return Base.range(idx.start; step = idx.step, stop = stop_val)
547545
end
548546
@inline function _resolve_ragged_index(idx::AbstractRange{<:RaggedEnd}, VA::AbstractVectorOfArray, col)
549547
return Base.range(_resolve_ragged_index(first(idx), VA, col); step = step(idx),

0 commit comments

Comments
 (0)