$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [Boost-users] multi-array and pdes
From: Larry Evans (cppljevans_at_[hidden])
Date: 2011-06-27 11:54:02
On 05/27/11 14:14, Larry Evans wrote:
[snip]
> After finding:
> 
>   Reference access(boost::type<Reference>,index idx,TPtr base,
>                    const size_type* extents,
>                    const index* strides,
>                    const index* index_bases) const {
> 
>     BOOST_ASSERT(idx - index_bases[0] >= 0);
>     BOOST_ASSERT(size_type(idx - index_bases[0]) < extents[0]);
>     // return a sub_array<T,NDims-1> proxy object
>     TPtr newbase = base + idx * strides[0];
>     return Reference(newbase,extents+1,strides+1,index_bases+1);
> 
> in boost/multi_array/base.hpp, I'm guessing that array_dyn has
> no advantage in offset calculation since there's no test in
> that base.hpp code on general_storage_order<>::ascending.
> However, I'm still not sure how multi_array does it, unless
> it allows strides to be negative to account for a false
> ascending value and increments the base value to account for
> the negative strides, much like array_dyn's:
> 
>   box_domain::init_iter_strides
> 
> Sorry for the noise about offset calculations.
After reading:
  http://www.boost.org/doc/libs/1_46_1/libs/multi_array
    /doc/reference.html#memory_layout
which provides an example:
Finally, both dimensions could be stored in descending order:
  int data[] = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
  int *a = data + 11;
  int s[] = { -4, -1 };
which strongly suggest that multi_array *does* use negative
strides:
  int s[] = { -4, -1 };
*and* somehow performs an offset calculation to account for
those:
  int *a = data + 11;
I'm guessing that there's really no difference in the way array_dyn
implements this reversal and offset calculation.  The only difference
is in the interface which uses a bool to specify whether an axis
is reversed rather than a negative length.
I just didn't see where this was done from looking at code :(
-regards
Larry