Connected: An Internet Encyclopedia
3.19 Optional-data

Up: Connected: An Internet Encyclopedia
Up: Requests For Comments
Up: RFC 1832
Up: 3. XDR DATA TYPES
Prev: 3.18 Typedef
Next: 3.20 Areas for Future Enhancement

3.19 Optional-data

3.19 Optional-data

Optional-data is one kind of union that occurs so frequently that we give it a special syntax of its own for declaring it. It is declared as follows:

         type-name *identifier;

This is equivalent to the following union:

         union switch (bool opted) {
         case TRUE:
            type-name element;
         case FALSE:
            void;
         } identifier;

It is also equivalent to the following variable-length array declaration, since the boolean "opted" can be interpreted as the length of the array:

         type-name identifier<1>;

Optional-data is not so interesting in itself, but it is very useful for describing recursive data-structures such as linked-lists and trees. For example, the following defines a type "stringlist" that encodes lists of arbitrary length strings:

         struct *stringlist {
            string item<>;
            stringlist next;
         };

It could have been equivalently declared as the following union:

         union stringlist switch (bool opted) {
         case TRUE:
            struct {
               string item<>;
               stringlist next;
            } element;
         case FALSE:
            void;
         };

or as a variable-length array:

         struct stringlist<1> {
            string item<>;
            stringlist next;
         };

Both of these declarations obscure the intention of the stringlist type, so the optional-data declaration is preferred over both of them. The optional-data type also has a close correlation to how recursive data structures are represented in high-level languages such as Pascal or C by use of pointers. In fact, the syntax is the same as that of the C language for pointers.


Next: 3.20 Areas for Future Enhancement

Connected: An Internet Encyclopedia
3.19 Optional-data