Visible to Intel only — GUID: GUID-28C48707-13BB-48FF-AB75-DA69ED88A623
Visible to Intel only — GUID: GUID-28C48707-13BB-48FF-AB75-DA69ED88A623
CFI_section
C function prototype: Updates a C descriptor for an array section for which each element is an element of a given array.
int CFI_section(CFI_cdesc_t *result, const CFI_cdesc_t *source, const CFI_index_t lower_bounds[], const CFI_index_t upper_bounds[], const CFI_index_t strides[]);
Formal Parameters:
result |
The address of a C descriptor with rank equal to the rank of source minus the number of zero strides. The attribute member must have the value CFI_attribute_other or CFI_attribute_pointer. If the value of result is the same as either a C formal parameter that corresponds to a Fortran actual argument or a C actual argument that corresponds to a Fortran dummy argument, the attribute member must have the value CFI_attribute_pointer. Successful execution of CFI_section updates the base_addr and dim members of the C descriptor with the address result to describe the array section determined by source, lower_bounds, upper_bounds, and strides, as follows:
|
source |
The address of a C descriptor that describes a nonallocatable nonpointer array, an allocated allocatable array, or an associated array pointer. The elem_len and type members of source must have the same values as the corresponding members of result. |
lower_bounds |
A null pointer or the address of an array with at least source->rank elements. If it is not a null pointer, and stridei is zero or (upperi −lower_bounds[i] + stridei)/stridei > 0, the value of lower_bounds[i] must be within the bounds of dimension i of SOURCE. |
upper_bounds |
A null pointer or the address of an array with at least source->rank elements. If source describes an assumed-size array, upper_bounds must not be a null pointer. If it is not a null pointer and stridei is zero or (upper_bounds[i] − loweri + stridei)/stridei > 0, the value of upper_bounds[i] must be within the bounds of dimension i of SOURCE. |
strides |
A null pointer or the address of an array with at least source->rank elements. |
If an error is detected, the C descriptor with the address result is not modified.
Result Value
The result is an error indicator.
Example
If source is already the address of a C descriptor for the rank-one Fortran array A, the lower bounds of A are equal to 1, and the lower bounds in the C descriptor are equal to 0, the following code fragment establishes a new C descriptor section and updates it to describe the array section A(3::5):
CFI_index_t lower[1], strides[1];
CFI_CDESC_T(1) section;
int ind;
lower[0] = 2;
strides[0] = 5;
ind = CFI_establish((CFI_cdesc_t *)§ion, NULL,
CFI_attribute_other,
CFI_type_float, 0, 1, NULL);
ind = CFI_section((CFI_cdesc_t *)§ion, source,
lower, NULL, strides);
If source is already the address of a C descriptor for a rank-two Fortran assumed-shape array A with lower bounds equal to 1, the following code fragment establishes a C descriptor and updates it to describe the rank-one array section A(:, 42):
CFI_index_t lower[2], upper[2], strides[2];
CFI_CDESC_T(1) section;
int ind;
lower[0] = source->dim[0].lower_bound;
upper[0] = source->dim[0].lower_bound + source->dim[0].extent - 1;
strides[0] = 1;
lower[1] = upper[1] = source->dim[1].lower_bound + 41;
strides[1] = 0;
ind = CFI_establish((CFI_cdesc_t *)§ion, NULL,
CFI_attribute_other,
CFI_type_float, 0, 1, NULL);
ind = CFI_section((CFI_cdesc_t *)§ion, source,
lower, upper, strides);