Hi,

I'm trying to define a custom Array type that can be indexed using 
arbitrary ranges.

e.g. A = MyArray(Int, 3:8) would define a 6-element vector with indexes 
ranging from 3 to 8, rather than the default 1 to 6.

I've made some progress, but am now stuck on how to handle colon indexing.

A[4:6] works by defining appropriate getindex and setindex!

e.g.  setindex!{T,S<:Real}(A::MyArray{T,1}, value, I::AbstractVector{S}) = 
...

but A[:] = 0 seems to get translated to A[1:6] before dispatch on setindex!, 
so I can't hijack the call.

>From subarray.jl, the code below suggests I can specialise on the Colon 
type, but this doesn't seem to work for me. Colon appears to be converted 
to UnitRange *before* calling setindex!

sub(A::AbstractArray, I::Union(RangeIndex, Colon)...) = sub(A, ntuple(length
(I), i-> isa(I[i], Colon) ? (1:size(A,i)) : I[i])...)


Is there a way around this?
Should I be able to specialise on the colon argument?

-- Greg

Reply via email to