$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [Boost-users] [MultiArray] subscript to index
From: Larry Evans (cppljevans_at_[hidden])
Date: 2010-05-04 01:16:58
On 05/03/10 22:20, Sami wrote:
> 
> On Sat, May 1, 2010 at 9:08 AM, Rhys Ulerich <rhys.ulerich_at_[hidden] 
> <mailto:rhys.ulerich_at_[hidden]>> wrote:
> 
> 
>     Not as far as I know.  You could accomplish this accumulating indices
>     and strides relative to the origin (similar to the pseudocode for
>     a(index_list) in Table 3 of
>     http://www.boost.org/doc/libs/1_42_0/libs/multi_array/doc/reference.html). 
> 
>      One other option might be &a(index_list) - a.origin().
> 
> 
> ... since origin() is arr [0][0]...[0],  neither of these is the answer 
> in general. But thanks, good pointers there! Sad there isn't a 
> multi_array::offset( indices ) or something that: 
> 
> assert ( 
>    &arr( index_list )  == arr.data() + arr.*offset*( index_list )  
>  )
> 
> this kind of stuff is useful when interacting with legacy libs or other 
> languages. 
Hmm... I puzzled why you think Sami's method won't work.
For example, given the strides, s[ndim] and indices, i[ndim], and
a.origin(), then the distance between a.origin() and the element
at indices, i[0...ndim-1] is simply the sum of the vector product
of s prepended with 1 and i.  e.g.,
For a[2][2][2], the strides would be:
    s={2,4,8},
and for i={1,1,1}, then
   offset (of a[1]][1][1]) = 1*i[0]+s[0]*i[1]+s[1]*i[2]
Wouldn't that work?