To support application development in a variety of languages and to support the special needs of distributed applications, IDL provides an extensive set of data types, including the following:
· Simple types, such as integers, floating-pointing numbers, characters, Booleans, and the primitive binding-handle type handle_t (usually equivalent to rpc_binding_handle_t)
· Predefined types, including ISO international character types and the error status type error_status_t
· Constructed types, such as strings, structures, unions, arrays, pointers, and pipes
The IDL typedef declaration lets you give a name to any types you construct.
The general form of a type declaration is
typedef [type_attribute,...] type_specifier type_declarator,...;
where the bracketed list of type attributes is optional. The type_specifier specifies a simple type, a constructed type, a predefined type, or a type previously named in the interface. Each type_declarator is a name for the type being defined. As in C, arrays and pointers are declared by the type_declarator constructs [ ] (brackets) and * (asterisk).
The following type declaration uses the IDL's simple data type, long (a 32-bit data type), to define the integer32 integer type:
typedef long integer32;
The type_specifier constructs for structures and unions permit the application of attributes to members. In the following example, one member of a structure is a conformant array (an array without a fixed upper bound), and the size_is attribute names another member of the structure that at runtime provides information about the size of the array:
typedef struct {
long dsize;
[size_is(dsize)] float darray[];
} dataset;