Boost logo

Boost Users :

Subject: Re: [Boost-users] [multi_array] Access a view's index_range
From: Robert Jones (robertgbjones_at_[hidden])
Date: 2008-10-10 04:02:33

On Fri, Oct 10, 2008 at 12:55 AM, Ronald Garcia <garcia_at_[hidden]>wrote:

> Hi Robert,
> The index_range object is used to create views, but it doesn't stay around.
> However, all of the information from an index_range is still accessible.
> You want to look into the following 3 MultiArray concept functions:
> indices(), strides(), and shape().
> Based on your code, it looks like you're trying to get the valid indices
> for the array so you can dereference it.
> If you're not changing the index base (meaning your array indices always
> start at 0), then you want to write:
> typedef Grid::array_view<2>::type view_t
> ...
> for(view_t::index i = 0; i != view.size(); ++i) { ... }
Hi Ron

Thanks for your help - the solution you suggest will solve my immediate
however I was really looking for a more general solution. Looking through
the reference,
AFAICS the only occurance of "indices" is as the global static
index_gen<0,0> object.
Had this function been present as an member of multi_array it might
reasonbly return
exactly the information I'm seeking.

Without making the assumption that my indices are zero based I think I can
write my loop as, (and please confirm this btw)

for (view_t::index i = * view.index_bases(); i != * view.shape(); ++i )

but it seems a rather non-obvious and cumbersome expression. If view_t had
an indices() method that returned a list of index_range objects then I could

for(view_t::index i = view.indices()[0].start(); i !=
view.indices()[0].finish(); ++i ){.....}

which seems to be a more obvious syntax, and more suggestive of
looping over a range. Even better would be to support this syntax

for(view_t::index i=view.indices(0).start(); i != view.indices(0).finish();
++i ) {.....}

Sorry if I'm covering old ground btw, but multi_array has been around in
Boost for
rather longer than I have.

- Rob.

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at