This sounds like the right approach. I'll try it soon and report what I did/didn't succeed at. Thanks.
On Mon, Aug 17, 2015 at 6:10 PM, Matt Bauman <[email protected]> wrote: > One way to make OffsetArrays safe would be to make them index normally > with integer indices, but introduce a *new* Integer type that gives it the > special offset behavior. You could name it something short, like F (for > Fortran or oFFset) to reduce typing: > > `A[F(-10), F(0)]` > > ... and you could do even better by making it construct by multiplication > with the typename: > > `A[-10F, 0F]` > > Or even better, you should be able to write a macro that automatically > converts all indices to this special type: > > `@offset A[-10,0]` # This also could disallow the pesky end keyword! > > I was playing with RaggedArrays over the weekend, and there I had to solve > a similar problem because there are two possible meanings for linear > indexing. So I just created a LinearIndex type that behaves differently: > https://github.com/mbauman/RaggedArrays.jl/blob/d2b6aeb854855c7912c104cb5312c13e989f2cf4/src/core.jl#L229-L247 > > Matt > > On Monday, August 17, 2015 at 4:36:27 PM UTC-4, lawrence dworsky wrote: >> >> Thanks for putting your time into this. Right now I'm still using 0.3.11, >> waiting for 0.4 to be the standard release. Then I'll dig into this and see >> if I get it to do what I want without undue aggravation. I had the same >> indexing issue with MatLab. Sometimes I miss the brute straightforwardness >> of Fortran. >> >> Larry >> >> >> On Mon, Aug 17, 2015 at 1:16 PM, Matt Bauman <[email protected]> wrote: >> >>> On Monday, August 17, 2015 at 1:03:17 PM UTC-4, Sisyphuss wrote: >>>> >>>> I read the "interfaces >>>> <http://docs.julialang.org/en/latest/manual/interfaces/>" chapter of >>>> the documentation today. I learned that, if you define an iterable as a >>>> subtype of AbstractArray, with only defining three methods (including >>>> `size()`, excluding `start()`), you can iterate on it just like iterate on >>>> an normal Array. >>>> >>> >>> Iteration should work just fine in 0.4 if OffsetArray defines its own >>> `eachindex` method. >>> >>> Although more and more for loops are written generically using >>> `eachindex`, there are still a lot of methods that use the old linear >>> indexing standby: >>> >>> for i=1:length(A) >>> @inbounds A[i] = … >>> end >>> >>> This is where things get really hairy for OffsetArrays. That >>> `@inbounds` propagates through to the inner array assignment, which will >>> lead to silent data corruption and/or segfaults. That's really why it >>> shouldn't be an AbstractArray. >>> >> >>
