Parameter Description Structure

The interface provides information about the parameters of a Natural subprogram or method in a structure named parameter_description. The structure is defined in the header file natuser.h. This file is contained in the directory <install-dir>/natural/samples/sysexnni.

An array of parameter_description structures is passed to the interface with each call to nni_callnat and similar functions. A parameter_description structure is created from a parameter in a parameter set using the function nni_get_parm_info.

The relevant elements of the structure contain the following information. All elements not listed in this table are for internal use only.

Format Element Name Content
void* address Address of the parameter value. Must not be reallocated or freed. The address element is a null pointer for arrays of dynamic variables and for x-arrays. In these cases, the array data cannot be accessed as a whole, but can only be accessed elementwise through the parameter access function nni_get_parm.
int format Natural data type of the parameter. Refer to Natural Data Types for further information.
int length Natural length of the parameter value. In the case of the data types NNI_TYPE_ALPHA and NNI_TYPE_UNICODE, the number of characters. In the case of the data types NNI_TYPE_PACK and NNI_TYPE_NUM, the number of digits before the decimal character. In the case of an array, the length of a single occurrence. In the case of an array of dynamic variables, the length is indicated with 0. The length of an individual occurrence must then be determined with the function nni_get_parm_array_length.
int precision In the case of the data types NNI_TYPE_PACK and NNI_TYPE_NUM the number of digits after the decimal character, 0 otherwise.
int byte_length Length of the parameter value in bytes. In the case of an array the byte length of a single occurrence. In the case of an array of dynamic variables the byte length is indicated with 0. The length of an individual occurrence must then be determined with the function nni_get_parm_array_length.
int dimensions Number of dimensions. 0 in the case of a scalar. The maximum number of dimensions is 3.
int length_all Total length of the parameter value in bytes. In the case of an array the byte length of the whole array. In the case of an array of dynamic variables the total length is indicated with 0. The length of an individual occurrence must then be determined with the function nni_get_parm_array_length.
int flags Parameter flags, see Flags.
int occurrences[10] Number of occurrences in each dimension. Only the first three occurrences are used.
int indexfactors[10] Array index factors for each dimension. Only the first three occurrences are used.

In the case of arrays with fixed bounds of variables with fixed length, the array contents can be accessed directly using the structure element address. In these cases the following applies:

  • The address of the element (i,j,k) of a three dimensional array is computed as follows:

    elementaddress = address + i * indexfactors[0] + j * indexfactors[1] + k * indexfactors[2]

  • The address of the element (i,j) of a two dimensional array is computed as follows:

    elementaddress = address + i * indexfactors[0] + j * indexfactors[1]

  • The address of the element (i) of a one dimensional array is computed as follows:

    elementaddress = address + i * indexfactors[0]