An enumerated type allows you to assign identifiers to the members of a set of values, for example:
module Finance { enum Currency {pound, dollar, yen, franc}; interface Account { readonly attribute float balance; readonly attribute Currency balanceCurrency; ... }; };In this example, attribute
balanceCurrency
in interface Account
can take any
one of the values pound
, dollar
, yen
, or franc
.
A struct data type allows you to package a set of named members of various types, for example:
module Finance { struct CustomerDetails { string name; short age; }; interface Bank { CustomerDetails getCustomerDetails(in string name); ... }; };
In this example, the struct CustomerDetails
has two members. The operation
getCustomerDetails
returns a struct of type CustomerDetails
that includes
values for the customer name and age.
A union data type allows you to define a structure that can contain only one of several alternative members at any given time.
A union saves space in memory, as the amount of storage required for a union is the amount necessary to store its largest member.
All IDL unions are discriminated. A discriminated union associates a label value with each member. The value of the label indicates which member of the union currently stores a value.
For example, consider the following IDL union definition:
struct DateStructure { short Day; short Month; short Year; }; union Date switch (short) { case 1: string stringFormat;; case 2: long digitalFormat; default: DateStructure structFormat; };The union type
Date
is discriminated by a short value.
For example, if this short
value is 1, then the union member stringFormat
stores a date value as an
IDL string
.
The default label associated with the member structFormat
indicates
that if the short value is not 1 or 2, then the structFormat
member stores a
date value as an IDL struct.
Note that the type specified in parentheses after the switch
keyword must be
an integer, char, boolean or enum type and the value of each case label must be
compatible with this type.
An IDL string
represents a character string, where each character can take any
value of the char basic type.
If the maximum length of an IDL string is specified in the string declaration, then the string is bounded. Otherwise the string is unbounded.
The following example shows how to declare bounded and unbounded strings:
module Finance { interface Bank { // A bounded string with maximum length 10. attribute string sortCode<10>; // An unbounded string. attribute string address; ... }; };