@@ -62,7 +62,7 @@ must start with value 1.
62
62
63
63
has `r[1] == 3` and `r[2] == 4` and would satisfy `r == 3:4`, whereas
64
64
65
- ```
65
+ ```julia
66
66
julia> convert(OffsetArrays.IdOffsetRange{Int,Base.OneTo{Int}}, 3:4) # future behavior, not present behavior
67
67
ERROR: ArgumentError: first element must be 1, got 3
68
68
```
@@ -86,22 +86,23 @@ function IdOffsetRange{T,I}(r::AbstractUnitRange, offset::Integer = 0) where {T<
86
86
return IdOffsetRange {T,I} (rc, convert (T, o+ offset))
87
87
end
88
88
function IdOffsetRange {T} (r:: AbstractUnitRange , offset:: Integer = 0 ) where T<: Integer
89
- rc = convert (AbstractUnitRange{T}, r):: AbstractUnitRange{T}
89
+ rc = convert (AbstractUnitRange{T}, r)
90
90
return IdOffsetRange {T,typeof(rc)} (rc, convert (T, offset))
91
91
end
92
92
IdOffsetRange (r:: AbstractUnitRange{T} , offset:: Integer = 0 ) where T<: Integer =
93
93
IdOffsetRange {T,typeof(r)} (r, convert (T, offset))
94
94
95
95
# Coercion from other IdOffsetRanges
96
- IdOffsetRange {T,I} (r:: IdOffsetRange{T,I} ) where {T<: Integer ,I <: AbstractUnitRange{T} } = r
97
- function IdOffsetRange {T,I} (r:: IdOffsetRange ) where {T<: Integer ,I<: AbstractUnitRange{T} }
98
- rc, offset = offset_coerce (I, r. parent)
99
- return IdOffsetRange {T,I} (rc, r. offset+ offset)
96
+ IdOffsetRange {T,I} (r:: IdOffsetRange{T,I} ) where {T,I } = r
97
+ function IdOffsetRange {T,I} (r:: IdOffsetRange , offset :: Integer = 0 ) where {T<: Integer ,I<: AbstractUnitRange{T} }
98
+ rc, offset_rc = offset_coerce (I, r. parent)
99
+ return IdOffsetRange {T,I} (rc, r. offset + offset + offset_rc )
100
100
end
101
- function IdOffsetRange {T} (r:: IdOffsetRange ) where T<: Integer
102
- return IdOffsetRange ( convert (AbstractUnitRange {T}, r. parent) , r. offset)
101
+ function IdOffsetRange {T} (r:: IdOffsetRange , offset :: Integer = 0 ) where T<: Integer
102
+ return IdOffsetRange {T} ( r. parent, r. offset + offset)
103
103
end
104
104
IdOffsetRange (r:: IdOffsetRange ) = r
105
+ IdOffsetRange (r:: IdOffsetRange , offset:: Integer ) = typeof (r)(r. parent, offset + r. offset)
105
106
106
107
# TODO : uncomment these when Julia is ready
107
108
# # Conversion preserves both the values and the indexes, throwing an InexactError if this
121
122
# rc, o = offset_coerce(Base.OneTo{T}, r.parent)
122
123
123
124
# Fallback, specialze this method if `convert(I, r)` doesn't do what you need
124
- offset_coerce (:: Type{I} , r:: AbstractUnitRange ) where I<: AbstractUnitRange{T} where T =
125
+ offset_coerce (:: Type{I} , r:: AbstractUnitRange ) where I<: AbstractUnitRange =
125
126
convert (I, r), 0
126
127
127
128
@inline Base. parent (r:: IdOffsetRange ) = r. parent
0 commit comments