Hi, I'd like to understand how the Boost Multi-array implements multiple indexing using the regular square bracket operator. I've waded through the template code for a few hours, from what I understand, there's a nested bunch of sub-arrays which leads to a final object which offers a reference into the data array. I still can't figure out, however, how it solves this problem: Consider a Multi-Array A with dimension 3, Calling A[ i ][ j ][ k ] requires a call to A[ i ] which returns a Subarray, S1 The subarray gets indexed S1[ j ] and another subarray S2 is returned. however S2[k] doesn't return a subarray, but a reference to the data in the multiarray. However, S1 and S2 are the same object (subarray), hence require the same overloaded operator, returning the same type. making this unfeasible. Therefore, the only way I can think to eliminate this dilemma is to have a different object type for every dimension. I'm not sure if this is what Multi-array does, but I'd sure like to know how it's done . Thanks Todd
todd keeler a écrit :
However, S1 and S2 are the same object (subarray), hence require the same overloaded operator, returning the same type. making this unfeasible.
Therefore, the only way I can think to eliminate this dilemma is to have a different object type for every dimension. I'm not sure if this is what Multi-array does, but I'd sure like to know how it's done .
I guess that each subarray types contains its number of dimension hence making it different types with yet same interface. -- ___________________________________________ Joel Falcou - Assistant Professor PARALL Team - LRI - Universite Paris Sud XI Tel : (+33)1 69 15 66 35
On Mon, Oct 20, 2008 at 8:37 PM, todd keeler
Hi, I'd like to understand how the Boost Multi-array implements multiple indexing using the regular square bracket operator.
I've waded through the template code for a few hours, from what I understand, there's a nested bunch of sub-arrays which leads to a final object which offers a reference into the data array.
I still can't figure out, however, how it solves this problem:
Consider a Multi-Array A with dimension 3, Calling A[ i ][ j ][ k ] requires a call to
A[ i ] which returns a Subarray, S1
The subarray gets indexed S1[ j ] and another subarray S2 is returned.
however S2[k] doesn't return a subarray, but a reference to the data in the multiarray.
However, S1 and S2 are the same object (subarray), hence require the same overloaded operator, returning the same type. making this unfeasible.
Therefore, the only way I can think to eliminate this dilemma is to have a different object type for every dimension. I'm not sure if this is what Multi-array does, but I'd sure like to know how it's done .
The subarrays S1 & S2 are instantiations of the same template, but with different instantiation parameters (ie., the dimensionality of the subarray), and so are different types, for which overload resolution works in the normal way. Regards, Rob.
participants (3)
-
Joel Falcou
-
Robert Jones
-
todd keeler