// $Id$ interface Cubit // = TITLE // Defines an interface that encapsulates operations that cube // numbers. // // = DESCRIPTION // This interface encapsulates operations that cube // octets, shorts, longs, structs and unions. { octet cube_octet (in octet o); // cube an octet short cube_short (in short s); // cube a short long cube_long (in long l); // cube a long struct Many { octet o; // + 3 bytes padding (normally) ... long l; short s; // + 2 bytes padding (normally) ... }; Many cube_struct (in Many values); // Cube a struct enum discrim { e_0th, e_1st, e_2nd, e_3rd }; // Enumeration of the different elements in a union. union oneof switch (discrim) { // this is an easy union to interpret; no padding // is needed between discriminant and value. case e_0th: octet o; case e_1st: short s; case e_2nd: long l; case e_3rd: Many cm; // default: // Many cm; }; // Union of different types. oneof cube_union (in oneof values); // cube a union. oneway void please_exit (); // shutdown the application. }; interface Cubit_Factory // = TITLE // Creates Cubit objects { Cubit make_cubit (in string key); };