| typedef struct descriptor_dimension |
| { |
| int stride; |
| int lbound; |
| int ubound; |
| } descriptor_dimension; |
| typedef struct { |
| int *data; |
| int dtype; |
| descriptor_dimension dim[7]; |
| } gfc_array_i4; |
| |
| void |
| msum_i4 (gfc_array_i4 * const retarray, |
| gfc_array_i4 * const array, |
| const int * const pdim) |
| { |
| int count[7]; |
| int extent[7]; |
| int * dest; |
| const int * base; |
| int dim; |
| int n; |
| int len; |
| |
| dim = (*pdim) - 1; |
| len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; |
| |
| for (n = 0; n < dim; n++) |
| { |
| extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; |
| count[n] = 0; |
| } |
| |
| dest = retarray->data; |
| base = array->data; |
| |
| do |
| { |
| int result = 0; |
| |
| for (n = 0; n < len; n++, base++) |
| result += *base; |
| *dest = result; |
| |
| count[0]++; |
| dest += 1; |
| } |
| while (count[0] != extent[0]); |
| } |
| |
| int main() |
| { |
| int rdata[3]; |
| int adata[9]; |
| gfc_array_i4 retarray = { rdata, 265, { { 1, 1, 3 } } }; |
| gfc_array_i4 array = { adata, 266, { { 1, 1, 3 }, { 3, 1, 3 } } }; |
| int dim = 2; |
| msum_i4 (&retarray, &array, &dim); |
| return 0; |
| } |