On Fri, Oct 10, 2008 at 12:55 AM, Ronald Garcia
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 problem, 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 generally 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 write 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.