You might get some ideas here https://github.com/alsam/OffsetArrays.jl
On Saturday, October 8, 2016 at 6:39:19 PM UTC+2, Brian Rogoff wrote: > > > > Hi, > I saw in the release notes that Julia added support for different > array indexing methods. I decided to try my hand at implementing zero > indexed vectors, and started with the instructions here > http://docs.julialang.org/en/latest/devdocs/offset-arrays/ I found this > part of the documentation to be unhelpful compared to other parts of the > Julia docs (is that just me?), but with a bit of hacking I came up with this > > immutable ZeroIndexedVector{T} <: AbstractArray{T, 1} > data::Array{T,1} > end > > Base.linearindices{T}(A::ZeroIndexedVector{T}) = 0:(length(A.data)-1) > Base.getindex{T}(A::ZeroIndexedVector{T}, i::Int) = A.data[i + 1] > Base.setindex!{T}(A::ZeroIndexedVector{T}, v, i::Int) = (A.data[i + 1] = v) > Base.indices{T}(A::ZeroIndexedVector{T}) = > (0:(length(A.data)-1),) > > Base.endof{T}(A::ZeroIndexedVector{T}) = length(A.data) - 1 > Base.show{T}(A::ZeroIndexedVector{T}) = show(A.data) > function Base.display{T}(A::ZeroIndexedVector{T}) > @printf("%d-element ZeroIndexedVector{%s, 1}:\n", > length(A.data), > string(T)) > for elt in A.data > @printf("%s\n", string(elt)) > end > end > > Apart from some obvious failings (eg, not copying he backing array) it > seems to work. What's the best way to write this code? How does one extend > this to multidimensional arrays? IMO, the explanation of how to do these > two things would have served as good examples on the doc page. > > -- Brian >