Pointer types are opaque, interface, class, and array. This subsection
elaborates on each within the context of the Fortran 90 language bindings.
Opaque
pointers are
mapped to the equivalent of SIDL double. That is, the
intermediate object reference (IOR) assumes a 64-bit integer is used to
enable portability between systems with 32-bit and 64-bit address spaces.
On a 32-bit system, the upper 32
bits of these quantities are ignored. Systems with more than 64-bit
pointers aren't currently supported.
A derived type is used to hold opaque pointers for
interfaces,
classes, and
arrays.
The derived type for arrays of numeric types also
has a pointer to an array to provide native access without
function calls. For each interface and class, there are two modules
created. In the first module, the derived type for the object and
array are defined. In the second, methods for the object (or interface)
and arrays of the object (or interface) are defined. Clients of a class (or
interface), typically use the module containing the methods.
It, in turn, uses the module containing the types.
Generally, clients should treat opaque, interface, class, and array values as black boxes. However, the value zero is special since it is the equivalent of NULL. Hence, any non-zero value is or should be a valid object reference. The method module provides built-in functions to test whether an interface, class, or array value is_null or is not_null. There is also a subroutine to initialize the value to set_null. Clients should generally initialize new class (or interface) pointers to NULL.